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

C 尝试使用fgets()读取文件时出现奇怪问题,c,input,buffer,fgets,C,Input,Buffer,Fgets,我试图使用fgets()从C中读取文件,但遇到以下问题: 虽然我可以使用fopen()成功打开文件: 我什么也看不懂。我正在使用下面的循环,尽管没有打印任何内容并且执行成功终止 while ( (fgets(inputLine, 1023, file)) != NULL) { printf("Hello world"); } 这与实际文件名、文件大小或文件内容无关。在调试器中,似乎没有任何东西工作,也没有任何东西显示为错误。我尝试过的一个示例文件是以下直接复制和粘贴的: test.tx

我试图使用
fgets()
从C中读取文件,但遇到以下问题:

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

我什么也看不懂。我正在使用下面的循环,尽管没有打印任何内容并且执行成功终止

while ( (fgets(inputLine, 1023, file)) != NULL)
{
    printf("Hello world");
}
这与实际文件名、文件大小或文件内容无关。在调试器中,似乎没有任何东西工作,也没有任何东西显示为错误。我尝试过的一个示例文件是以下直接复制和粘贴的:

test.txt
#include <stdio.h>
int main ()
{
       printf("Hello World");
}
test.txt
#包括
int main()
{
printf(“你好世界”);
}
你能猜到为什么会这样吗

注意:我从S'O问题中提取了循环代码,因此我猜它是正确的。

这是不正确的:

if ( file=fopen(filename, "r") == NULL )
尝试:

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

这是不正确的:

if ( file=fopen(filename, "r") == NULL )
尝试:


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

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

while ( (fgets(inputLine, 1023, file)) != NULL)
{
    printf("Hello world");
}
默认情况下,标准输出流
stdout
是行缓冲的。这意味着您应该添加
\n
或调用
fflush
,以强制有效地写入数据

fflush(stdout);

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

while ( (fgets(inputLine, 1023, file)) != NULL)
{
    printf("Hello world");
}
默认情况下,标准输出流
stdout
是行缓冲的。这意味着您应该添加
\n
或调用
fflush
,以强制有效地写入数据

fflush(stdout);

不要忘记在
stdout
上的错误消息末尾添加一个
\n
来刷新流。当程序终止时,应该刷新流。能否显示整个程序源代码?在错误消息中,文件名远比字符串“specified file”有用。尝试
perror(文件名)
不要忘记在
stdout
上的错误消息末尾添加一个
\n
来刷新流。当程序终止时,应该刷新流。您能显示整个程序源吗?在错误消息中,文件名远比字符串“specified file”有用。尝试
perror(文件名)非常感谢。有时我会心烦意乱。后来我自己把括号去掉了,忘了放回去。非常感谢。有时我会心烦意乱。后来我自己去掉了那些括号,忘了把它们放回去。