2016-10-25 38 views
0

以下のコードは、「文字を入力してください。入力を押すと、「入力したもの:<achar>.getchar()は端末で正しく動作しますが、CLionでは正しく動作しません。

私はJet Brains IDE、Clionを使用しています。昨日、コードは上記のように動作しました。しかし、今日、コードを実行すると空白の行が表示されます。キーを入力してください続い押された場合、私は出力を得る:

Letter: You typed: <achar> 

場合は、しかし、私は\を置くN「の文字を入力:」の後、プロンプト表示されますが、次の行で押されたキーを出力します\ nのために。

正確なコードを.cファイルにコピーし、コンパイルしてTerminalで実行すると、期待通りに動作します。

#include <stdio.h> 

int main() { 
    int c; 
    printf("Type a letter: "); // works if \n used, but jumps to next line when key pressed 
    c = getchar(); 
    printf("You typed: %c\n", c); 
    return (0); 
} 
+0

しかし、なぜ?フラッシュは使用済みメモリをクリアしていると仮定します。しかし、どうやって端末に問題はないの?可能であれば、これを解答として記入し、それを回答としてマークします。ありがとう! – dbconfession

答えて

3

端末がバッファリングされています。 printf("Type a letter: "); printfに改行('\n')が含まれている場合は、それが印刷されます。改行がなければ、fflush(stdout);を呼び出すことによってprintfを強制することができます。そうでなければ、printfは印刷前にバッファがいっぱいになるまで待ちます。
入力ストリームをフラッシュしないでください。fflush(stdin);

0

それが起こるので、あなたが文字を入力して、あなたが実際にあなたの手紙持ってEnterキーを押した後(例:A)と改行(\n)文字を。つまり、バッファーをクリーニングする必要があります。

は、以下のことを試してみてください。

#include <stdio.h> 

int main(void) { 
    int c; 
    printf("Type a letter: "); // works if \n used, but jumps to next line when key pressed 
    while((c = getchar()) != 0 && c != '\n' && c != EOF); 

    printf("You typed: %c\n", c); 
    return 0; 
} 
関連する問題