c ++ if带复合值的语句

时间:2017-04-29 12:04:58

标签: c++

我正在尝试找到一个可以让我抓住这个片段的解决方案:

cout << antalVaerelser << ("-v\x91r, ") 
<< (altan == true ? ("med altan, ") : ("uden altan, "));

if (etage == 0) {
cout << ("stuen ");
}
else {
cout << etage << (" etage ");
}

cout << areal << (" m2") << endl;

并将其转换为有一条更像这样的行:

cout << antalVaerelser << ("-v\x91r, ")
<< (altan == true ? ("med altan, ") : ("uden altan, "))
<< (etage==0?("stuen ") : etage + (" etage "))
<< areal << (" m2")
<< endl;

然而这不起作用,因为一些输出似乎被“吃掉” - 它将显示为“4-vær,med altan,age,101m2”,其中“年龄”应该是etage的值(值= 1-4)后跟字符串“etage”,

这也可行,但似乎真的过分了:

(etage == 0 ? ("stuen ") : etage == 1 ? ("1 etage ") : etage == 2 ? ("2 etage ") : etage == 3 ? ("3 etage ") : ("4 etage "))

因此问题是:如何(如果可能的话)我会做这样的工作吗?:

(etage==0?("stuen ") : etage + (" etage ")) 

提前谢谢你:)

3 个答案:

答案 0 :(得分:5)

有两个问题

  • 三元运算符必须返回相同类型的值
  • 添加整数和字符串文字不会像您期望的那样工作

在C ++ 11中完成

cout << antalVaerelser << ("-v\x91r, ")
    << (altan == true ? "med altan, " : "uden altan, ")
    << (etage==0 ? std::string("stuen ") : std::to_string(etage) + " etage ")
    << areal << (" m2")
    << endl;

在C ++ 14中更好一点:

cout << antalVaerelser << ("-v\x91r, ")
    << (altan == true ? "med altan, " : "uden altan, ")
    << (etage==0 ? "stuen "s : std::to_string(etage) + " etage "s)
    << areal << (" m2"s)
    << endl;

答案 1 :(得分:3)

你不能像这样连接int和字符串。

尝试在std::to_string(myInt)中包装一个int,然后在其中添加一个字符串,这会强制它成为字符串+字符串连接。

参考: http://en.cppreference.com/w/cpp/string/basic_string/to_string

答案 2 :(得分:1)

您需要将数字转换为字符串,如下所示:

cout << (etage == 0 ? "stuen " : std::to_string(etage) + " etage");

std :: to_string()可帮助您转换int' to字符串。

如果它只是一个连接问题,你也可以这样做:

etage == 0 ? cout << "stuen " : cout << etage <<" etage";