2014-10-01 290 views
1

我是C編程新手,目前我正在學習while循環。我的問題是,while循環必須繼續,直到用戶希望終止while循環。但是,當我運行我的代碼似乎scanf()只有一次掃描輸入和while循環後終止,我不知道爲什麼。C編程:while循環中的scanf只讀取一次輸入,然後終止

int main(void) { 
    setbuf(stdout, NULL); 
    char answer = 'y'; 
    while (answer == 'y') { 
     printf("continue? (y/n): "); 
     scanf("%c", &answer); 
    } 
    return 0; 
} 
+0

爲什麼使用setbuf以(標準輸出,NULL)' – Brandin 2014-10-01 17:59:19

+0

林的Windows用戶的意圖。當在Windows中同時使用printf和scanf時,c中的緩衝區有問題。爲了讓printf立即輸出,你需要在每次printf後每次寫入fflush(stdout)。如果你在開始時寫setbuf(stdout,NULL),你不需要在每個printf之後寫fflush(stdout)。 – Kim 2014-10-01 18:18:09

+0

是的,它可能在某些環境中是一個問題,但是你擁有它的方式可能實際上並不能解決所有問題,你不應該試試'setvbuf(stdout,NULL,_IONBF,0);' - 模式標誌是什麼改變了流的行爲方式,例如評論這裏http://www.eclipse.org/forums/index.php/t/168233/ – Brandin 2014-10-01 18:25:32

回答

0

您需要使用換行符。

變化

scanf("%c", &answer); 

scanf(" %c", &answer); 
+0

我懷疑這會給他想要的行爲。考慮是否有人輸入'是'。 – 2014-10-01 17:58:06

+0

哇。就像空間角色可以產生變化一樣簡單。感謝你的回答! – Kim 2014-10-01 18:07:27

+0

@DavidSchwartz,我不明白,如果有人輸入'yes '而不是'y ',循環終止,如所設想的那樣。 – 2014-10-01 18:07:28

0

y以外的每個字符都會終止循環。如果您點擊y<newline>,則y將導致循環再次運行一次,然後換行將終止循環。

基本問題是,當您實際上想要讀取一行時,您正在讀取一個字符。