需要帮助解决基于C的编程难题

时间:2011-08-24 12:24:10

标签: c puzzle

我遇到了这个谜题here。我无法弄清楚为什么 NONE 没有打印出来。有什么想法吗?

#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;
}

5 个答案:

答案 0 :(得分:15)

defa1ut:是一个语法上有效的标签,例如对于goto而不是switch语句的default

如果使用gcc编译并提供足够的警告,则会指出:

  

ajw @ rapunzel:/ tmp&gt; gcc -Wall -Wextra test.c
  test.c:在函数'main'中:test.c:13:15:警告:标签'defa1ut'   定义但未使用

这是一个很好的理由,可以建立警告,并在每次构建时瞄准0警告。

答案 1 :(得分:3)

如果defa1utdefault的拼写错误,则会打印字符串“NONE”:

这是因为'1'1不同。

'1'表示字符'1'的ASCII值,其十进制值为491是一个整数。

如果a的值为49'1',则第一种情况为真,但为a=10,因此它既不等于'1',也不等于'2'等于default,因此执行defa1ut(如果存在,defa1ut不是拼写错误。)

如果default不是default的拼写错误而且没有打印任何内容:

在这种情况下,您没有defa1ut,而是{{1}},它将作为普通标签,因此不会打印任何内容。

答案 2 :(得分:1)

默认拼写错误。所以永远不会达到这种情况。 http://codepad.org/gQPA6p4s

#include<stdio.h>
int main()
{
      int a=10;
      switch(a)
      {
              case '1':
                  printf("ONE\n");
                  break;
              case '2':
                  printf("TWO\n");
                  break;
              defalut:
                  printf("NONE\n");
              mickey_mouse:
                  printf("No Mickey\n");
              default :
                  printf("CORRECT DEFAULT\n");
      }
      return 0;
}

答案 3 :(得分:1)

由于defa1ut不是关键字,因此应使用case语句进行处理。

答案 4 :(得分:0)

为什么你认为应该打印?

defa1utdefault

不同