我在代码的一部分中遇到了问题,其中我有 switch(num) ,并且有数字从 6 到 14 和 default 的情况。每当输入不是整数时,switch 语句会将其读取为 8,而不是默认值,当我删除 8 时,它会返回默认值!
有什么想法为什么会发生这种情况吗?
提前谢谢
我的问题示例
scanf("%d",&num);
switch(num)
{ case 6 : loop6 ; break;
case 7 : loop7 ; break;
case 8 : loop8 ; break ;
default : printf("unknow value "); break ; }
输入:不是整数 输出:进入loop8并且不打印未知值。
最佳答案
我怀疑你的变量num
已经有一个值了。
当您输入非数字值时,scanf
失败并且不会更新num
。因此,它仍然是以前的样子;在你的例子中,显然是 8。
如果我是对的,以下内容应该可以为您解决问题:
int num = -1;
if(scanf("%d",&num)==1) {
switch(num)
{
case 6 :
loop6() ;
break;
case 7 :
loop7() ;
break;
case 8 :
loop8() ;
break ;
default :
printf("unknown value: %d \n", num);
break;
}
}
注意 - scanf
返回成功转换的参数数量;测试返回值对于输入错误具有鲁棒性。如果输入转换失败,则执行 switch
语句就没有意义。在 scanf
之前为 num
分配(无效)值是确保不会发生此问题的另一种方法。
关于c - 当我在 int 中输入任何字符时,它会使其等于 8,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19962757/