三元运算符在C ++中无法正常工作

时间:2015-04-21 11:33:03

标签: c++ nested ternary

我有以下代码段:

if (w)
{
    if (b)
    {
        if (c)
            cout << "great!";
        else
            cout << "3";
    }
    else
    {
        cout << "2";
    }
}
else
{
    cout << "1";
}   

我必须使用三元运算符。我以为

cout << w ? b ? c ? "great" : "" + 3 : "" + 2 : "" + 1;  

没关系。事实并非如此。

已编辑:

即使我使用以下代码段,它仍然无法正常工作:

cout&lt;&lt; (w?b?c?“太棒了!”:“3”:“2”:“1”);

请尝试运行以下代码:

int w =1, b = 1, c = 0;
if (w)
{
    if (b)
    {
        if (c)
            cout << "great!";
        else
            cout << "3";
    }
    else
    {
        cout << "2";
    }
}
else
{
    cout << "1";
}   

cout << "  ";

cout << w ? (b ? (c ? "great" : "3") : "2") : "1";

为什么输出3 1?

我应该如何正确地“转换”代码?

4 个答案:

答案 0 :(得分:2)

使用大括号{}和()因此应该有效。

- &GT;开始在原始代码中使用大括号,然后用三元运算符替换“if”并用括号替换大括号。

你会得到这样的东西:

cout << (w ? (b ? ( c ? "great" : "3") : "2") : "1");

不确定我真的更喜欢这种方法......

答案 1 :(得分:2)

等效的三元表达式是

cout << (w ? b ? c ? "great!" : "3" : "2" : "1");

但是如果你很难弄清楚如何编写这样的嵌套表达式,那么同事就很难阅读它。尽量选择可读性和正确性来简化单行。

答案 2 :(得分:0)

这不是你如何在C ++中将整数转换为字符串。 &#34;&#34; + 3有一个完全不同的含义(这是一个可怕的无用的,只给每个人使用它的鼻子恶魔。)

如果您将整数正确转换为std::string,那么您的代码就没有问题。

答案 3 :(得分:0)

试试这个,

 w ?
 (
        b ?
        (
                c ?
                (
                        cout << "great!"
                )
                : cout << "3"
        )
        : cout << "2"
 )
 : cout << "1";