我的代码是用来反向打印数组的,但是由于某种原因,减量操作符没有像预期的那样工作。根据我的理解,在对变量进行任何操作之前,--var会减少变量var,而var--会在操作完成后减少变量var,比如for循环。
这是我的代码:
#include <iostream>
int main() {
int arrLen;
int arr[4];
scanf("%d\n %d %d %d %d", &arrLen, &arr[0], &arr[1], &arr[2], &arr[3]);
for (; arrLen >= 0; --arrLen)
printf("%d %d\n", arr[arrLen], arrLen);
return 0;
}下面是我的结果(输出中的正确值是递减变量,我将其添加到检查中):
0 4
2 3
3 2
4 1
1 0如果没有打印递减变量,则应该是:
0 2 3 4 1
以下是我的预期结果:
2 3 4 1
发布于 2016-09-08 09:31:03
之所以没有像您预期的那样行事,是因为for循环是如何工作的。
for (statement_1; condition; statement_2) {
body;
}在循环开始之前,只调用一次statement_1。
condition在循环中每一次传递的开始处进行评估。如果为真,则对body进行计算。如果不是,则循环退出。
在循环中每一次传递结束时,就在重新评估statement_2之前,在 body之后对condition进行评估。
因此,当--var执行减量并返回递减值时,实际上只在每次运行for循环的主体之后调用它。
这意味着当--var和var--成为statement_2的一部分时,对for循环的行为也会产生同样的影响。
要产生您想要的行为,可以将for循环更改为:
while (--arrLen >= 0)
printf("%d %d\n", arr[arrLen], arrLen);发布于 2016-09-08 09:47:07
试着用下面的一行。我觉得你的for循环不合适。
for (; arrLen > 0; --arrLen) printf("%d %d\n", arr[arrLen - 1], arrLen);现在它将具有以下输出
2 4
3 3
4 2
1 1https://stackoverflow.com/questions/39387269
复制相似问题