为什么打印的是16而不是17,而且变量没有递增?

问题描述 投票:1回答:1
#include<iostream.h>
void main()
{
    int A=5,B=10;
    for(int I=1;I<=2;I++)
    {
        cout<<"Line1="<<A++<<"&"<<B-2<<endl;
        cout<<"Line2="<<++B<<"&"<<A+B<<endl;
    }
}

这个程序的输出是

Line1=5&8
Line2=11&16
Line1=6&9
Line2=12&18

我以为在输出的第二行和第四行中会产生17和19,而不是16和18。这是因为,在循环的第一次运行中,首先A的值是5,第一条命令打印5&8,应该将A的值递增1,使其为6。在第二条命令中,应该打印11&(6+11),应该打印11&17,但输出的结果却不是这样。

我的推理漏洞在哪里?

c++ loops variables increment
1个回答
0
投票

我不是这方面的专家,但我相信是因为后台的操作顺序。

主要是"<< "是一种叫做重载操作符的东西,它的基本意思是,有人在某个地方写了它应该做什么,以及如何做。

cout<<"Line2="<<++B<<"&"<<A+B<<endl;

编译器必须做一些花哨的技巧来使它工作.程序运行在这样的代码中的方式,是从右到左.所以本质上,它的运行方式有点像你想象中的那样.首先,它推动endl,然后它做A+B并推动它,然后它推动&,然后它递增B并推动它,最后它推动Line2=形成完整的 "句子". 然后这些内容会被带到控制台(或者其他任何你可能有的东西)一次性打印到你的屏幕上。

为了解决这个问题,可以尝试把cout分成两行,就像这样。

cout <<"Line2="<<++B<<"&";
cout <<A+B<<endl;

或者,如果允许的话,试试把++B和A+B互换一下,这也能解决这个问题,不过你的结果也会反过来.

cout<<"Line2="<<A+B<<"&"<<++B<<endl;

tl;dr: A+B在B++之前,用长矛行或交换位置来做,应该可以解决这个问题。

© www.soinside.com 2019 - 2024. All rights reserved.