我已经用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/

10-13 02:28