我最近开始学C++,在学习switch case的时候,我有这个疑惑。
如果我在以下代码中使用 int 或 char 有什么区别:
int Fav_Car;
switch case代码如下
switch( Fav_Car ) {
case '1' :
cout<< "That's cool";
break;
case '2' :
cout<< "Even mine!";
break;
default :
cout<< "Oh";
break;
}
当我运行该程序时,我注意到使用 int 会返回默认大小写,而使用 char 则效果很好。为什么会这样?
而且,如果我使用 case '1' :
和 case "1":
最佳答案
你的误解与 switch()
构造无关,都是关于单引号 ''
:如果你写 1
,你得到一个值为1的整数,当你把它放在单引号'1'
中时,你得到数字1的ASCII字符的数值(这有点不精确,见注释以下)。该 ASCII 字符的数值为 0x31
,或十进制的 49
。现在想象一下
switch( Fav_Car ) {
case 1 :
cout<< "That's cool";
break;
case 2 :
cout<< "Even mine!";
break;
default :
cout<< "Oh";
break;
}
和
switch( Fav_Car ) {
case 49 :
cout<< "That's cool";
break;
case 50 :
cout<< "Even mine!";
break;
default :
cout<< "Oh";
break;
}
第二个版本相当于您发布的版本,我认为它的行为与第一个版本截然不同的原因已经很清楚了。
注意:
虽然 '1'
在大多数 C++ 实现中生成 ASCII 字符值,但情况并非如此。该实现可以自由使用一些其他字符代码,因此 '1'
的值实际上是实现定义的。它几乎可以是除零以外的任何值(因为它用于字符串中的终止空字节)。然而,大多数实现确实使用 ASCII 编码,这就是为什么我在上面的文本中假定为 ASCII。
关于c++ - 开关盒中的 char 和 int 有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35967310/