在C中嵌套for循环不能按预期工作

时间:2013-06-28 14:39:31

标签: c loops for-loop

for (i = 2; i < input; i++){
    for (d = 2; d < input; d++){
        product = d*i;
        printf("%d\n", product);
        break;
    }
}

这段代码是我的C类入门作业问题解决方案的一部分。实际问题涉及素数,但我想到的解决方案需要使用嵌套的for循环。但是,我无法让他们正确行事。我假设使用数组会简化一些事情,但我们尚未采用它们并且不允许在我们的解决方案中使用它们。无论如何:

例如,如果我的输入为10,则i的值应为{2,3,4,5,6,7,8,9}。我d的价值也应该是{2,3,4,5,6,7,8,9}。

我希望此循环可以将每个i乘以d的完整循环:

2*2
2*3
2*4
.
.
.
2*9
3*2
3*3
.
.
.
.

及以后。但是,它只是将i乘以d = 2,我得到以下内容:

4
6
8
10
.
.
.
20

我做错了什么?

4 个答案:

答案 0 :(得分:9)

for (d = 2; d < input; d++){
        product = d*i;
        printf("%d\n", product);
        break;  // because of this line the loop breaks on first iteration.
}

从您的代码中删除break;,它将会有效。

答案 1 :(得分:4)

您的break语句仅使内循环运行一次。因此,您只需将i乘以d=2

你可能想要这个:

for (i = 2; i < input; i++){
    for (d = 2; d < input; d++){
        product = d*i;
        printf("%d\n", product);
        // break; this statement is causing you to exit loop after 1 iteration
    }
}    

答案 2 :(得分:2)

切断break;,它退出你的内循环

基本上,break语句会转换以下for循环

for (d = 2; d < input; d++){

进入if声明

答案 3 :(得分:2)

删除break;行。当您的代码到达此处时(在第一次迭代中),内部循环(d=2 ...)将被跳过。

对于语句,不像需要以break;结尾的switch语句。您使用break语句退出循环而不是继续下一次迭代(这是continue的用途)。