switch语句中的C2196错误 我是C++中的NeWBEE,我尝试编写一个代码来评估一个变量类型字符的用户输入的值,它的名称是“响应”,它使用一个将与2个实例一起使用的开关语句。
案例1:如果响应是y(小写)或y(大写),它将打印控制台窗口的消息 案例2:如果响应为n(小写)或n(大写),它将向控制台窗口打印另一条消息 但我遇到了一个问题,我的代码生成了C2196错误,我在msdn上搜索了它,我明白它的意思,但仍然无法修复该错误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
#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”:
coutcase
标签不是if
语句。您不能或它们。相反,您可以有多个具有相同代码的case标签。例如:
case 'y':
case 'Y':
cout << "You chose y or Y " << endl;
break;
案例“y”:
案例“Y”:
coutaswitch
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”
执行相同的代码。如果您将输入大小写为大写或小写,那么您只需要与单个字符进行比较,而不是与小写和大写的变量进行比较,这也会有所帮助如果你想在你的文章中使用大写/小写和标点符号,你会感到非常痛苦