尝试使用fgets()从文件读取时出现奇怪的问题

时间:2013-03-29 20:05:50

标签: c input buffer fgets

我正在尝试使用fgets()读取C中的文件但是我遇到了以下问题:

虽然我可以使用fopen()成功打开文件:

if ( file=fopen(filename, "r") == NULL )
{
    printf("Couldn't open specified file. Please try again.");
    exit(1);
}

我无法从中读到任何内容。我正在使用以下循环,虽然没有打印任何内容并且执行成功终止。

while ( (fgets(inputLine, 1023, file)) != NULL)
{
    printf("Hello world");
}

这与实际文件名,文件大小或文件内容无关。似乎没有任何工作,并且调试器中没有任何内容显示为错误。我试过的示例文件是直接复制和粘贴的以下内容:

test.txt
#include <stdio.h>
int main ()
{
       printf("Hello World");
}

你有没有猜到为什么会这样?

注意:我已经从this S'O问题中获取了循环代码,所以我猜它是正确的。

2 个答案:

答案 0 :(得分:6)

这是不正确的:

if ( file=fopen(filename, "r") == NULL )

尝试:

if ( (file=fopen(filename, "r")) == NULL )

他们写的方式相当于file = 0(假设文件已成功打开。如果没有,则与file = 1相同)。这不是你想要的。

答案 1 :(得分:0)

除了你在fopen的情况下犯了错误之外,还有一个潜在的问题,例如:

while ( (fgets(inputLine, 1023, file)) != NULL)
{
    printf("Hello world");
}

默认情况下,标准输出流stdout行缓冲。这意味着您应该添加\n或致电fflush以强制数据有效写入。

fflush(stdout);