2013-03-29 56 views
0

我试图使用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问题的循环代码,所以我想它是正确的。

+1

不要忘记在'stdout'的消息错误末尾添加'\ n'来刷新流。 – md5

+0

程序结束时应该刷新。 – Barmar

+0

您能否显示整个程序源? – suspectus

回答

6

这是不正确的:

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

尝试:

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

他们的方式你写它相当于file = 0(假设该文件被成功地打开。如果不是,它是一样的。 file = 1)。这不是你想要的。

+0

非常感谢。有时我很分心。我后来自己删除了这些括号,我忘了把它们放回去。 –

0

除了你正在做的fopen条件的错误事实,也有与片段如一个潜在的问题:

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

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

fflush(stdout);