switch语句中的C2196错误 我是C++中的NeWBEE,我尝试编写一个代码来评估一个变量类型字符的用户输入的值,它的名称是“响应”,它使用一个将与2个实例一起使用的开关语句。

switch语句中的C2196错误 我是C++中的NeWBEE,我尝试编写一个代码来评估一个变量类型字符的用户输入的值,它的名称是“响应”,它使用一个将与2个实例一起使用的开关语句。,c++,compiler-errors,switch-statement,C++,Compiler Errors,Switch Statement,案例1:如果响应是y(小写)或y(大写),它将打印控制台窗口的消息 案例2:如果响应为n(小写)或n(大写),它将向控制台窗口打印另一条消息 但我遇到了一个问题,我的代码生成了C2196错误,我在msdn上搜索了它,我明白它的意思,但仍然无法修复该错误 #include<iostream> using namespace std; int main() { char response; cout << " Enter your response " &l

案例1:如果响应是y(小写)或y(大写),它将打印控制台窗口的消息

案例2:如果响应为n(小写)或n(大写),它将向控制台窗口打印另一条消息

但我遇到了一个问题,我的代码生成了C2196错误,我在msdn上搜索了它,我明白它的意思,但仍然无法修复该错误

#include<iostream>
using namespace std; 
int main()
{
    char response;
    cout << " Enter your response " << endl;
    cin >> response;
    switch (response)
    {
    case 'y' || "Y":
        cout << "You chose y or Y " << endl;
        break;
    case 'n' || 'N': 
        cout << "You chose n or N " << endl;
        break;
    default:
        cout << "You didn't choose a valid option " << endl;
        break;
    }
    return 0;
}   
#包括
使用名称空间std;
int main()
{
字符响应;
cout反应;
开关(响应)
{
案例“y”|“y”:

cout
case
标签不是
if
语句。您不能
它们。相反,您可以有多个具有相同代码的case标签。例如:

  case 'y':
  case 'Y':
        cout << "You chose y or Y " << endl;
        break;
案例“y”:
案例“Y”:

couta
switch
controlflow在其
case
s中查找常量值。 看

要完成您正在尝试的操作,您可以使用如下开关盒:

enter code here
#include<iostream>
using namespace std; 
int main()
{
    char response;
    cout << " Enter your response " << endl;
    cin >> response;
    switch (response)
    {
    case 'y':
    case 'Y':
        cout << "You chose y or Y " << endl;
        break;
    case 'n':
        //since there is no 'break;' statement here, either cases will perform the code 
    case 'N':
        cout << "You chose n or N " << endl;
        break;
    default:
        cout << "You didn't choose a valid option " << endl;
        break;
    }
    return 0;
}   
#include<iostream>
using namespace std; 
int main()
{
    char response;
    cout << " Enter your response " << endl;
    cin >> response;
    switch (response)
    {
    case 'y' :
    case 'Y':
        cout << "You chose y or Y " << endl;
        break;
    case 'n':
    case 'N': 
        cout << "You chose n or N " << endl;
        break;
    default:
        cout << "You didn't choose a valid option " << endl;
        break;
    }
    return 0;
}   
在此处输入代码
#包括
使用名称空间std;
int main()
{
字符响应;
cout反应;
开关(响应)
{
案例“y”:
案例“Y”:
cout
大小写“y”| |“y”
没有达到您的预期。您在这里使用的是逻辑
|
,它将始终返回
true
,而对于
char
类型,它的意思是
1
。对于
案例“n”|“n”
,也一样,因此您在这里编写了两个
案例1:
,这就是您收到错误消息的原因:

错误C2196:已使用大小写值“1”

你可能想要

switch (response)
{
case 'y':
case 'Y':
    cout << "You chose y or Y " << endl;
    break;
case 'n':
case 'N': 
    cout << "You chose n or N " << endl;
    break;
default:
    cout << "You didn't choose a valid option " << endl;
    break;
}
开关(响应)
{
案例“y”:
案例“Y”:

您的代码可能存在多个问题

在每个
案例中只能测试一个值

switch (response)
{
case 'y':
case 'Y':
    cout << "You chose y or Y " << endl;
    break;
case 'n': 
case 'N':
    cout << "You chose n or N " << endl;
    break;
default:
    cout << "You didn't choose a valid option " << endl;
    break;
}
在这两种情况下,您都测试
响应
是否为
(char)true
,从而得到错误C2196,这意味着“case value'value'已经使用”(请参阅)


最后但并非最不重要的一点是,您将
char
const char*
混合在一起,而
是一个
char
,而
“y”
将为您提供一个
常量字符*
,一个指向C字符串的指针。您应该使用前者来比较单个字符。

首先,请删除问题中的
在此处输入代码

关于问题,C2196:

switch语句多次使用相同的大小写值

因为('y'| |“y”)=('n'| |“n')=真

您实际上需要这样做:

enter code here
#include<iostream>
using namespace std; 
int main()
{
    char response;
    cout << " Enter your response " << endl;
    cin >> response;
    switch (response)
    {
    case 'y':
    case 'Y':
        cout << "You chose y or Y " << endl;
        break;
    case 'n':
        //since there is no 'break;' statement here, either cases will perform the code 
    case 'N':
        cout << "You chose n or N " << endl;
        break;
    default:
        cout << "You didn't choose a valid option " << endl;
        break;
    }
    return 0;
}   
#include<iostream>
using namespace std; 
int main()
{
    char response;
    cout << " Enter your response " << endl;
    cin >> response;
    switch (response)
    {
    case 'y' :
    case 'Y':
        cout << "You chose y or Y " << endl;
        break;
    case 'n':
    case 'N': 
        cout << "You chose n or N " << endl;
        break;
    default:
        cout << "You didn't choose a valid option " << endl;
        break;
    }
    return 0;
}   
#包括
使用名称空间std;
int main()
{
字符响应;
cout反应;
开关(响应)
{
案例“y”:
案例“Y”:
在这样的代码中cout

switch(x) {
case a:
    ...
    break;
case b:
    ...
    break;
}
x==a
时,控制流只跳入
case a
。因此,使用
case'Y'| | Y'
时,编译器真正将表达式
'Y'| | Y'
计算为
真|真
,然后再计算为
。只有当
响应=(char true=(char)真=(char)时,它才会跳入这个标签1
,但事实并非如此

switch
语句不能用于更复杂的条件,而且它只能与整数值(ints、chars)一起工作。它允许编译器生成更高效的代码,但对于现代编译器,结果可能总是与使用
if
/
else if
时相同

switch(response) {
case 'Y':
case 'y':
    ...
    break;
}

相反,它工作正常。因为第一个
大小写“Y”
没有
break
语句,所以它与
大小写“Y”
执行相同的代码。如果您将输入大小写为大写或小写,那么您只需要与单个字符进行比较,而不是与小写和大写的变量进行比较,这也会有所帮助如果你想在你的文章中使用大写/小写和标点符号,你会感到非常痛苦