0

可能重复:
在基于 C 的编程难题中调试 switch 语句

我在网上找到了以下 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 或可用的代码示例。现在随着采访和提问,我的技能的扎实性肯定受到了挑战。

4

3 回答 3

10

defa1ut不一样default

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

于 2012-09-27T01:49:19.490 回答
4

正如 SLaks 所指出的,defa1ut是用户定义的标签(例如 a goto),而不是 switch 关键字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");
      }
于 2012-09-27T02:00:22.983 回答
1

你正在阅读defa1ut; defaultdefault 是 C 语言的关键字,但defau1t不是。如果您希望输出只是“NONE”,请使用default而不是defau1t.

于 2012-09-27T05:33:27.260 回答