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

Need assistance with very simple C++ for loop

本文关键字:循环 C++ 帮助 简单 非常      更新时间:2023-10-16
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

(不用担心设置格式)

相反,我的 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;
    }
}