我已经用C ++编写了一个程序,供切换案例了解:
int main()
{
int x = 65;
switch(x)
{
case 'A':printf( "One" );
break;
case 'B': printf( "Zero" );
break;
case 'C': printf( "Hello World" );
break;
default: printf("Invalid");
}
}
我的困惑是我声明了我的
int x = 65
这个代码的输出是
One
这怎么可能?为什么它与
65
的ASCII值有关? 最佳答案
'A'
是字符文字。它看起来像一个A
,但实际上它根据字符集映射到某个整数值。在ASCII中,该值为65
。因此,发生的情况是将'A'
提升为具有字符集(在这种情况下为int
)确定的值的65
,然后将其与x
的值进行比较。由于它们具有相同的值,因此将打印One
。
不过,这是实现定义的行为。 C ++并没有规定字符集应该是什么,因此此代码可以打印出您的任何其他输出。它仅取决于字符集将'A'
映射到的值。这就是为什么做类似的事情
char ch;
std::cin >> ch;
if (ch == 65)
...
不好,因为它依赖于magic numbers
char ch;
std::cin >> ch;
if (ch == 'A')
...
将始终有效,因为它消除了对特定字符集的依赖。
关于c++ - “A”的整数值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41720176/