英文:
For Loop Quick Clarification
问题
这个循环行为与我的预期不同:如何在这里成功评估2。
- 我解释了它,即
control = 2
;外部for循环开始(control减小到1); - 打印(control=2)执行;
- sub_control评估为1;内部for循环退出
在这种情况下,外部for循环根本没有进入,看输出。
英文:
Working through some exercise, and this loop behaviour is not as I expected:
void primeFunc(int &number){
bool prime_check = false;
for( int control = number; control > 1; --control){
printf("\tcontrol = %d\n", control);
for( int sub_control = control-1; sub_control > 1; --sub_control){
printf("\t\tsub_control = %d\n", sub_control);
if(control % sub_control == 0){
prime_check = false;
break;
}
else prime_check = true;
// printf("\nPrime: div/quo :: %d/%d", control, sub_control);
}
if(prime_check == true){
printf("\n%d", control);
}
}
}
// function call
int num = 5;
primeFunc(num); //<- clearly showing how parameter is passed to func argument ->
The output of the snippet above:
5 control = 4
sub_control = 3
sub_control = 2
control = 3
sub_control = 2
3 control = 2
2
How is 2 evaluating successfully here.
- I exaplained it as control = 2; the outer for loop starts (control decrements to 1);
- print(control=2) runs;
- sub_control evaluates to 1; inner for loop exits
In this case, the outer for loop isnt even entered print(control=2) doesnt execute.
edit:
The question really is understanding how the number 2 evaluates with prime_check = true
.
- the for loop is not entered at all, looking at the output
答案1
得分: 1
以下是翻译好的部分:
这个问题实际上是理解数字2如何在prime_check = true的情况下进行评估。
看输出结果,for循环根本没有进入。
这可能是因为我们从前一个循环执行中的控制==3的情况下开始循环,而prime_check仍然为true。因为subcontrol = 2-1,所以sub_control > 1
失败了,我们根本不进入sub_control循环...并执行printf("\n%d", control);
。
英文:
> The question really is understanding how the number 2 evaluates with prime_check = true.
>
> the for loop is not entered at all, looking at the output
This is likely because we start the loop where control==2 with prime_check as still true from the previous loop execution where control==3.
Because subcontrol = 2-1, and therefore sub_control > 1
fails, we never go into the sub_control loop at all... and execute printf("\n%d", control);
.
答案2
得分: -2
-- 在比较之前,将控制减少到“>1”,我会使用control--。
对于你如何减少sub_control,也是一样的。
英文:
--control decrememts control before you compare it to ">1",
I would use control--.
the same goes for how you are decrementing sub_control.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论