嵌套条件运算符
在输出表达式中使用条件运算符
cout<<((grade<60)?"pass":"fail");正常输出pass或fail
cout<<(grade<60)?"pass":"fail";
<<优先级高于?: 输出0(grade>60) 1(grade<60) 再由01看返回pass还是fail但不输出fail或pass
cout<<grade<60?"pass":"fail";
<< > < 所以先输出grade cout会返回cout本身(ostream&) cout与60比较,出错!编译器报错
练习题
4.21 也可以用范围for
#include<iostream>
#include<vector>
using namespace std;
int main(void)
{
vector<int> v={1,2,3,4,5};
for(int i=0;i<v.size();++i)
{
v[i]=v[i]%2==1? v[i]*2:v[i];
cout<<v[i]<<endl;
}
return 0;
}
4.22
string fin=(grade>90)? "high pass":(grade>75)? "pass":(grade>60)?"low pass":"fail";
if(garde>90)
{
fin="high pass";
}
else if(grade>75)
{
fin="pass";
}
else if(grade>60)
{
fin="low pass";
}
else
{
fin="fail";
}
4.23
程序本意是判断字符串s的最后一个字符是不是s,是的话不变,不是的话+上
但优先级+》==》?:
最后变为判断wordd是不是等于“s",=的话为"",不等于的话为"s"
加上括号更改
string s="word"
string pl=s+(s[s.size()-1]=='s'? "":"s";
4.24
强行左结合后为
string fin=((grade>90)?"high pass":(grade>60))? "pass":"fail";
编译器会报错 因为字符串"high pass"和逻辑表达式(grade>60)的返回结果根本不是一个类型