我遇到了这个谜题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;
}
答案 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)
如果defa1ut
是default
的拼写错误,则会打印字符串“NONE”:
这是因为'1'
和1
不同。
'1'
表示字符'1'
的ASCII值,其十进制值为49
。 1
是一个整数。
如果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)
为什么你认为应该打印?
defa1ut
与default