scanf出错后输入检查

时间:2014-11-10 11:04:52

标签: c

这是一个函数的一部分,它应该扫描0到100之间的整数。 当用户输入char时程序出错。有人有想法吗?我试过像这样的综合条件:if(scanf("%d",&test)&&(test<=100&&test>=0)) 它不起作用......

while(i!=4)
{
    printf("\nPlease enter your homework grade: ");
    if(scanf("%d",&hw))
    {
        ++i;
    }
    if(hw<=100&&hw>=0)
    {
        ++i;
    }
    printf("\nPlease enter your test grade: ");
    if(scanf("%d",&test))
    {
        ++i;
    }
    if(test<=100&&test>=0)
    {
        ++i;
    }
    else
    {
        printf("\nPlease re-enter the required details\n");
        i=0;
    }
}

2 个答案:

答案 0 :(得分:1)

当使用%d读取字符时,它的ASCII值存储在内存中。
如果您需要Integer Proofing机制,请使用以下代码。将用户输入作为字符串获取,检查是否存在任何字符,如果存在则返回错误,否则将该字符串转换为整数并使用相同的字符进行进一步处理。

char n[4];  /* To store max of 3 char's `100` including '\0' */
int i=0, flag=1;
scanf("%3s",  n);

while(n[i] != '\0'){
    flag = isdigit(n[i]);

    if (!flag)
        break;
    i++;
}

if(flag) 
{ 
   i=atoi(n);
   printf("%d", i);
}
else
{
   printf("it's not integer");
}

答案 1 :(得分:0)

你必须同时(i!= 2){....}

以这种方式尝试该程序....

main()的 {

int i, hw, test;

while(i!=2)
{
    i=0;
    printf("\nEnter the hmwrk grade: ");
    if(scanf("%d",&hw)&&(hw<=100&&hw>=0))
        ++i;

    printf("\nEnter the test grade: ");
    if(scanf("%d",&test)&&(test<=100&&test>=0))
        ++i;

    if(i!=2)
        printf("\nPlease reenter the req details..\n");
}

}