2011-07-15 13 views
3
#include <stdio.h> 

// copy input to output 
// my version 

int main() 
{ 
    int c; 

    printf("\n\nUse CONTROL + D to terminate this program\n\n"); 

    while ((c = getchar()) != EOF) { 
     putchar(c); 
    } 

    if ((c = getchar()) == EOF) { 
     printf("\n\nProgram TERMINATED\n\n"); 
    } 

    return 0; 
} 

で入力を取得します。それは私が望んでいたものですが、コードをより完全に分析した結果、ifの状態は(c = getchar()) == EOFなので、再度入力する必要はありませんか?は、if条件

+0

なぜ 'char'ではなく' int'ですか? – alex

+0

@alex: 'getchar'は' int'(実際には 'unsigned char'を' int'にキャストするか 'EOF' - 定義では負の数です)を返します。 – jweyrich

答えて

2

^Dにヒットした場合、プログラムへの入力が閉じられますので、その後getchar()は常にEOFを返します。

+0

それで '^ D 'の後に' getchar() 'の呼び出しがうまく行かないと、もう一度入力を受け取りますか? – Espresso

+0

あなたの入力を終わらせるために、 '^ D '(そしてその後のファイルの終わり)以外を使用してください。 – duskwuff

0

^Dはすぐにプログラムを終了します。したがって、^ Dがヒットしたときにgetcharは返されません。

そのため、REPLのようなpythonは 'exit()'を使用して終了します。

したい場合は、quitingのための 'Q' を使用しよう:

+4

これは、より良い言い方をすることができます - '^ D'は、一般的にプログラムを終了させず、入力だけを終了します。このプログラムは、入力の不足を無視して気楽に行けるようになりました。 – Cascabel

1

はControl-Dは、標準的なモード、ファイル終了文字です。開始時にと入力した場合、行の先頭にがあるため、EOF条件がプロセスによって認識されます。つまり、読み取りは0を返します。ただし、Control-Dが行の先頭以外のどこかに入力された場合、今まで入力されたものをすぐに返すこと。

Control-Dを2回連続して打つと、あなたが尋ねていることが分かります。

EDIT

Hereはかなり良い説明です。