點擊(此處)摺疊或打開
-
int a[10];
-
-
for(i=0;i =<10,i++)
- scanf("%d",a[i]);
點擊(此處)摺疊或打開
-
#include <stdio.h>
-
-
int main(void)
-
{
-
int a[10];
-
int *p = NULL;
-
p = a;
-
int i,count=0;
-
-
for(i = 0;i < 10;i++)
-
//打印未給A賦值前的值,確定scanf函數是否起作用
-
//實際上A是亂碼,但是爲了和後面值比較,所以將其打印
-
{
-
printf("pointer is : %d\n",p[i]);
-
}
-
for(i = 0;i < 10;i++)
-
{
-
count += (int) scanf("%d",&a[i]);
-
}
-
for(i = 0;i < 10;i ++)
-
{
-
printf("A%d:%d\n",i+1,a[i]);
-
-
}
-
printf("\nsuccess : %d\n",count);
-
//打印scanf函數成功接收幾個值
-
return 0;
-
- }
最後的結果是第一次輸入一個字符常量W就直接執行所有步驟。數組A[]所有值都未賦值,都爲內存中的亂碼,但是循環執行了10次。當時我就愣了,爲什麼scanf函數會一次都沒有執行(count=0)?
我找到對scanf()函數描述:大致意思就是輸入的常量先放到緩衝中,然後scanf()函數一個一個從buffer中讀取。我的程序所出的問題就是這個字符常量W一直放在buffer中,十次循環scanf()一直就在讀取這一個值,每讀一次,scanf()函數就會與格式說明相比較,不符函數終止並返回0.這就是問題所在。
還有,有時候當我們利用scanf()函數輸入一個常量時,我們再按下回車後這個回車就存在buffer中,如果下面還有scanf()就會出錯。
點擊(此處)摺疊或打開
-
do
-
-
{
-
//program code
-
}
-
- while(gechar() == '\n');
這樣就可以消除回車鍵對下面scanf()輸入的影響了。