2016-10-31 88 views
1
void getInputData(void) { 
    char c = 0; 
    while (c != 'x') { 
     printf("Enter a letter:"); 
     fflush(stdout); 
     c = getchar(); 
     printf("You entered: %c \n",c); 
     fflush(stdout); 
     getchar(); 
    } 
    printf("\nYou entered x and the loop exited\n"); 
} 

爲什麼getchar()在這個功能最後需要?我不明白爲什麼它在那裏。爲什麼在這個函數中必須使用getchar()?我不明白爲什麼它在那裏

+0

你試過沒有第二個getchar()會發生什麼嗎? –

+0

它是在'getchar'之後收集'newline'仍然在輸入緩衝區中,但是有更好的方法來實現它。 –

+0

也許讀取一個換行符,因爲除非按下ENTER鍵,否則第一個getchar()將不會返回? –

回答

1

假設你正在使用行緩衝在你的程序,每次下列字母,直到遇到 'X' 完美用戶輸入:
牛逼\ n
^ h \ n
我的\ n
小號\ n
x \ n
發送數據僅在您按鍵盤上的ENTER/RETURN鍵時才起作用。您應該處理\n換行符以獲得下一個字符,這就是爲什麼使用getchar()是必要的。

+0

'getchar()'不是*清空緩衝區並將其清空*,它僅消耗下一個字節,希望等待處理的''\ n''。請注意,如果用戶在輸入鍵之前輸入2個字符,那麼'getchar()'將不夠用。正確的方法是:int c; while((c = getchar())!= EOF && c!='\ n'){}' – chqrlie

+0

爲什麼在輸入緩衝區還有一個'newline'? –

相關問題