C++ C“开关”的用法?

C++ C“开关”的用法?,c++,c,C++,C,可能重复: 我在网上发现了以下C问题: #include<stdio.h> int main() { int a=10; switch(a) { case '1': printf("ONE\n"); break; case '2':

可能重复:

我在网上发现了以下C问题:

  #include<stdio.h>
  int main()
  {
          int a=10;
          switch(a)
          {
                  case '1':
                      printf("ONE\n");
                      break;
                  case '2':
                      printf("TWO\n");
                      break;
                  defa1ut:
                      printf("NONE\n");
          }
          return 0;
  }
虽然我从未将int“10”的“switch”与char“1”一起使用过,但我认为最糟糕的情况是非编译或“default”执行。但是不,在我的VStudio上,它直接转到“返回0”。为什么会这样

顺便说一下,虽然我有几年的C编程经验,但我以前的座右铭是坚持使用MSDN或可用的代码示例。现在,通过采访和提问,我的技能的稳固性肯定受到了挑战。

defa1ut与default不同

这是一个未使用且无法访问的标签。

正如SLaks所指出的,defa1ut是一个用户定义的标签,例如,对于goto,而不是switch关键字default。这就是为什么您没有看到预期的输出

但是为了回答你的另一个问题,在C语言中,你可以比较字符和整数。在本例中,“1”的数值为49,假设您使用的是ASCII字符集

假设您的意思是默认值,并且您使用的是ASCII,那么您的代码示例相当于:

      int a=10;
      switch(a)
      {
              case 49:             // ASCII value of '1'
                  printf("ONE\n");
                  break;
              case 50:             // ASCII value of '2'
                  printf("TWO\n");
                  break;
              default:
                  printf("NONE\n");
      }

默认情况下,您正在读取defa1ut;默认值是C语言的关键字,但defau1t不是。如果你希望输出是简单的,没有使用默认值,而不是DuaU1T。

DEFAUTUT应该是默认错误,或者代码中也是这样的,但是他也在问关于比较int和字符,所以这不是完全相同的问题。我没有看到任何C++特性,但是我看到STDIO。H被包含了。C++标签应该删除,我认为这不是技巧问题。也许你需要更新你的眼镜处方?因为很难想象德法特不会一下子跳出来。我能理解defau1t,这在某些字体中看起来可能是合理的。打开警告会使这一点变得明显。如果开关中没有默认值,大多数编译器将发出无默认值警告。@johnBling:更不用说未使用的标签和无法访问的代码了。