如果在while循环内引起麻烦

时间:2018-11-26 09:16:44

标签: c++ arrays if-statement while-loop

我在程序的最后部分遇到麻烦。 该代码用输入数字suphp减去数组p[j],然后放入绝对值。然后,将结果与数组nStevilo的减法进行比较。 代码应该遍历数组并找到最小值,然后将其附加到p[j++]中,但是由于某些原因,它不起作用?

najblizjeStevilo

该数组包含20个质数,从2(2、3、5、7、11 ...)开始,因此while (j < 20){ if (abs(p[j] - nStevilo) < abs(p[j++] - nStevilo)){ najblizjeStevilo = p[j]; } } = 2,p[0] = 3 ...

1 个答案:

答案 0 :(得分:4)

您所依赖的序列不存在。您假设j仅在比较的左侧完成运行后才递增。 C ++标准没有这样的保证。因此,由于修改j并以一个完整的表达式读取它而没有正确的顺序,因此您的程序具有未定义的行为。

与其聪明一点,而不是写j++,而是明确说明了如何对事物进行排序:

while (j < 20){
        if (abs(p[j] - nStevilo) < abs(p[j + 1] - nStevilo)){
            ++j;
            najblizjeStevilo = p[j];
        }
    }