Array, und Zahlen aus Dateien
-
Kann man da nicht mit fgetc arbeiten ?
-
c.rackwitz schrieb:
hm, dann musst du wohl oder uebel mit fscanf die zahlen lesen. probier mal als formatstring "%s" und in der datei dann mit whitespace abgetrennte zahlen.
das ist aber nicht zeichenweise - zeichenweise bekommst du mit "%1s" bzw. "%c".
-
Bekomme ich Zeichenweise nicht auch irgendwie mit getchar ? Das Proble ist das wir strenge richtlinien haben. Wie sieht denn überhaupt der code aus um zeichen für zeichen zu lesen und dann gucken ob es eine Zahl ist.. Ich komme nämlihc nicht weiter hier
-
Klar, wenn du nur von Tastatur einlesen willst, reicht getchar(). Ansonsten benötigst du eine FILE*-Eingaberoutine (welche sind denn erlaubt?):
while(!feof(file)) { char c=fgetc(file); if(!isdigit(c) break; //arbeite mit c (bzw. c-'0') ]
-
also fgetc und fscanf sind erlaubt.
-
Zeichen lesen geht mit beiden Möglichkeiten:
//a: fgetc(): int res=fgetc(file); if(res==EOF) break;//End Of File char ch=res; //b: fscanf(): char ch; int res=fscanf(file,"%c",&ch); if(res==EOF) break;
(die if(res==EOF)-Abfrage dient jeweils zur Kontrolle, ob das Dateiende erreicht wurde)
Zum Überprüfen auf Ziffer gibt es erstens die Funktion isdigit() (sofern erlaubt) und zweitens die Per-Hand-Abfrage "if(ch>='0'&&ch<='9')...".
-
Kann ich das denn so verpacken ?
while((res = fgetc(FILE)) != EOF) { if(res >='0' && res <='9') { ... } }
-
ja, kannst du - eventuell würde ich noch ein "else break;" reinpacken - sonst erkennst du z.B. "123A17" al 12317.
-
Habe das nun so, funktioniert aber noch nicht. Das Programm stürzt dabei ab.
#include <stdio.h> int main() { FILE *fp; int zf[100]; char fname[20], c, i = 0; printf("\nDateiname eingeben: "); while((c = getchar()) != '\n') fname[i++] = c; fname[i] = '\0'; i = 0; fp = fopen(fname, "r"); if (fp != NULL) { while ((c = fgetc(fp)) != EOF) { if (c >= '0' && c <= '9') { zf[i++] = (int)c; } else printf("\nBuchstabe %s erkannt!", c); } } else printf("\nDatei konnte nicht gefunden werden"); return 0; }
-
Du solltest c als int deklarieren, sonst klappt der Vergleich auf EOF nicht richtig (EOF ist ein spezieller Rückgabewert außerhalb des Zahlenbereiches für char's, deshalb liefert fgetc() auch int zurück).
-
ok, hab ich, jedoch stürzt das Programm ab, sobald er in der Datei über einen Buchstaben stolpert. Hab den Fehler gerade gefunden, jedoch gibt er mir den Buchtaben dann als Zahl aus wenn ich beim letzten else Zweig %s in %i ändere.
-
Jetzt soll ich die Werte allerdings in float einlesen. Das funktioniert bei mir irgendwie nicht
-
Wenn du das wirklich zeichenweise auslesen sollst, wünsche ich dir viel Spaß beim Zusammenbau des Wertes. Aber du kannst auch direkt in einen float einlesen:
float data; fscanf(file,"%f",&data);
PS: Schau dir mal die Dokumentation zu man: fscanf an - dort gibt es auch eine Liste, welche Format-Spzifikationen unterstützt werden (und was sie bewirken).