我在程序的最后部分遇到麻烦。
该代码用输入数字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 ...
答案 0 :(得分:4)
您所依赖的序列不存在。您假设j
仅在比较的左侧完成运行后才递增。 C ++标准没有这样的保证。因此,由于修改j
并以一个完整的表达式读取它而没有正确的顺序,因此您的程序具有未定义的行为。
与其聪明一点,而不是写j++
,而是明确说明了如何对事物进行排序:
while (j < 20){
if (abs(p[j] - nStevilo) < abs(p[j + 1] - nStevilo)){
++j;
najblizjeStevilo = p[j];
}
}