c - 当我在 int 中输入任何字符时,它会使其等于 8

标签 c

我在代码的一部分中遇到了问题,其中我有 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/

相关文章:

c - 如何将结构转换为不同的结构成员

c - 在软中断和进程上下文之间共享数据

c++ - C 和 C++ 中 arr[i] = i++ 和 i = i + 1 语句的行为

c - 从文本文件中的一行中获取每个单词

c - 请解释一下代码?

c - 从文件创建链接列表时程序总是崩溃

c - 由于结构,for 循环中的段错误?

c - 传递私有(private)变量时出现 Openmp 段错误,但在并行区域内声明变量时不会出现

c - 使用函数将 char 数组解析为数组

c++ - 通过位域访问 char 中的位