使用C中的fscanf()读取文件

我需要从文件中读取和打印数据。
我写的程序如下,

#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.
Test3 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语句将为false,因此从不显示已读取的内容,加上因为它只读取1行,如果不是EOF,则会导致您看到的内容。