[英]Need assistance with very simple C++ for loop
for( int i = 0; i <= 10; i++ )
{
cout << setw(2) << i << setw(10) << ( i <= 5 ? cout <<" = Chipotle" : cout << " = McDonalds" ) << endl;
}
所以,我预计输出为:
0 = Chipotle
1 = Chipotle
2 = Chipotle
3 = Chipotle
4 = Chipotle
5 = Chipotle
6 = McDonalds
7 = McDonalds
8 = McDonalds
9 = McDonalds
10 = McDonalds
(不要担心setw格式化)
相反,我的IDE给了我:
= Chipotle 0 0x602208
= Chipotle 1 0x602208
= Chipotle 2 0x602208
= Chipotle 3 0x602208
= Chipotle 4 0x602208
= Chipotle 5 0x602208
= McDonalds 6 0x602208
= McDonalds 7 0x602208
= McDonalds 8 0x602208
= McDonalds 9 0x602208
= McDonalds10 0x602208
我哪里出错了?
你显示cout
本身,删除三元运算符中的cout
:
cout << setw(2) << i << setw(10) << ( i <= 5 ? " = Chipotle" : " = McDonalds" ) << endl
你想尝试一个cout。
( i <= 5 ? cout <<" = Chipotle" : cout << " = McDonalds" )
成为
cout <<" = Chipotle"
//or
cout << " = McDonalds"
所以你要努力做到
cout << setw(2) << i << setw(10) << cout <<" = Chipotle"
//or
cout << setw(2) << i << setw(10) << cout <<" = McDonalds"
这是不正确的。 您需要将代码更改为
( i <= 5 ? " = Chipotle" : " = McDonalds" )
哪个将扩展到
cout << setw(2) << i << setw(10) << " = Chipotle"
//or
cout << setw(2) << i << setw(10) << " = McDonalds"
当i <= 5
,这个
cout << i << ( i <= 5 ? cout <<" = Chipotle" : cout << " = McDonalds" ) << endl
评估如下:
cout << i << (cout << " = Chipotle") << endl
我在这里省略了setw
操纵器以使代码更容易阅读,这会影响结果中的间距但是没有区别。 结果与此操作序列相同:
cout << " = Chipotle"; // the thing in `()` gets evaluated first
cout << i;
cout << cout; // because (cout << " = Chipotle") evaluates to cout
cout << endl;
这正是你在前几行看到的。 cout
本身打印为0x602208
。 之后你会得到McDonalds
而不是Chipotle
。
如果只编写一次cout
,在输出表达式的左端,您将获得所需的输出。
您不必在使用?:运算符编写的if条件内再次编写cout。 只需将字符串放在您想要打印的内容中,而无需使用cout
这是更精确和可读的方法。
for( int i = 0; i <= 10; i++ )
{
cout << setw(2) << i << setw(10) ;
if(i<= 5)
{
cout <<" = Chipotle"<<endl;
}
else
{
cout << " = McDonalds" << endl;
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.