2016-08-16 6 views
0

私は本を読んでいるし、私は本の小さなプログラムに従っている、私は結果を得ることができない小さなカウントプログラムがあります。ループのバグC

#include <stdio.h>  

int main() { 

    long nc; 

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

これを実行していくつかの文字を入力すると、結果はなく、プログラムはまだ実行されていますが、文字は入力できますが結果は表示されません。 コードに間違いはありますか?

私はXcodeで実行しています。

+1

プログラムの冒頭に '#include 'がありますか? – Barmar

+3

プログラムにデータがないことをどのように伝えますか? UnixライクなシステムでControl-Dを入力するか、行頭にControl-Z(WindowsではControl-Z)と入力してデータがないことを示します。あるいは、もしあなたが 'charcount.c'のようなファイルを持っていて、あなたのプログラムが' charcount'なら、あなたは 'charcount

+0

コードを正しくフォーマットしていれば、尋ねる必要はありません。 – Olaf

答えて

1

コードは結構です、あなたが必要なヘッダファイルが含まれている場合は、:

#include <stdio.h> 

をwhileループを終了するには、プログラムに「EOF」を送信する必要があります。

What is EOF in the C programming language?を参照できる場合があります。

LinuxシステムおよびOS Xでは、EOFを発生させるために入力する文字はCtrl-Dです。 Windowsの場合はCtrl-Zです。

+1

''のコードは何ですか? –

+0

はい、そうです。この場合、は必須のヘッダーファイルではありません。 – CWLiu

1

まず、忘れた場合は、stdio.hヘッダファイルをインクルードする必要があります。次に、コードに間違いはありません。

while(getchar() != EOF) 
    ++nc 

ファイルの終わりをチェックし、上記のコードの行とそれがfalseを返す場合、それは、NCをインクリメントして、NCを印刷する前に、whileループは、ファイルの終わりを検出した場合にのみ。 linuxのファイルの終わりはCtrl + Dなので、文字を入力した後にCtrl + Dとタイプすると、ファイルの終わりか入力が終わってからカウントダウンします。

+0

また、ウィンドウのファイルの終わり(EOF)としてCtrl + Zを押します。 – d3r1ck

+0

誰かがなぜstdio.hを尋ねる場合に備えて、プログラムはstdio.hを必要とします。 – d3r1ck