这是一个函数的一部分,它应该扫描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;
}
}
答案 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");
}
}