scanf出错后的输入检查

scanf出错后的输入检查,c,C,这是函数的一部分,它应该扫描0到100之间的整数。 当用户输入字符时,程序出错。有人有主意吗?iv'e尝试了这样一个组合条件:if(scanf(“%d”)和&(test=0)) 它不起作用 while(i!=4) { printf("\nPlease enter your homework grade: "); if(scanf("%d",&hw)) { ++i; } if(hw<=100&&hw>=0)

这是函数的一部分,它应该扫描0到100之间的整数。 当用户输入字符时,程序出错。有人有主意吗?iv'e尝试了这样一个组合条件:
if(scanf(“%d”)和&(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;
    }
}
while(i!=4)
{
printf(“\n请输入您的家庭作业成绩:”;
如果(扫描频率(“%d”、&hw))
{
++一,;
}
如果(hw=0)
{
++一,;
}
printf(“\n请输入您的考试成绩:”);
如果(扫描频率(“%d”和测试))
{
++一,;
}
如果(测试=0)
{
++一,;
}
其他的
{
printf(“\n请重新输入所需的详细信息\n”);
i=0;
}
}

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

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");
}
你必须在(i!=2){…}时做出决定

以这种方式尝试该程序

main() {

inti,hw,test;
而(i!=2)
{
i=0;
printf(“\n输入hmwrk等级:”);
如果(扫描频率(“%d”、&hw)和(hw=0))
++一,;
printf(“\n输入测试等级:”);
如果(扫描频率(“%d”,&test)和(test=0))
++一,;
如果(i!=2)
printf(“\n请重新输入请求详细信息..\n”);
}

}

代码很容易发生缓冲区溢出,您应该
scanf(“%3s”,n)
(并且可能会使缓冲区更大)。作为手动编码校对的替代,来自
的功能
strtol
可以为您进行校对和转换。@MOehm:谢谢,更新了我的答案。最多只能读取三个字符。所以我认为没有必要增加缓冲区的大小。嗯,也许是为了错误诊断。当用户输入“10000”时,你会想要一个“太大的数字”,而不是默默地将其视为“100”。一般来说,
scanf
很难正确使用,通常应该避免使用。
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");
}