循环中忽略"if"条件"for"

Condition in "if" ignored in "for" loop

本文关键字:if for 条件 循环      更新时间:2023-10-16

对于以下代码,当输入为:时

第一个输入=0 1 2 3 4 5 6 7 8 9

第二个输入=1 2 3 4 5 6 7 8 9 10

它将产生的输出:

第一次输出=0

第二次输出=1

它不是取每个输入四分位数,而是取其第一个元素,问题是(经过测试等),它在代码中处理问题

for (vector<int>::size_type counter = 0; (quartiles < quadro) && (counter < numstore.size()); ++counter)
{
    if (counter == (quartiles/quadro * numstore.size()))
    {
        quaele.push_back(numstore[counter]);
        if ((quartiles == 2) && (numstore.size() / 2 == 0))
            quaele[quartiles-1] = (numstore[counter]+numstore[counter-1]) / 2;
        ++quartiles;
    }
    // test
    cout << quartiles;
}

如果"if function"中的条件不起作用,我的意思是在第一个循环中,counter == 00 == 1(quartiles)/4(quadro) * 10(numstore.size()怎么能??

因为quartilesquadro都是整数,第一个总是小于第二个(因为for语句就是这么说的),所以表达式:

quartiles / quadro * numstore.size()

始终等于零,因为首先计算quartiles / quadro。因此,if语句只有在循环的第一次为true。

你可以通过重新安排计算来绕过这个问题:

quartiles * numstore.size() / quadro

这就是整数运算的工作原理。CCD_ 8被截断为零。

你可以通过先乘以得到正确的结果(四舍五入到最接近的整数)

(quartiles * numstore.size()) / quadro

我使用了括号来明确评估顺序——如果你愿意,可以省略它们。

请注意,对于较大的值,您需要小心乘法不会溢出——可能是通过转换为更宽的类型,或转换为浮点,或通过小心地用较小的因子进行乘法和除法。在这种情况下,这可能不是问题。

对于四分位数=1和四分位数=4的情况,表达式quartiles/quadro * numstore.size()将为0。这是因为1/4向下取整为0。

也许这就是你的意思:(quartiles * numstore.size()) / quadro

在C++中,除法运算符可以被认为是两个不同的运算符:一个用于整数操作数,另一个用于浮点操作数。如果操作数是浮点类型,除法运算符将返回浮点值。

http://www.learncpp.com/cpp-programming/eight-c-programming-mistakes-the-compiler-wont-catch/

尝试:

float result = quartiles/quadro * numstore.size();

编辑:通过评论进行更正。

float result = quartiles/(float)quadro * numstore.size();

将其中一个操作数转换为浮点数就足够了。

四分位数/四分位数等于0.25,并且由于四分位数是int四分位数/quadro==0

C++中,当你对两个整数进行除法时,你得到了整数除法。此外,*/具有相同的优先级,因此解析器将其解释为(quartiles / quadro) * numstore.size()。并且CCD_ 15等于CCD_。