2016-10-25 57 views
0

下面的代碼應該首先提示「鍵入一個字母:」。一旦輸入被按下,輸出應顯示「您鍵入:<achar>.C getchar()在終端中正常工作,但不在CLion中

我使用Jet Brain IDE,CLion。昨天的代碼如上所述工作。然而,今天,當我運行代碼時,我得到一個空白行。如果按下一個鍵依次輸入,我得到的輸出:

Letter: You typed: <achar> 

但是,如果我把一個\ n後「鍵入一個字母:」提示顯示,但輸出下一行按鍵因爲\ n。

我已經將確切的代碼複製到.c文件中,編譯並在終端中運行它,並按預期運行。

#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

工作正常。但爲什麼?我假設flush是清除已用內存。但是終端怎麼沒有問題呢?如果可以的話,將其作爲答案和解釋,並將其標記爲已回答。謝謝! – dbconfession

回答

3

終端被緩衝。 printf("Type a letter: ");如果printf包含一個換行符('\n'),它將被打印。如果沒有換行符,您可以通過調用fflush(stdout);來強制執行printf,否則printf會在打印前等待緩衝區滿。
請注意輸入流不應該被刷新爲fflush(stdin);

0

這是因爲你鍵入一個字母,你按回車,你其實有你的信後(如:A)和新線(\n)字符。這意味着你需要清理Buffer。

嘗試以下方法:

#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; 
} 
相關問題