2

重複の可能性:
getchar()がWindowsコンソールでリターンをEOFとして認識しないのはなぜですか?

次のプログラムで変数「nc」の値を出力しようとしています。

int main()

{ 
 long nc;
 nc = 0;

 while (getchar() != EOF)
 ++nc;
 printf("%ld\n", nc); 
}

印刷されない理由を教えてください。

4

5 に答える 5

5

whileループに角かっこがありません(これが角かっこを使用しないとエラーが発生しやすいソフトウェアになる理由です)。したがって、値は増分されますが、印刷されません。

試す:

int main(int argc, char** argv)
{ 
    long nc;
    nc = 0;

    while (getchar() != EOF)
    { // ADD THIS
        ++nc;
        printf("%ld\n", nc); 
    } // AND THIS
}

それ以外の場合、コードは基本的に次のことを実行します。

int main(int argc, char** argv)
{ 
    long nc;
    nc = 0;

    while (getchar() != EOF)
    {
        ++nc; // ENDLESSLY ADDING
    }
    printf("%ld\n", nc); // NEVER REACHED DUE TO WHILE LOOP.
}
于 2013-01-11T21:04:07.047 に答える
3

whileループは、Unixの場合はControl-D、Windowsの場合はControl-Z、Returnを使用して入力を終了するまでループし続けます。++ ncとprintfの前後に中括弧を使用しなかったため、何も印刷せずにこれを実行します。

#include <stdio.h>プログラムの先頭にいない場合は、printfで問題が発生する可能性もあります。コンパイラがprintfがvarargs関数であることを知らない場合、それを呼び出すときに引数リストを正しくフォーマットしません。

于 2013-01-11T21:01:26.150 に答える
3

次のような入力を入力した後

1 2 4 uctrl + DはEOFASCIIに相当するので入力する必要があります。

それ以外の場合は、プログラムを変更して配置します

while(getchar()!='\ r')(ヒットするまでEnter

于 2013-01-11T21:07:12.663 に答える
1

どう言う意味ですか?できます:

./a.out 
asdfsdfasdfasdfasddddddddddddddddddddddd
41

echo "Try to count this" | ./a.out 
18
于 2013-01-11T21:01:36.930 に答える
1

getcharのwhileループを停止して、stdinからの文字の読み取りを停止する必要があります

次に、nc値が出力されます

する

EOF= CTRL+ D(Linuxの場合)

EOF= CTRL+ Z(Windowsの場合)

于 2013-01-11T21:01:40.437 に答える