Eof

ollek81

Erfahrenes Mitglied
Tach!

Ich steh wieder mal auf'm Schlauch:
While(nicht eof (von ner zum lesen geöffenten Datei))
{......}

was muss ich da für "nicht EOF" reinschreiben??

Blöde Frage, ich weiß!
Aber bei dem was ich hier mache kommt immer nur segmentation fault usw..

HILFE!!!!

ollek81
 
einfach jedes zeichen überprüfen, ob es das eof-zeichen ist.
Code:
int  zeichen;
FILE *infile_p;
while(fgetc(infile_p) != EOF) { ... } // *1
while((zeichen = fgetc(infile_p)) != EOF) { ... } // *2

*1: damit prüfst du einfach nur, ob das zeichen in der datei eof ist, oder nicht.
*2: damit hast du das zeichen auch sofort in einer variable und kannst damit weiter arbeiten. ist nicht immer sinnvoll, aber manchmal praktisch.

btw: die variable zeichen muss ein integer sein, weil ein char nicht ausreicht. das eof-zeichen liegt nicht mehr im wertebereich von char-typen. typischerweise ist der wert für eof nämlich -1 - und char geht nur von 0 bis 255.
 
Zuletzt bearbeitet:
@ wicked
btw: die variable zeichen muss ein integer sein, weil ein char nicht ausreicht. das eof-zeichen liegt nicht mehr im wertebereich von char-typen. typischerweise ist der wert für eof nämlich -1 - und char geht nur von 0 bis 255.
Sorry wenn ich dich da korrigiere, aber der Datentyp geht normalerweis, (ist ein wenig Compilerabhängig) von -128 bis 127, das was du meinst ist unsigned char. Auserdem ist es nicht ganz richtig, das EOF=-1 ist, sondern EOF=0 oder '\0' deshalb, kann man schon den Datentyp char verwenden.

Gruss Homer

P.S. sollte ich mich irren, dann dürft ihr mich steinigen *g* (nee net wirklich, tut ja weh)
 
Der Grund für die Verwendung von int liegt tiefer. Die Konstante EOF, die das Ende der Eingabe anzeigt, ist meist als -1 definiert, denn sie darf nicht mit einem normalen Zeichen kollidieren. Während reine ASCII-Systeme früher lediglich Zeichen im Wertebereich von 0...127 produzierten, kommt es heute regelmäßig vor, daß auch Zeichen mit einem Code größer 127 gelesen werden, insbesondere bei der Verwendung europäischer Sonderzeichen.

Würde ein C-Compiler char-Typen vorzeichenbehaftet darstellen, könnte er zwar das EOF korrekt behandeln, würde aber keine Zeichen mit Codes größer 127 bearbeiten. Wäre der char-Typ dagegen vorzeichenlos, könnten zwar alle Zeichen mit einem Code zwischen 0 und 255 dargestellt werden, aber das EOF hätte keinen Platz mehr. [...]
aus guido krüger: c-programmierung (addison-wesley), seite 346

das mit dem \0-zeichen bezieht sich nur auf text-dateien, weil ein string nach dem null-zeichen abgeschlossen ist und nicht weiter dargestellt wird.

*KLEINEsteinCHENauspack* :) (ist ja nicht ganz falsch ;))
 
Zuletzt bearbeitet:
:mad:
*au, au, aufhören*
müssen das den so große Steine sein? *g*

das mit dem \0-zeichen bezieht sich nur auf text-dateien, weil ein string nach dem null-zeichen abgeschlossen ist und nicht weiter dargestellt wird.
Das ist warscheinlich das Problem, bzw. darum hatte ich nie Probleme mit char.
Naja ich geb mich geschlagen. Hab ich wieder was dazugelernt, danke.

Gruss Homer
 
ich hab doch noch gar nicht angefangen zu werfen...
naja, egal. war ja auch eigentlich nicht so wichtig.
*steinewiedereinpack* genug offtopic. :rolleyes:

[kommentar holyfly: Konstruktieves Offtopic hat noch keinem Forum geschadet :) ]

[kommentar wicked: das "offtopic" bezog sich auch eigentlich auf das steinigen. ;) ]
 
Zuletzt bearbeitet:

Neue Beiträge

Zurück