为了账号安全,请及时绑定邮箱和手机立即绑定

如下问题,为什么第一次i的返回值是2?编码中没这个指令呀?

如下问题,为什么第一次i的返回值是2?编码中没这个指令呀?

慕尼黑的夜晚无繁华 2022-06-02 11:07:06
#include <iostream>#include <iomanip>#include<conio.h>using std::cin;using std::cout;using std::endl;int main() {int n = 0;cout << "How many integers do you want to sum: ";cin >> n;int sum = 0;int i = 1;cout << "Values are: " << endl;while(i <= n) {cout << std::setw(5) << i;if(i%10 == 0)cout << endl;sum += i++;/************************************************************************************************问题1:在这里第一次i的返回值为什么是2?编码中没这个指令呀?如果在 sum += i++;这句前加i=i++;结果也是对的。这是怎么回事?问题2:如果在这里 输入cout<<i;(我想就是看看i回while的返回值,填上这句话后为什么就不对了?************************************************************************************************/}cout << endl << "Sum is " << sum << endl;getch();return 0;}初学 请高手指点
查看完整描述

3 回答

?
湖上湖

TA贡献2003条经验 获得超2个赞

(1)sum += i++;
这里已经i++了,所以i由1变成了2;
(2)这句前加i=i++;结果也是对的
当然不对了,不知道你怎么弄的.估计是你加了以后没重新编译;
没加:
How many integers do you want to sum: 5
Values are:
1 2 3 4 5
Sum is 15
加了以后:
How many integers do you want to sum: 5
Values are:
1 3 5
Sum is 12
(3)如果在这里 输入cout<<i;(我想就是看看i回while的返回值,填上这句话后为什么就不对了?
怎么不对了.
How many integers do you want to sum: 5
Values are:
12 23 34 45 56
Sum is 15
Press any key to continue
1后边的2,第二个2后边的3,第二个3后边的4....
就是i回while的返回值.
因为cout << std::setw(5) << i;输出i的值之后,然后执行了cout<<i;中间没任何间隔,所以两次输出就连在了一起.

再说一点i=i++;其实就是i++;
但 sum += i++;这个写法确实不好,很容易出错的。

这些问题都很简单,不知道楼主怎么学的.有问题多问老师还有同学,在百度上是得不到什么好答案的.再就是多上机练,多想.认真点.
希望我的回答对你有用.

 


查看完整回答
反对 回复 2022-06-06
?
aluckdog

TA贡献1847条经验 获得超7个赞

这种写法非常不好,i=i++从逻辑上更是错误的。
改成 : sum += i ; i++ ; 然后你再试试;
同时你要理解究竟哪个写法更好。

查看完整回答
反对 回复 2022-06-06
?
缥缈止盈

TA贡献2041条经验 获得超4个赞

i=i++会被o2优化直接砍掉... 呵呵..
在这里cout i应该是可以的.

查看完整回答
反对 回复 2022-06-06
  • 3 回答
  • 0 关注
  • 138 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信