關于C語言得非法輸入
- 首先我們來看看什么是非法輸入
# include<stdio.h>
int main(void)
{
int i,j,k;
char ch;
printf("請進行第一次輸入...\n");
scanf("%d",&i);
printf("i=%d\n",i);
printf("----------------\n");
printf("請進行第二次輸入....\n");
scanf("%d",&j);
printf("j=%d\n",j);
printf("----------------\n");
printf("請進行第三次輸入....\n");
scanf("%d",&k);
printf("k=%d\n",k);
return 0;
/*
----------------vc++6.0中輸出得結果-----------------------
請進行第一次輸入...
123
i=123
----------------
請進行第二次輸入....
456
j=456
----------------
請進行第三次輸入....
789
k=789
-------------------------------------------------------------
請進行第一次輸入...
123.,,,,
i=123
----------------
請進行第二次輸入....
j=-858993460
----------------
請進行第三次輸入....
k=-858993460
-------------------------------------------------------------
請進行第一次輸入...
mmmmm
i=-858993460
----------------
請進行第二次輸入....
j=-858993460
----------------
請進行第三次輸入....
k=-858993460
-----------------------------------------------------------
心得:
我們看到只有第一次的輸入是正確的,我們先來說說為什么要使用輸出控制符,
我們從終端中輸入的都是字符或者字串,例如我們輸入123,在我們看來是數字,但是在計算機看來就是字符,我們在python中也是的,使用的時候需要將字符轉換成為相應的資料型別,
所以我們就是需要使用輸出控制符將字符轉化成為我們需要的資料型別進行輸入,搞懂了為什么要使用輸出控制符,我們再來回答上面的問題,
scanf函式在進行輸入的時候,先對字串進行讀取,例如"123mmmm",讀取的123符合%d的輸入形式,所以就賦值給了i,但是后面的mmmm不符合%d的輸入形式,繼續的留在輸入的字串中,等待
下一次的讀取,結果在下面使用scanf函式的時候,率先從上面沒有讀完的地方繼續進行讀寫,mmmm顯然不符合%d所以初始化變數j失敗,系統自動為變數j賦值為垃圾值,這就是為什么出現上面現象
的原因,如果輸出控制符改為%c那就一點問題都沒有了,因為mmmm是滿足這個控制符的,
----------------------------------------------------------
*/
}
我們看到用戶的非法輸入給后面造成了嚴重的影響
- 控制非法輸入
# include<stdio.h>
int main(void)
{
int i,j,k;
char ch;
printf("請進行第一次輸入...\n");
scanf("%d",&i);
printf("i=%d\n",i);
while(ch=getchar()!='\n')
continue;
printf("----------------\n");
printf("請進行第二次輸入....\n");
scanf("%d",&j);
printf("j=%d\n",j);
while(ch=getchar()!='\n')
continue;
printf("----------------\n");
printf("請進行第三次輸入....\n");
scanf("%d",&k);
printf("k=%d\n",k);
return 0;
/*
----------------vc++6.0中輸出得結果-----------------------
請進行第一次輸入...
23mmmmm
i=23
----------------
請進行第二次輸入....
45mmmmmmmmmm
j=45
----------------
請進行第三次輸入....
78mmmmmmmmmmm
k=78
-----------------------------------------------------------
心得:
我們看到加入一個while回圈后就解決了這個問題,實際上也是比較好理解的就不細講了,
*/
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/43013.html
標籤:C
上一篇:scanf函式的講解
下一篇:運算子
