Gerade/ungerade Zahlen herauslesen
-
Billy schrieb:
Sorry, aber was soll ich jetzt machen :)?
z.b. verklickern, wie viele zahlen in der textdatei stehen
-
Billy schrieb:
Sorry, aber was soll ich jetzt machen :)?
mach den buchstabendreher raus, kompiliere und lass laufen.
-
Ich weis net ganz was du meinst.
in zahlen.txt steht: 54
-
mach feof() statt foef()
-
while(!feof(file1)) { fscanf(file1,"%1d",&c);
Und wenn du mal was anderes als Ziffern in der Datei stehen hast, z.B. Buchstaben, erlebst du eine wunderschöne Endlosschleife. Deshalb und nicht nur deshalb bleibt dein Code Stümperei.
-
so ist es... daher:
gesammte datei auslesen (als string) und die strings bearbeiten, zahlen raussuchen
umwandeln von char in int und fertig... alles andere ist fehlerhaft, vorab wenn
man wenig erfahrung mit files hat.
-
Ich würde da eher Zeilenweise auslesen (Wenn imer eine Zahl in einer Zeile steht). Also immer bis zu einem Zeilenumbruch (\n). Die Strings kann man dann mittels atoi umwandeln.
-
Jochen S. schrieb:
.... Die Strings kann man dann mittels atoi umwandeln.
Besser noch strtol(). Denn das kann dir noch mitteilen wo es nicht mehr umwandeln konnte.
-
DirkB schrieb:
Jochen S. schrieb:
.... Die Strings kann man dann mittels atoi umwandeln.
Besser noch strtol(). Denn das kann dir noch mitteilen wo es nicht mehr umwandeln konnte.
soweit ich weiss, wandelt atoi "gnadenlos" um. Da machen dann auch Buchstaben nichts aus. "12xyz" wird dann einfach zu 12.
-
Jochen S. schrieb:
DirkB schrieb:
Jochen S. schrieb:
.... Die Strings kann man dann mittels atoi umwandeln.
Besser noch strtol(). Denn das kann dir noch mitteilen wo es nicht mehr umwandeln konnte.
soweit ich weiss, wandelt atoi "gnadenlos" um. Da machen dann auch Buchstaben nichts aus. "12xyz" wird dann einfach zu 12.
strtol() wandelt genauso "gandenlos" um, allerdings sagt es dir zusätzlich noch, daß es mit dem Teil ab 'x' nichts mehr anfangen konnte.
(um einzelne Ziffern zu verarbeiten, braucht man übrigens keine so aufwendigen Funktionen, da reicht eine einfache Subtraktion:
char c=fgetc(file1); if(isdigit(c)) { int n=c-'0'; ... } else { printf("unbekanntes Zeichen in der Eingabe\n"); }
-
Gut, aber wenn in der Datei nur Zahlen sind, ist es ja egal, ob man nun atoi oder strtol verwendet. In deinem Code könnte man noch auf isdigit verzichten:
char c=fgetc(file1); int n=c-'0'; if(n<0||n>9)printf("unbekanntes Zeichen in der Eingabe\n");
Oder täusche ich mich da etwa?