将文件中的单词存储到C中的数组中

时间:2014-01-12 23:37:46

标签: c arrays store fgets

char c; 
int i=0;   
while( ( c = fgetc(file) ) != EOF )
{   
      fgets (array[i].word, 101, file);
      printf(array[i].word);
      i++;
}

变量arraystruct类型,struct的字段为:char word[101]file是我们正在阅读的文件。

文本文件包含:

Hey You
Look!

但我的节目输出说:

ey You
ook!

有谁知道为什么会这样?

4 个答案:

答案 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())