为什么代码输出中的第一个和最后一个值加倍?


int i = 0;
int e = 0;
cin >> i >> e;
cout << i;
while( ++i <= e ) {
cout << "." << i;
}
while ( --i >= e ){
cout << '.' << i;
}

大家好,我可以要求一些帮助关于这个。如果我运行我的代码,如果我输入例如:

INPUT: 1 5

MY CODE输出:1.2.3.4.5.5

输入:51

MY CODE输出:5.5.4.3.2.1

输出应为;

输入:15

输出应为:1.2.3.4.5

INPUT: 1

输出应为:5.4.3.2.1

这里有一个强烈的提示:

cin >> i >> e;
if (i <= e) {
// your code to print everything from i up to e goes here
}
else {
// your code to print everything from e down to i goes here
}

尝试运行两个带有前缀自增/自减操作符的while循环只是在寻找错误。

让我们讨论第一个输入:15。当你通过预加达到5时i,它输出i的值是5。然后再次返回while循环首先增加i的值(它达到6)然后检查6<=e的条件为false,则循环终止。

然后进入第二个循环。它首先减少值i=5并检查是否i>=e这是真的,所以它打印I,在第一次迭代I的值小于e之后,它不打印任何东西。

在你的第一个while循环中,即使它没有被执行,++i <= e也会被计算,i的值会增加。

假设输入是

1 5

第一个while循环后的输出将是

1.2.3.4.5

在这个位置,i的值是6,因为当i变成5时,表达式++i <= e将再次被求值,i将被增加,结果是i=6

现在移动到第二个while循环,

--i = 5,即>=5 (as e=5)所以循环被执行,并再次输出5。

要解决这个问题,只需在第一个while循环之后将i的值减少1,然后就可以了。

让我们讨论第一个输入:15。当你通过预加达到5时i,它输出i的值是5。然后再次返回while循环首先增加i的值(它达到6)然后检查6<=e的条件为false,则循环终止。

然后进入第二个循环。它首先减少值i=5并检查是否i>=e这是真的,所以它打印I,在第一次迭代I的值小于e之后,它不打印任何东西。

最新更新