2012-03-01 99 views
4

對於此代碼:問題的scanf( 「%d n」,&I)

int i; 
scanf("%d\n",&i); 

我不能停止我的程序,直到我輸入兩個數字。

我認爲這很奇怪,我知道當輸入合適時,scanf將返回1. 當我輸入「12a」輸入「」,「12」輸入「2」等等,就可以了,我= 12,似乎當我輸入的東西是不同的int或輸入一個'回車'和另一個,scanf返回1.

我錯過了什麼?

+0

嘗試重新制定和重新格式化您的問題。 – thumbmunkeys 2012-03-01 12:27:21

+0

我還添加了[tag:C++]標記,因爲這種行爲對於兩種語言都是相同的 – LihO 2012-03-01 12:44:31

+0

@LihO雖然'scanf'在[tag:C++]中可用,但使用'istream'會更合適。也許這個問題應該只剩下[tag:C]。 – 2012-03-01 13:37:24

回答

13

「我不能停止我的程序,直到我輸入兩個數字,當我使用scanf("%d\n",&i);
雖然這種格式使得scanf閱讀次數,並將其存儲i,這個「讀書」繼續並一直持續到找到非空白字符後跟\n。這就是爲什麼輸入1 2使這個scanf停止的原因。

在這種情況下,您不應在輸入格式中指定換行符。 改爲使用scanf("%d",&i);

+0

謝謝,我從來沒有這樣做,我只是想知道原因。 – Sphinx 2012-03-02 06:50:31

3

這是因爲scanf函數的'\n的... 如果你想進入一個新的生產線,只是把:

printf ("\n"); 

而且將給你一個空行...

0

scanf(「%d \ n」,& i);

讀取數字,直到出現非空白字符(忽略數字後的所有空格和'\ n')。