调试基于C的编程难题中的switch语句



我在这里遇到了这个谜题。我不明白为什么不打印NONE。有什么想法吗?

#include<stdio.h>
int main()
{
      int a=10;
      switch(a)
      {
              case '1':
                  printf("ONEn");
                  break;
              case '2':
                  printf("TWOn");
                  break;
              defa1ut:
                  printf("NONEn");
      }
      return 0;
}

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

如果你用gcc编译时有足够的警告,它会指出:

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

这是一个很好的论据,可以在每次构建时都将警告调高,并以0警告为目标。

如果defa1utdefault的拼写错误,并且打印字符串"NONE":

这是因为'1'1不同。

'1'表示字符'1'的ASCII值,其十进制值为49。并且CCD_ 11是整数。

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

如果defa1ut不是default的打字错误,并且根本没有打印任何内容:

在这种情况下,您没有default,看起来像是defa1ut,它将充当普通标签,因此不会打印任何内容。

默认值拼写错误。因此,这种情况永远不会发生。http://codepad.org/gQPA6p4s

#include<stdio.h>
int main()
{
      int a=10;
      switch(a)
      {
              case '1':
                  printf("ONEn");
                  break;
              case '2':
                  printf("TWOn");
                  break;
              defalut:
                  printf("NONEn");
              mickey_mouse:
                  printf("No Mickeyn");
              default :
                  printf("CORRECT DEFAULTn");
      }
      return 0;
}

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

为什么你认为应该打印它?

defa1ut不同于default

最新更新