[英]What's the difference between char and int in a switch case?
我最近开始使用C ++,在学习切换案例时,我对此表示怀疑。
如果在以下代码中使用int或char有什么区别:
int Fav_Car;
开关盒代码如下
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" :
什么区别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;
}
第二个与您发布的版本等效,我认为很清楚为什么它的行为与第一个版本大不相同。
注意:
尽管在大多数C ++实现中, '1'
产生ASCII字符值,但情况并非必须如此。 该实现可以自由使用其他字符代码,因此'1'
值实际上是实现定义的。 它几乎可以是除零以外的任何内容(因为它用于终止字符串中的空字节)。 但是,大多数实现都使用ASCII编码,这就是为什么我在上面的文本中假定使用ASCII。
在开关盒中,char和int有什么区别?
在switch
语句中使用char
或int
都可以。 这取决于您如何输入Fav_Car
只要输入与case
匹配,便会执行该case
。
请注意, char
也是整数类型-它的值在[32,127]范围内(假设您要使用可打印的char)。
如果使用案例'1'和案例“ 1”有什么区别?
switch
case
仅适用于整数(即int
, char
)。 所以:
case '1': // ok.
case "1": // wrong because "1" is a string - not integral type.
为什么会发生? 因为在切换的情况下,您使用的是char,而不是int。
它们之间有什么区别?
1 //int
'1' // char 1
"1" // string 1
使用int
int a;
switch(a){
case 1 :
}
你的问题是, '1'
是不一样的东西1
。
'1'
表示可打印的 “ 1”字符文字,在使用ASCII字符映射表的任何计算机上,它实际上是整数49。
为了说明差异,请尝试以下操作:
char a = 1;
char b = '1';
int x = a;
int y = b;
cout << "a as int: " << x << "\n";
cout << "b as int: " << y;
因为“ 1”是一个字符,而1是一个整数。 如果要使整数有效,请删除单引号。 使用双引号使它成为字符串。
您确定INT无法正常工作吗?
以下代码运行良好:
#include <iostream>
int main() {
int fav_car = 2;
switch(fav_car) {
case 1 :
std::cout<< "That's cool";
break;
case 2 :
std::cout<< "Even mine!";
break;
default :
std::cout<< "Oh";
break;
}
}
情况“ 1”-它是一个符号
情况“ 1”-它是一个字符串常量
转换情况下的字符最终转换为ASCII等效的十进制,即
char '1' - int 49
char '2' - int 50
例如,如果input为integer int 1
,则切换大小写将切换为default
因为1
不满足任何情况。
1 != 49
1 != 50
但是,如果输入是字符 char '1'
,则输出将是您所希望的第一种情况。
在这种情况下:无; 程序执行switch
语句的方式没有任何区别。 char
和int
都是整数类型:它们表示整数。 char
通常是无符号的,并且至少为8位(0-255),而int
是有符号的,通常是32位(-20亿至+ 20亿)。
请注意, char
表示单个字符,而不是字符串。 并且您不能像在C#,Java和Swift中那样在switch
语句中使用字符串值,因为switch
编译为内存哈希表以实现超快性能,因此当前无法使用字符串类型进行优化。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.