使用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,则会导致您看到的内容。