char id;
int num, r;
if (argc != 2) {
printf("error\n");
exit(1);
}
FILE *file = fopen(argv[1], "r");
if (file == NULL) {
printf("error\n");
exit(1);
}
while ((r = fscanf(file, "%c\t%d", &id, &num)) != EOF) {
if(r == 2) {
printf("id: %c, value: %d\n", id, num);
}
else if (r!=2) {
printf("bad input\n");
}
}
Die Datei Ich versuche, sieht aus wie zu lesen:fscanf - ich weiß nicht, was ich falsch mache hier
i 10
i 12
d 10
d 12
(Das Zeichen/Integer sind tabulatorgetrennt). Meine Ausgabe ist:
id: i, Wert: 10
schlechter Eingang
id: i, Wert: 12
schlechter Eingang
id: d, value: 10
schlechter Eingang
ID: d, Wert: 12
schlecht Eingang
Was mache ich falsch? "Falsche Eingabe" sollte NUR gedruckt werden, wenn die Datei falsch formatiert ist. Die obige Datei zeigt eine ordnungsgemäß formatierte Datei. Ich verstehe nicht, wie r == 2
und r != 2
zur gleichen Zeit (beide Bedingungen sind irgendwie erfüllt).
Nicht nach scanf suchen, um EOF zurückzugeben. Sie sollten prüfen, ob die Anzahl der erwarteten Artikel zurückgegeben wird oder nicht. –
'\ n' und Leerzeichen haben ebenfalls Bedeutung. – Matt
Sie sollten nicht "beenden", wenn Sie eine 'FILE' geöffnet haben: es wird nicht sauber geschlossen. – edmz