循环中忽略"if"条件"for"
Condition in "if" ignored in "for" loop
对于以下代码,当输入为:时
第一个输入=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 == 0
,0 == 1(quartiles)/4(quadro) * 10(numstore.size()
怎么能??
因为quartiles
和quadro
都是整数,第一个总是小于第二个(因为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_。
- Arduino:for/while/if在void setup()或void loop()之前?——错误:之前需要不合格
- 为什么在 C/C++ 中交织 switch/for/if 语句是有效的?
- C++ 访问 if 语句(如果它们在 for 循环中)
- 试图避免在 for 循环中出现 if-else 语句,但代码似乎有一些错误
- 这个 FOR-IF 循环的解释是什么?
- C++ 使用 OpenMP 时,如果 for 循环在 if else 语句中出错
- 如何退出 for 循环内的嵌套 if-else 语句?(C/C++)
- MSVC 和 clang for if constexpr 分支的不同行为
- C++创建一个类似于 while、if 或 for 的函数
- 类似蟒蛇 ||和 &&for if in C++
- R6010 执行后出错.if 语句在 for 循环中.[作业][中止已解决,发现新问题]
- if 语句在 for 循环中不起作用
- 并排使用 for 循环和 if 语句C++
- 仅在向量末尾打印新行 - "if"语句在"for"循环之外
- 使用"for"对"if"进行建模
- 是一个 for 循环,最终甚至不会运行一次,就像调用 if 语句以首先检查大小一样快
- if(a == b) 不适用于 for 循环中的双精度
- 为什么"constructor-way"在"for-loop"允许但不允许"if-statement"声明变量?
- 在C++中,将"if"放在 for 循环之外还是将"if"放在 for 循环中更有效
- 优化代码/实现"for"循环而不是长"if - else if - else"