die Datei database.txt enthält
Test1 A
Test2 B
Test3 C
Wenn ich den Code ausführe, wird er gedruckt
KANN NICHT LESEN.
Bitte helfen Sie mir, das Problem zu finden.
fopen kann aus vielen Gründen scheitern. Drucken "No such file" ist nicht hilfreich, wenn ein Berechtigungsfehler vorliegt. man perror
– William Pursel
8. Juni um 13:44 Uhr
Zunächst testest du fp zweimal. Also printf("Error Reading File\n"); wird nie hingerichtet.
Dann die Ausgabe von fscanf sollte gleich sein 2 da Sie zwei Werte lesen.
Michael Foukarakis
scanf() und Freunde geben die Anzahl der erfolgreich abgeglichenen Eingabeelemente zurück. Für Ihren Code wären das zwei oder weniger (bei weniger Übereinstimmungen als angegeben). Kurz gesagt, seien Sie etwas vorsichtiger mit den Handbuchseiten:
#include <stdio.h>
#include <errno.h>
#include <stdbool.h>
int main (void) {
FILE *fp;
if ((fp = fopen("D:\\Sample\\database.txt", "r+")) == NULL) {
puts("No such file\n");
exit(1);
}
char item[9], status;
while (true) {
int ret = fscanf(fp, "%s %c", item, &status);
if (ret == 2)
printf("\n%s \t %c", item, status);
else if (errno != 0) {
perror("scanf:");
break;
} else if(ret == EOF) {
break;
} else {
puts("No or partial match.\n");
}
}
puts("\n");
if (feof(fp)) {
puts("EOF");
}
return 0;
}
Danke 🙂 //while(42) Was bedeutet das?
– Guru
28. Juli 2010 um 11:11 Uhr
Es ist gleichbedeutend mit while(1) oder im Pseudocode while(true).
– Michael Foukarakis
28. Juli 2010 um 11:18 Uhr
In deinem Code:
while(fscanf(fp,"%s %c",item,&status) == 1)
warum 1 und nicht 2? Die scanf-Funktionen geben die Anzahl der gelesenen Objekte zurück.
fscanf behandelt 2 Argumente und gibt daher 2 zurück. Ihre while-Anweisung ist falsch und zeigt daher nie an, was gelesen wurde, und da sie nur 1 Zeile gelesen hat, ist if nicht bei EOF, was zu dem führt, was Sie sehen.
12168900cookie-checkDatei lesen mit fscanf() in Cyes
fopen
kann aus vielen Gründen scheitern. Drucken"No such file"
ist nicht hilfreich, wenn ein Berechtigungsfehler vorliegt.man perror
– William Pursel
8. Juni um 13:44 Uhr