Чтение файла с использованием fscanf () в C

Мне нужно прочитать и распечатать данные из файла.
Я написал программу, как показано ниже,

#include #include int main(void) { char item[9], status; FILE *fp; if( (fp = fopen("D:\\Sample\\database.txt", "r+")) == NULL) { printf("No such file\n"); exit(1); } if (fp == NULL) { printf("Error Reading File\n"); } while(fscanf(fp,"%s %c",item,&status) == 1) { printf("\n%s \t %c", item,status); } if(feof(fp)) { puts("EOF"); } else { puts("CAN NOT READ"); } getch(); return 0; } 

файл database.txt содержит
Тест1 A
Тест2 B
Тест3 C

Когда я запускаю код, он печатает

НЕ МОГУ ПРОЧИТАТЬ.

Пожалуйста, помогите мне разобраться с проблемой.

Прежде всего, вы дважды тестируете fp . поэтому printf("Error Reading File\n"); никогда не выполняется.

Затем вывод fscanf должен быть равен 2 так как вы читаете два значения.

scanf() и друзья возвращают количество совпадающих элементов ввода. Для вашего кода это будет два или меньше (в случае меньших совпадений, чем указано). Короче говоря, будьте осторожны с страницами руководства:

 #include  #include  #include  int main(void) { char item[9], status; FILE *fp; if((fp = fopen("D:\\Sample\\database.txt", "r+")) == NULL) { printf("No such file\n"); exit(1); } 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 { printf("No match.\n"); } } printf("\n"); if(feof(fp)) { puts("EOF"); } return 0; } 

В вашем коде:

 while(fscanf(fp,"%s %c",item,&status) == 1) 

почему 1, а не 2? Функции scanf возвращают количество прочитанных объектов.

fscanf будет обрабатывать 2 аргумента и, таким образом, возвращать 2. Ваш оператор while будет ложным, поэтому никогда не будет отображаться прочитанное, а также, если он прочитал только 1 строку, если это не EOF, в результате чего вы видите.