2012-03-07 70 views
3
c='q'; 
while(c=='q') 
{ 
    printf("hello"); 
    scanf("%c",&c); 
} 

爲什麼循環無任何理由在輸入時退出?scanf導致迴路提前終止

+0

我不明白你的問題 – badgerr 2012-03-07 16:02:32

+1

雖然問題很瑣碎,它真的值得-5? – Joe 2012-03-07 16:07:30

+4

+1並投票重新開放,這是來自社區的荒謬行爲,你們都應該感到羞恥。 – 2012-03-07 16:19:34

回答

1

我打算假設您希望'q'的用戶輸入意味着退出,並且您希望在c == 'q'時退出循環。

嘗試:

c='\0'; 
while(c !='q') 
{ 
    printf("hello"); 
    scanf("%c",&c); 
} 
+2

既然你什麼時候可以定義一個空字符?建議使用''\ 0''或使用'do {...} while;'循環根據T.J.克勞德的回答。 – 2012-03-07 16:06:34

+0

@Platinum Azure哎呀。這對我來說很愚蠢。謝謝你的收穫。 – 2012-03-07 16:08:49

+0

我在說,即使我在代碼中輸入'q',循環也會中斷...請清除它。 – 2012-03-08 10:24:49

6

循環沒有理由退出。撥打電話scanf將從stdin中讀取一個字符並將其存儲在c中,從而更改c的值。當測試環路條件時,可能不再是=='q'(例如,您鍵入除「q」之外的其他東西)。

如果你想循環,直到用戶型「Q」:

do { 
    printf("hello"); 
    scanf("%c", &c); 
} 
while (c != 'q'); 

但是請注意,大多數控制檯系統,scanf不會返回,直到用戶鍵入了全線文本並按回車。如果您希望按鍵輸入,您可能需要查看不同的功能。