2012-01-01 33 views
9

今日は、getchar()を使用して入力した文字をカウントする簡単なコードを書いています。しかしCygwinでコンパイルするとうまくいきません。常に0を出力しますが、何も入力しないか0を出力する文字は入力できません。getchar()が正しく機能しないのはなぜですか?

しかし、VC++ 6.0でコンパイルすると動作します。

#include<stdio.h> 
int main(void) 
{ 
long nc; 

nc = 0; 
while(getchar() != EOF) 
    ++nc; 
printf("The total of characters you inputed is %ld.\n", nc); 
return 0; 
} 
+1

Cygwinで何をコンパイルするのですか?私はcygwinを持っており、VCを使ってコンパイルするとうまくいきます。 – hmjd

+3

あなたの正確なコードは、Cygwin(GCCでコンパイル)で私にとって完璧に動作します。 EOFを送信するには、control-Dを押す必要があります。 –

+1

*正確に*プログラムを実行していますか? 'echo hello |を実行するとどうなりますか? 。/ your_program'をCygwinのbashシェルプロンプトから起動しますか? '。/ your_program'と打ち込んだら、' hello'、Enter、Control-Dのどれを入力すればいいでしょうか? –

答えて

0

This email threadずっとあなたのように聞こえるバグに関する交渉が、私はそれへのフォローアップがあることを見ることができません。

私はあなたが

while(getc(stdin) != EOF)

しようとすると、何が起こったのかを知って興味があると問題が解決しない場合は、thisページものの、 while(fgetc(stdin) != EOF)

は、それらのすべてがを動作するはずしようとするだろうこれらの機能の間に実装の違いがある可能性があることを示唆しています。

あなたが試みることができるもう一つは、あなたが何を得るのASCII値を印刷することである。また、

printf("%d\n",(int)getchar());

は、コンソールでそれを入力する代わりに、ファイルから配管出力を試してみてください。ファイル input.txtを作成し、その中にいくつかの文字を入れて、

cat input.txt | ./program

EDITを行います。あなたは猫を実行しているし、それが動作パイピング書きます。 Cygwinのバージョンを単に更新するといいでしょう。あなたはバグに遭遇しました。 Cygwinとコンパイラの最新バージョンを入手してください。あなたはうまくいくはずです。もう1つの方法はscanfです。

+0

while(getc(stdin)!= EOF)とwihle(fgetc(stdin)!= EOF)も機能しません。そして、 "printf("%d \ n "、(int)getchar());" print '-1'。しかし、私は猫についての骨董品input.txt | ./a。うまく走っています。しかし、私はそれを理解できません、なぜそれがうまく動作することができます。 – yunfeng

+0

ツールを更新してください。 :)また、Cygwinシェルの代わりにcmd.exeを使用してプログラムを実行してみてください。それは動作しますか? –

+0

私のCygwinは[link](http://www.cygwin.com/)なので、最新のバージョンだと思うが、cmd.exeを使ってit.Itを実行すると正しく動作する。 – yunfeng

関連する問題