【发布时间】:2021-05-12 18:31:23
【问题描述】:
文本文件是与此类似的单词列表。每个世界都在一个新的路线上
当我运行我的代码时,唯一被打印的是“hi”....我如何让它继续阅读下一行
- 你好
- 你好
- 欢迎
#include <stdio.h>
#include <stdlib.h>
int main()
{
char data[100];
// OPENS THE FILE
FILE *fp = fopen("/classes/cs3304/cs330432/Programs/StringerTest/people.txt", "r");
if (fp == NULL)
{
printf("Unable to open the file\n");
} else {
fscanf(fp, "%s", data);
printf("%s", data);
fclose(fp);
}
}
【问题讨论】:
-
while (fscanf(fp, "%s", data) == 1) -
虽然
if声明中没有弃船(例如exit(1);),但您需要保留else。请注意,您应该将错误报告给stderr,而不是stdout。在错误消息中包含文件名也是一个好主意,这意味着您需要创建一个指向文件名的变量,以便您可以在对fopen()的调用和错误消息中使用该变量。 -
问问自己——
if语句检查什么?一旦你解决了这个问题,你就可以回答是否仍然需要else。也就是说,如果不管if检查的结果如何都调用fscanf,会出现什么问题? -
是的,就是检查打开是否成功。因此,如果没有
else,则意味着fscanf将使用该文件,无论打开的文件是否有效。这不是一件好事吗? -
@dxiv
fscanf有一个你需要注意的怪癖(你可能已经知道了)。如果输入由紧跟换行符的字符串组成,%99s转换将读取到换行符之前的所有内容,然后%*[^\n]转换将失败,%*c转换将不尝试。结果是没有消耗换行符。