猿问

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

#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;
}
初学 请高手指点

慕尼黑的夜晚无繁华
浏览 140回答 3
3回答

湖上湖

(1)sum += i++;这里已经i++了,所以i由1变成了2;(2)这句前加i=i++;结果也是对的当然不对了,不知道你怎么弄的.估计是你加了以后没重新编译;没加:How many integers do you want to sum: 5Values are:1 2 3 4 5Sum is 15加了以后:How many integers do you want to sum: 5Values are:1 3 5Sum is 12(3)如果在这里 输入cout<<i;(我想就是看看i回while的返回值,填上这句话后为什么就不对了?怎么不对了.How many integers do you want to sum: 5Values are:12 23 34 45 56Sum is 15Press any key to continue1后边的2,第二个2后边的3,第二个3后边的4....就是i回while的返回值.因为cout << std::setw(5) << i;输出i的值之后,然后执行了cout<<i;中间没任何间隔,所以两次输出就连在了一起.再说一点i=i++;其实就是i++;但 sum += i++;这个写法确实不好,很容易出错的。这些问题都很简单,不知道楼主怎么学的.有问题多问老师还有同学,在百度上是得不到什么好答案的.再就是多上机练,多想.认真点.希望我的回答对你有用.&nbsp;

aluckdog

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

缥缈止盈

i=i++会被o2优化直接砍掉... 呵呵..在这里cout i应该是可以的.
随时随地看视频慕课网APP
我要回答