[问题] 解决输入资料型态不符的问题

楼主: 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