char c;
int i=0;
while( ( c = fgetc(file) ) != EOF )
{
fgets (array[i].word, 101, file);
printf(array[i].word);
i++;
}
变量array
是struct
类型,struct
的字段为:char word[101]
。 file
是我们正在阅读的文件。
文本文件包含:
Hey You
Look!
但我的节目输出说:
ey You
ook!
有谁知道为什么会这样?
答案 0 :(得分:3)
有谁知道为什么会这样?
是的,您正在使用fgetc
阅读第一个字符。
使用while(1)
和fgets
的返回代码来确定您是否在输入文件的末尾。
答案 1 :(得分:2)
我认为你的路线:
c = fgetc(file)
获取每一行的第一个字符,这就是它缺失的原因。
答案 2 :(得分:2)
这是因为fgetc(c)
使用缓冲区中的第一个字符。
更改您的代码以使用fgets
读取字符串,并检查NULL
的返回值以了解文件何时被完全读取:
while (fgets(array[i].word, 101, file) != NULL) {
i++;
}
您可以通过放弃对NULL
的检查,并将i++
嵌入到数组表达式中来进一步缩短这一点,如下所示:
while (fgets(array[i++].word, 101, file))
;
请注意,循环体现在是空的。
注意:当文件包含的行数超过array
中的元素数时,您需要注意未定义的行为。
答案 3 :(得分:1)
你实际上正在使用(c = fgetc(file))
注意每行的开头,fgetc实际上从输入缓冲区中拉出一个字符,因此在读取字符串的其余部分时会丢失。
为了在不消耗字符的情况下检查EOF,最好使用while(!file.eof())