首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

关于scanf的输入类型判断有关问题

2012-03-24 
【求助】关于scanf的输入类型判断问题环境是Fedora 16,代码如下:...int ido{printf(input pls :);scanf(

【求助】关于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.

C/C++ code
int ret;ret = scanf("%d",&i);if(0 == ret){  printf("input err\n");  //break;}
[解决办法]
C/C++ code
        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编译的,没有死循环。。。
[解决办法]
探讨
谢谢楼上几位。但我把各位提供的代码都试了一下,结果在输入字符串的情况下,仍然是“input pls :”死循环。看来不能用scanf了 ,它把不合适的输入保存进了缓冲区,这种情况看来是跳不过去。

热点排行