我在这里遇到了这个谜题。我不明白为什么不打印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警告为目标。
如果defa1ut
是default
的拼写错误,并且打印字符串"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