在基于C的编程难题中调试switch语句
我遇到了这个难题。我不明白为什么没有打印NONE。有什么想法吗在基于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")
#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;
}