對於此代碼:問題的scanf( 「%d n」,&I)
int i;
scanf("%d\n",&i);
我不能停止我的程序,直到我輸入兩個數字。
我認爲這很奇怪,我知道當輸入合適時,scanf將返回1. 當我輸入「12a」輸入「」,「12」輸入「2」等等,就可以了,我= 12,似乎當我輸入的東西是不同的int或輸入一個'回車'和另一個,scanf返回1.
我錯過了什麼?
對於此代碼:問題的scanf( 「%d n」,&I)
int i;
scanf("%d\n",&i);
我不能停止我的程序,直到我輸入兩個數字。
我認爲這很奇怪,我知道當輸入合適時,scanf將返回1. 當我輸入「12a」輸入「」,「12」輸入「2」等等,就可以了,我= 12,似乎當我輸入的東西是不同的int或輸入一個'回車'和另一個,scanf返回1.
我錯過了什麼?
「我不能停止我的程序,直到我輸入兩個數字,當我使用scanf("%d\n",&i);
」
雖然這種格式使得scanf
閱讀次數,並將其存儲i
,這個「讀書」繼續並一直持續到找到非空白字符後跟\n
。這就是爲什麼輸入1 2
使這個scanf
停止的原因。
在這種情況下,您不應在輸入格式中指定換行符。 改爲使用scanf("%d",&i);
。
謝謝,我從來沒有這樣做,我只是想知道原因。 – Sphinx 2012-03-02 06:50:31
這是因爲scanf函數的'\n
的... 如果你想進入一個新的生產線,只是把:
printf ("\n");
而且將給你一個空行...
scanf(「%d \ n」,& i);
讀取數字,直到出現非空白字符(忽略數字後的所有空格和'\ n')。
嘗試重新制定和重新格式化您的問題。 – thumbmunkeys 2012-03-01 12:27:21
我還添加了[tag:C++]標記,因爲這種行爲對於兩種語言都是相同的 – LihO 2012-03-01 12:44:31
@LihO雖然'scanf'在[tag:C++]中可用,但使用'istream'會更合適。也許這個問題應該只剩下[tag:C]。 – 2012-03-01 13:37:24