我在网上发现了以下C问题:
#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;
}
虽然我从未使用char'1'的int'10'的'switch',但我认为最糟糕的是非编译或'默认'执行。但是,不,在我的VStudio上,它直接进入'返回0'。
有人会解释吗?
顺便说一下,虽然我有几年的c编程经验,但我之前的座右铭是坚持使用MSDN或可用的代码示例。现在通过采访和问题,我的技能的坚固性肯定会受到挑战。
答案 0 :(得分:10)
defa1ut
与default
不同。
这是一个未使用且无法访问的标签。
答案 1 :(得分:4)
正如SLaks所指出的那样,defa1ut
是用户定义的标签(例如goto
),而不是切换关键字default
。这就是为什么你没有看到预期的输出。
但是要回答你的另一个问题,在C中你可以将char
文字与整数进行比较。在这种情况下,'1'
的数值为49,假设您使用的是ASCII字符集。
假设您的意思是default
,而您使用的是ASCII,那么您的代码示例就等同于:
int a=10;
switch(a)
{
case 49: // ASCII value of '1'
printf("ONE\n");
break;
case 50: // ASCII value of '2'
printf("TWO\n");
break;
default:
printf("NONE\n");
}
答案 2 :(得分:1)
您正在以defa1ut
的身份阅读default
;默认是C语言的关键字,但defau1t
不是。如果您希望输出只是“无”,请使用default
代替defau1t
。