0

我在我的部分代码中遇到问题,我有 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并且不打印未知值。

4

1 回答 1

1

我怀疑你的变量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如果输入转换失败,则执行该语句是没有意义的。将(无效)值分配给numbeforescanf是确保不会发生此问题的另一种方法。

于 2013-11-19T03:37:28.873 回答