C - 从文件

时间:2016-09-05 20:33:40

标签: 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);

它有什么理由从中间开始?

编辑:所以我在中间的意思是我有一个像这样的列表

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);
    }

这解决了这个问题。是否有任何理由导致这个问题?

1 个答案:

答案 0 :(得分:3)

看看Why is “while ( !feof (file) )” always wrong?

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中,您的意思是“在中间”吗?