为什么当我对数组使用增量操作时,do for 循环不起作用
why do for loop does not work when I use increment operations for the arrays
我的代码中有两个数组,每个数组都有 7 个元素,我使用了 for 循环:
for (int i = 0; i < 7; i++)
{
distance = x[++i] - x[i];
area = trapezoidArea(distance, y[++i],y[i]);
sum += area;
}
我想计算梯形的面积。x[1]-x[0] 的差值将给我高度,y[1] 是第一边,y[0] 是第二边。
这个 for 循环不起作用,我想知道为什么。
在这种情况下,您不能将++
用作后置或前递增运算符。
这将更改i
变量的值,因此for
循环将没有您想要的行为。
正确的方法是:
for (int i = 0; i < 6; i++)
{
distance = x[i+1] - x[i];
area = trapezoidArea(distance, y[i+1],y[i]);
sum += area;
}
小心你必须循环到i<6
因为如果你让 7,你会尝试访问 x[7+1] = x[8],你会有undefined behaviour
或segmentation fault
。
++i
会增加i
。因此,您在一次循环中将i
增加三次,最重要的是,由于排序,它也可能是未定义的行为。x[i]
i
应该是什么?x[++i]
++i
前的i
增加了它,还是增加了之后?
如果您想要一个超过i
而不增加它,请改为i+1
。将x[++i]
替换为x[i+1]
,同样替换为y[++i]
应该可以解决此问题。但是,如果没有看到所有代码,就不可能说这是否是唯一的问题。
当您在方括号中++i
时,您实际上将i
的值增加了 1。您应该做的是i + 1
并仅将++i
保留在循环声明中。
相关文章:
- 为什么"do while"循环不断退出,即使条件计算结果为 false?
- 为什么在popback()操作之后,它仍然打印完整的矢量
- 重载操作程序时出错>>用于类中的字符串 memebr
- 对字符串进行位操作
- 我可以在 C++ 中的函数体之外进行操作吗?
- MPI突然停止了对多个核心的操作
- 如何在信号处理程序和普通函数中对全局变量进行互斥读写操作
- 对字符数组中的元素执行逐位操作
- 如何在directx/c++中进行平移/缩放操作
- 逐位操作的隐式类型转换
- 为什么一个向量上的多线程操作很慢
- 如果条件为TRUE(最佳方式?),则在do while循环中后置增量
- 排序时无法执行交换操作.我做的时候它会崩溃.为什么
- 即使没有满足他们的条件,我也无法通过一些 do-while 循环
- 位移操作和位掩码未检测到重复字符
- 如何进行特定的位操作?
- 当我们进行一些操作时,应该使用什么'std::string'或'std::stringstream'?
- 字符串操作 - 字符计数
- 此代码中的操作流程是什么?C/C++.
- 为什么当我对数组使用增量操作时,do for 循环不起作用