【求助】关于scanf的输入类型判断问题
环境是Fedora 16,代码如下:
...
int i;
do
{
printf("input pls :");
scanf("%d",&i);
}while (i<20)
...
我要实现的功能是如果输入的数字小于20就继续输入,直到符合要求才继续下面的代码。
现在的问题是,输入数字没问题,但如果输入其它字符或串,由于scanf函数把不合适的输入保存进了缓冲区,就会不断地输出 “input pls :”。
那么,想实现如下功能:如果输入的是12 或34 这些数字,就按照判断语句继续,如果不是整数,如abc 3dt,就提示错误,该如果实现呢?
[解决办法]
Returns the number of fields successfully converted and assigned; the return value does not include fields that were read but not assigned. A return value of 0 indicates that no fields were assigned.
int ret;ret = scanf("%d",&i);if(0 == ret){ printf("input err\n"); //break;}
[解决办法]
do { printf("input pls:"); scanf("%d", &i); fflush(stdin); }while(i < 20);
[解决办法]
#include <stdio.h>
#include <stdlib.h>
int main()
{
int i,ret;
do
{
printf("input pls :");
ret=scanf("%d",&i);
if(ret !=1)
{
printf("error format! input number please!\n");
break;
}
}while (i<20);
return 0;
}
这是我调的代码,输入格式不对的话会提示error format! input number please! 而且会终止循环,不知道你是不是这个意思。。。你自己可以运行下这个代码。scanf的返回值就是匹配参数的个数。
[解决办法]
...
int i;
i=0;
do
{
printf("\ninput pls (>=20):");
fflush(stdout);
rewind(stdin);
scanf("%d",&i);
}while (i<20)
...
[解决办法]
怎么会呢?我是在linux下用GCC编译的,没有死循环。。。
[解决办法]