2017-01-16 13 views
0

私は、getchar()を使ってstdinから各文字を印刷する小さなプログラムを作るように求められました...私は次のコードがうまくいくと思ったが、ファイルの末尾まで

int c = 0; 
while(c != EOF) 
{ 
    c = getchar(); 
    printf("%c\n", c); 
} 
printf("\nOut of loop!\n"); 

...それが入力を待っているかのようにカーソルが無期限にハングアップする、たまたまEOFを返すとなります)(getchar関数、私はコードがcharでストリーム文字を印刷するだろうと思って、標準入力には何もなかった場合ループは止まるだろう..私は入力がCでどのように行われているかについて私が誤解していると思う、初心者にとっては本当に混乱している。同じ古いカーソルで
Wor->


別の混乱を招く例:

char str[100]={0}; 
printf("Entrer a string: "); 
scanf("%s",str); //i'll enter a string with spaces to have something to print in the loop 
//let's say i enter Hello Wor^Zld! 
int c = 0; 
while(c!=EOF) 
{ 
    c = getchar(); 
    printf("%c",c); 
} 
printf("Finally done with loop!!\n"); 


私は上記のコードを実行したときに、私は、コンソールで次のような表示を得るに入力を待ってぶら下がっている...それはなぜでしょうか? Ctrl-Z + Enter "^ Z-Enter"は表示を停止したようですが、ループは継続していますか?私は正直に理解するために最善を尽くしているが、私はそれが混乱して正直である必要があります..私と一緒に支援して耐えてくれてありがとう!

+3

はい、あなたはflleから入力をリダイレクトしない限り、* stdin(通常はキーボード)からの入力を待機しています。 'Ctrl-D Enter'(Linux)や' Ctrl-Z Enter'(Windows)とタイプするまで関数は 'EOF'を返しません。 –

+3

マイナーノート: 'while(c!= EOF) { c = getchar();' - > 'while((c = getchar())!= EOF){' – BLUEPIXY

+0

@BLUEPIXええ、それは同じですが、初心者ではすべてをループに入れないでください:P – user7427260

答えて

0

あなたが望むときに印刷されていることを確認したい場合は、出力をfflushする必要があります。 文字を印刷する前にEOFをテストする必要があります。

int c; 
while((c = getchar()) != EOF) 
{ 
    printf("%c\n", (char)c); 
    fflush(stdout); 
} 
printf("Out of loop!\n"); 
関連する問題