0

C でファイルから読み込もうとしてfgets()いますが、次の問題が発生しました。

を使用してファイルを正常に開くことができますが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");
}

なぜこれが起こっているのか推測できますか?

注:このS'O の質問からループ コードを取得したので、正しいと思います。

4

2 に答える 2

6

これは正しくありません:

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

試す:

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

あなたが書いた方法は、file = 0(ファイルが正常に開かれたと仮定します。そうでない場合は、と同じですfile = 1)と同等です。これはあなたが望むものではありません。

于 2013-03-29T20:08:38.623 に答える
0

の条件で間違いを犯しているという事実とは別に、次のfopenようなスニペットに関する潜在的な問題もあります。

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

デフォルトでは、標準出力ストリームstdoutline-bufferedです。これは、データが効率的に書き込まれるようにするには、\nまたは呼び出しを追加する必要があることを意味します。fflush

fflush(stdout);
于 2013-03-29T20:11:20.217 に答える