繁体   English   中英

需要非常简单的C ++ for循环帮助

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM