[問題] 解決輸入資料型態不符的問題

作者: DivineAngel (空谷殘聲)   2015-03-08 00:49:44
開發平台(Platform): (VC++)
問題(Question):解決輸入類型與設定不符合的問題
餵入的資料(Input):假設只允許輸入數字0~100
預期的正確結果(Expected Output):0~100正確輸出 其餘重新輸入
程式碼(Code):
#include<iostream>
int main(void)
{
int i,t;
while (1)
{
printf("key a number(0~100)\n");
t = scanf_s("%d", &i);
getchar();
if (t == 0 || i > 100 || i < 0)
continue;
else
break;
}
printf("%d\n", i);
system("pause");
return 0;
}
補充說明(Supplement):
Q1
原本我自己寫時沒有加入getchar();
可以解決輸入數字大於100和小於0的問題
但當我輸入的資料不是數字時就會形成死結
會不斷的跑printf("key a number(0~100)\n");這行程式碼,無法重新輸入資料
後來google以後發現有範例後面加入getchar();
我加入以後就可以解決死結、無法重新輸入的問題
有點不太懂為什麼
前面t = scanf_s("%d", &i);若資料輸入類型不是整數t會等於0
if (t == 0 || i > 100 || i < 0)我在這行有寫t==0就重新執行
為何不加入getchar();會形成死結呢
Q2
還有就算我加入了getchar();
若我輸入的字元大於1個然後按下Enter時(e.g. AA BBB
作者: dibery (簡哥)   2015-03-08 01:17:00
scanf_s 遇到指示符 %d 時,會讀盡量多的字元來湊成數字因為你的輸入是字母,所以 scanf 永遠不會真的去讀那些輸入所以你輸入 AA 的話,就要等兩回 getchar 把它們吃光若是等於 0, 可以 scanf( "%*s" ) 吃掉那些怪怪的輸入

Links booklink

Contact Us: admin [ a t ] ucptt.com