C-从文件中读取行

C-从文件中读取行,c,C,我试图从文件中逐行读取并打印出来。但是,当我运行代码时,它会开始打印中间的行。 char temp[300]; if (input == NULL) { printf("Can't open input file.\n"); exit(-1); } while (!feof(input)) { fgets(temp, 300, input); printf("%s \n", temp); } fclose(input); 有什么理由在中间开始? 编辑:中间的

我试图从文件中逐行读取并打印出来。但是,当我运行代码时,它会开始打印中间的行。
char temp[300];

if (input == NULL) {
    printf("Can't open input file.\n");
    exit(-1);
}

while (!feof(input)) {
    fgets(temp, 300, input);
    printf("%s \n", temp);
}
fclose(input);
有什么理由在中间开始?

<>编辑:中间的意思是我有这样的列表

7,12 Angry Men,1957
95,2001: A Space Odyssey,1968
211,8 and a Half,1963
190,A Beautiful Mind,2001
68,A Clockwork Orange,1971
223,A Fistful of Dollars,1964
108,A Separation,2011
233,A Streetcar Named Desire,1951
40,Alien,1979
58,Aliens,1986
96,All About Eve,1950
224,All Quiet on the Western Front,1930
250,All the President's Men,1976
91,Amadeus,1984
69,Amelie,2001
54,American Beauty,1999
33,American History X,1998
189,Amores Perros,2000
当我到达printf时,它只显示这个

58,Aliens,1986
96,All About Eve,1950
224,All Quiet on the Western Front,1930
250,All the President's Men,1976
91,Amadeus,1984
69,Amelie,2001
54,American Beauty,1999
33,American History X,1998
189,Amores Perros,2000
Edit2:我在程序中做了一个更改以删除printf中的\n

while (fgets(temp, sizeof(temp), input) != NULL) {
        printf("%s", temp);
    }
这就解决了问题。是否有任何原因导致此问题?

请查看

fgets
就足够了:

while (fgets(temp, 300, input) != NULL) {
    printf("%s \n", temp);
}
另外,不要使用像
300
这样的幻数,改为

while (fgets(temp, sizeof temp, input) != NULL) {
    printf("%s \n", temp);
}
它开始打印从中间开始的行


请注意,
fgets
包含尾随的换行符
'\n'
,您不需要将其包含在
printf
中,您的意思是“中间”?

谢谢!但是,我仍然没有从文件中获得完整的列表。它仍然从中间开始。因此,如果列表是苹果、香蕉、葡萄、菠萝、猕猴桃,那么程序只输出葡萄、菠萝、猕猴桃。真奇怪,你确定你没有使用旧版本的文件吗?不,我尝试保存并重新打开它,但仍然给我相同的结果。等等!现在它显示了在我删除printf中的\n后的整个文件。这很奇怪。做以下实验:将程序的输出通过管道传输到文件;然后使用(好的!)纯文本编辑器查看此文件。所有的行都在那里吗?我在记事本中打开了我的文件,并将其与我的结果进行了比较,这就是我如何注意到列表中缺少的项的原因。做得好!(我问这个问题的原因是“不可见”可能意味着它们在屏幕上被覆盖,只是因为杂散的车厢返回。我自己也有过这种情况。)张贴的“不正确”输出是不可能的。
printf()
语句中的
\n
以及调用
fgets()
读取的换行符将导致双倍行距的输出。您的编辑器将生成哪种类型的
行结尾
?最好(最常见)的设置是
DOS行尾
(其他请确保为您使用的系统设置行尾)确保所有文件行都设置为相同的行尾。问题的根源似乎是文件的第一部分行结尾不正确。