【问题标题】:Switch case is printing only default value开关盒仅打印默认值
【发布时间】:2021-01-22 06:24:10
【问题描述】:
#include<iostream>
#include<algorithm>
using namespace std;
int main(){
int n;
//only printing the default value
cout<<"Press 1 for Hindi, Press 2 for English, Press 3 for Punjabi,   ess 4 for Japanese."<<endl;
cin>>n;
switch (n)
{ 
case '1':
cout<<"Namaste";
    break;
case '2':
cout<<"Hello";
break;
case '3':
cout<<"Sat Shri Akal";
case '4':
cout<<"Ohaio gosaimas";
break;
default:
cout<<"I am still learing more!!!";
}
      return 0;
}

【问题讨论】:

  • nint,但您的 switch 案例是 chars。使它们保持一致,即要么将n 设为char,要么将switch case 设为整数。
  • case '1': -> case 1: 等等。 '1' 的值取决于您平台上的字符编码。有趣的是,C++ 标准不允许为 1。
  • @Bathsheba 等一下,真的吗?我没有意识到这种限制。这是为什么?或者更确切地说,规则是什么?
  • @cigien: 0, 1, 2, ..., 9 在任何编码中都必须是连续的。 '0' 不能为 0,因为后者是 NUL 终止符 - 用于表示 C 样式字符串的结束。因此,'1' 不能为 1。

标签: c++ switch-statement


【解决方案1】:

问题在于 n 是一个整数类型,但在 switch 语句中,您将它与 chars 进行比较。

您可以使用这两个选项中的任何一个来修复它,

  1. n 更改为 char 类型。
  2. 将比较更改为整数类型。

对于选项 1,这是一个简单的更改。

char n;

对于选项二,将'1''2''3'、...更改为123、...

switch (n) {
case 1:
    ...
    break;
case 2: 
    ...
    break;
...
}

确保在比较时不要混淆整数和字符!

【讨论】:

  • 这个答案基本正确,但请注意char 是整数类型,就像n 一样。这里的根本问题是intchar 的流提取器对输入做了不同的事情。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-09-19
  • 1970-01-01
  • 1970-01-01
  • 2021-08-10
  • 2020-10-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多