2010-10-26 118 views
2

我有這樣的C語言代碼的麻煩:二scanf函數不工作

char st[2]; 

printf("enter first value:"); 
scanf("%c", &st[0]); 

printf("enter second value:"); 
scanf("%c", &st[1]); 

所以我的電腦沒問我要進入第二個值,我的意思是說,它僅打印第一printf語句,然後我輸入一個字符,然後它只打印第二個printf聲明和程序結束,而不需要第二個輸入。

請幫忙。這段代碼有什麼問題?

- 預先感謝。

+1

可能的重複:http://stackoverflow.com/questions/1669821/scanf-skips-every-other-while-loop-in-c – Alam 2010-10-26 12:32:37

+0

它必須是'scanf'問題的一天。 [同樣的問題,這個](http://stackoverflow.com/questions/4016073/scanf-fails-why),我想。 []() – 2010-10-26 12:33:52

回答

8

它的確如此。 ENTER鍵生成的字符已經存在於緩衝區中。

+0

+1我需要學習打字速度更快:D – nathan 2010-10-26 12:39:26

3

我認爲你的問題是第二次scanf正在接收「Enter」鍵按下。

+0

+1,我的身後只有12秒鐘:) – leppie 2010-10-26 12:36:06

3

您將得到您作爲第二個字符輸入的隱式換行符,即st[1]正在獲取值'\n'。一個簡單的方法來解決這個問題是包括預期的格式字符串換行符:scanf("%c\n", &st[0]);

2

變化

scanf("%c", &st[0]); 

這個

scanf(" %c", &st[0]); 

這是一個shotty答案(沒有錯誤檢查或任何東西)但其快速簡單。

0

使用fflush(stdin);函數之前的第二個scanf();。它將沖洗第一次scanf();後生成的ENTER鍵。 實際上,你的第二個scanf()將ENTER作爲它的輸入,並且由於scanf在獲得一個ENTER之後終止,所以它沒有采取任何其他的事情。