Einlesen aus Datei

Hallo zusammen!

ich muss aus einer Datei Int-Zahlen einlesen, und ich hab auch einen Code dazu der wie folgt aussieht:

int holi(void) {
l = 0;
do {
wort[l] = (unsigned char) fgetc(kolp);
l++;
} while ((wort[l-1] != 9) && (wort[l-1] != 10));
wort[l-1] = NULL;
return (atoi(wort));
}

Kann mir jemand erklären, was das Abbruchkriterium bedeuten soll?
und die Bedeutung des Nullzeigers? Und wie kann ich diesen Code erweitern dass er auch float Zahlen einliest?

Danke

Hallo zusammen!

ich muss aus einer Datei Int-Zahlen einlesen, und ich hab auch
einen Code dazu der wie folgt aussieht:

int holi(void) {
l = 0;
do {
wort[l] = (unsigned char) fgetc(kolp);
l++;
} while ((wort[l-1] != 9) && (wort[l-1] != 10));
wort[l-1] = NULL;
return (atoi(wort));
}

Kann mir jemand erklären, was das Abbruchkriterium bedeuten
soll?

Das bricht die Bearbeitung bei einem Tab oder Linefeed ab.

Allgemein gesagt ist der Code in der Kategorie „erschießt den Verfasser“ anzusiedeln.

und die Bedeutung des Nullzeigers? Und wie kann ich diesen
Code erweitern dass er auch float Zahlen einliest?

Das mit dem Nullzeiger ist Schwachsinn. Da müsste stehen „… = 0“, es funktioniert halt irgendwie doch, weil der Compiler den Wert NULL (in C irgendwas wie (void*)0, in C++ einfach nur 0) in was gültiges casten kann.

Der Code sollte so ziemlich alles einlesen bis zum ersten Tab oder Linefeed, und ist nicht sonderlich gut. Was ist zB, wenn das Array „wort“ zu klein ist? Schau dir besser Funktionen wie atoi, atof oder strtol/strtod an, die von einer vorliegenden Zeichenkette direkt in einen brauchbaren Datentyp einlesen ohne dass du so eine redundante Grütze machen musst. Das hört sich gemein an, ist aber leider so. Es gibt den ganzen Kram schon, und man kann es in den meisten Fällen nur schlechter machen.

Hallo Fragewurm,

ich muss aus einer Datei Int-Zahlen einlesen, und ich hab auch
einen Code dazu der wie folgt aussieht:

> int holi(void) {  
> l = 0;  
> do {  
> wort[l] = (unsigned char) fgetc(kolp);  
> l++;  
> } while ((wort[l-1] != 9) && (wort[l-1] != 10));  
> wort[l-1] = NULL;  
> return (atoi(wort));  
> }

Ich kann mich meinem Vorschreiber nur anschliessen, was den Verfasser eines solchen Programms angeht !!!

Ein weiteres Problem ist noch, dass Fehlermeldungen von fgetc() nicht ausgewertet werden !!
Wenn die Datei zu kurz ist, bleibt das Programm für immer und ewig in der Schleife hängen!

fgetc() liefert normalerweise 8-Bit-Werte zurück, also alles zwischen 0 und 255.
Im Fehlerfalle, wird aber, je nach implementierung, ein 16- oder 32-Bit Wert zurückgegeben, z.B. oft -1 bei EOF (End Of File, wenn du mehr lesen willst, asl in der Datei ist).

MfG Peter(TOO)