C'开关'用法?

时间:2012-09-27 01:48:44

标签: c++ c

  

可能重复:
  Need help solving a C-based programming puzzle

我在网上发现了以下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;
  }

虽然我从未使用char'1'的int'10'的'switch',但我认为最糟糕的是非编译或'默认'执行。但是,不,在我的VStudio上,它直接进入'返回0'。

有人会解释吗?

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

3 个答案:

答案 0 :(得分:10)

defa1utdefault不同。

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

答案 1 :(得分:4)

正如SLaks所指出的那样,defa1ut是用户定义的标签(例如goto),而不是切换关键字default。这就是为什么你没有看到预期的输出。

但是要回答你的另一个问题,在C中你可以将char文字与整数进行比较。在这种情况下,'1'的数值为49,假设您使用的是ASCII字符集。

假设您的意思是default,而您使用的是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");
      }

答案 2 :(得分:1)

您正在以defa1ut的身份阅读default;默认是C语言的关键字,但defau1t不是。如果您希望输出只是“无”,请使用default代替defau1t