scanf出错后的输入检查
这是函数的一部分,它应该扫描0到100之间的整数。 当用户输入字符时,程序出错。有人有主意吗?iv'e尝试了这样一个组合条件: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)
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");
}