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

在基于C的编程难题中调试switch语句,c,puzzle,C,Puzzle,我遇到了这个难题。我不明白为什么没有打印NONE。有什么想法吗 #include<stdio.h> int main() { int a=10; switch(a) { case '1': printf("ONE\n"); break; case '2': printf("TWO\n")

我遇到了这个难题。我不明白为什么没有打印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;
}
#包括
int main()
{
INTA=10;
开关(a)
{
案例“1”:
printf(“一个\n”);
打破
案例“2”:
printf(“两个”);
打破
脱脂:
printf(“无”);
}
返回0;
}

如果
defa1ut
default
的打字错误,则会打印字符串“NONE”:

这是因为
'1'
1
是不同的

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

如果
a
的值为
49
'1'
,但由于
a=10
,因此它既不等于
'1'
也不等于
'2'
,因此执行
默认值
(如果存在,并且
defa1ut
不是打字)


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


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

默认拼写错误。所以这种情况永远不会发生。

#包括
int main()
{
INTA=10;
开关(a)
{
案例“1”:
printf(“一个\n”);
打破
案例“2”:
printf(“两个”);
打破
德法卢特:
printf(“无”);
米老鼠:
printf(“没有米奇”);
违约:
printf(“正确的默认值\n”);
}
返回0;
}

defa1ut:
是语法上有效的标签,例如,对于
goto
,而不是switch语句的
默认值

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

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


这是一个很好的论据,它支持将警告设置得很高,并在每个构建中设置0个警告。

为什么您认为应该打印它


defa1ut
default

不同,因为defa1ut不是关键字,所以应该用
case
语句处理

你在
默认值
标签中有输入错误吗?我的意思是对一个带有外部链接的自足问题说:+1。SO处的语法着色立即给出它
defa1ut
不是蓝色。而且,
defau1t
会更有效。甚至是
defauIt
,因为代码字体通常是无衬线的,在这些字体中,大写i和小写L无法区分。@Henning-不,不是,它是写在
defa1ut
上的。嗯,看起来好像有人临时编辑了这个谜题。@awoodland:我看问题时不是这样的——有人“有用地”编辑了这个问题,将其更正为
默认值
:-(如果他们仍然正确拼写default,那就更微妙了。@tipycalFlow-是的,它在“那1在做什么?”警报响起之前就触发了我的“拼写错误”警报。
#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;
}