用于检查两个值的Case命令

时间:2012-02-20 08:42:37

标签: c++ switch-statement

请查看此代码:

char o,t; cin >> o >> t;
switch (o,t)
{
  case 's','g': cout << "Finish"; break;
  default: cout << "Nothing";
}

你可以看到switch设置为两个值,但是如果命令我不能同时检查它们。我该怎么办?有什么办法吗?

5 个答案:

答案 0 :(得分:5)

这不是正确的语法使用

case 's':
case 'g':
 cout << "Finish"; break;

答案 1 :(得分:4)

在C ++中,您不能switch多个值。

switch (o,t)

使用逗号运算符(它看起来很像其他语言中的一对,但它不是。)
逗号运算符计算其左操作数(o),忽略该值的值,然后返回其右操作数(t)的值。
换句话说,您的switch仅查看t。 没有办法解决这个问题。

您的具体案例最好写成

if (o == 's' && t == 'g')
{
    cout << "Finish";
}
else
{
    cout << "Nothing";
}

答案 2 :(得分:3)

您无法同时切换两个表达式。开关部分只是编译,因为有一个逗号运算符(它只是计算第二个值,在本例中为t)。

使用普通的旧if语句。

答案 3 :(得分:2)

char o,t; cin >> o >> t;
switch (o,t)
{
  case 's':
  case 'g': cout << "Finish"; break;
  default: cout << "Nothing";
}

在找到匹配的情况下的开关中,执行之后的所有操作员。这就是为什么你应该在break;之后编写case运算符来退出开关。因此,如果你想在几种情况下做同样的事情,你应该一个接一个地把它们放在一起。

答案 4 :(得分:0)

您有一些语法错误,正确的代码是

char o,t; cin >> o >> t;
switch (o)
{
  case 's':case 'g': cout << "Finish"; break;
  default: cout << "Nothing";
}

switch (t)
{
  case 's':case 'g': cout << "Finish"; break;
  default: cout << "Nothing";
}