C++ C“开关”的用法?
可能重复: 我在网上发现了以下C问题:C++ C“开关”的用法?,c++,c,C++,C,可能重复: 我在网上发现了以下C问题: #include<stdio.h> int main() { int a=10; switch(a) { case '1': printf("ONE\n"); break; case '2':
#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“10”的“switch”与char“1”一起使用过,但我认为最糟糕的情况是非编译或“default”执行。但是不,在我的VStudio上,它直接转到“返回0”。为什么会这样
顺便说一下,虽然我有几年的C编程经验,但我以前的座右铭是坚持使用MSDN或可用的代码示例。现在,通过采访和提问,我的技能的稳固性肯定受到了挑战。defa1ut与default不同
这是一个未使用且无法访问的标签。正如SLaks所指出的,defa1ut是一个用户定义的标签,例如,对于goto,而不是switch关键字default。这就是为什么您没有看到预期的输出
但是为了回答你的另一个问题,在C语言中,你可以比较字符和整数。在本例中,“1”的数值为49,假设您使用的是ASCII字符集
假设您的意思是默认值,并且您使用的是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");
}
默认情况下,您正在读取defa1ut;默认值是C语言的关键字,但defau1t不是。如果你希望输出是简单的,没有使用默认值,而不是DuaU1T。 DEFAUTUT应该是默认错误,或者代码中也是这样的,但是他也在问关于比较int和字符,所以这不是完全相同的问题。我没有看到任何C++特性,但是我看到STDIO。H被包含了。C++标签应该删除,我认为这不是技巧问题。也许你需要更新你的眼镜处方?因为很难想象德法特不会一下子跳出来。我能理解defau1t,这在某些字体中看起来可能是合理的。打开警告会使这一点变得明显。如果开关中没有默认值,大多数编译器将发出无默认值警告。@johnBling:更不用说未使用的标签和无法访问的代码了。