在scanf
\n
是問題
#include<stdio.h>
int main()
{
int marks[3];
int i;
for(i=0;i<3;i++)
{
printf("Enter a no\n");
scanf("%d",(marks+i));
}
printf("\nEntered values:\n");
for(i=0;i<3;i++)
{
printf("%d\n",*(marks+i));
}
return 0;
}
原因是:
我期望僅3
值被存儲在數組中,但它存儲4個值 和在下一'爲'循環如預期顯示3個值。我的問題是爲什麼 在1st'for'循環中需要4個值而不是3個?
第一:沒有,只存儲3
數量,但在陣列marks[]
不4
數字。
第二個:有趣的理解循環運行只有三次i = 0
到i < 3
。 for循環根據條件運行。更有趣的代碼是停留在scanf()
如下所述:
你的困惑就是爲什麼你必須輸入四位數字組成,它不會因爲你循環運行4
倍,但它的,因爲當你輸入一個非空格字符scanf()
函數只返回(並在後輸入按下輸入一個非空格字符的數字符號)。
爲了理解這個行爲讀手冊:int scanf(const char *format, ...);
:
的空白字符的序列(空格,製表,換行,等;見 isspace(3)
)。該指令與輸入中的任意數量的空白空間 (包括無)匹配。
因爲第一個for循環在,在scanf()
已包含在格式字符串\n
,所以只有scanf()
的回報,如果按一個數字進入(或非空間鍵)。
scanf("%d\n",(marks+i));
^
|
new line char
會發生什麼情況?
假設輸入程序是:
23 <--- because of %d 23 stored in marks[0] as i = 0
<enter> <--- scanf consumes \n, still in first loop
543 <--- scanf returns, and leave 542 unread,
then in next iteration 543 read by scanf in next iteration
<enter>
193
<enter> <--- scanf consumes \n, still in 3rd loop
<enter> <--- scanf consumes \n, still in 3rd loop
123 <--- remain unread in input stream
'無效main'是不合法的。使用'int main'。 – chris
在scanf –