0
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
.
.
.
.

及以后。但是,它只是乘以id = 2我得到以下结果:

4
6
8
10
.
.
.
20

我究竟做错了什么?

4

4 回答 4

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;它会起作用。

于 2013-06-28T14:41:14.060 回答
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
    }
}    
于 2013-06-28T14:42:40.723 回答
2

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

本质上,该break语句转为以下for循环

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

if声明

于 2013-06-28T14:43:06.087 回答
2

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

For 语句不像 switch 语句,你需要以break;. 您使用break语句退出循环而不是继续下一次迭代(这就是continue目的)。

于 2013-06-28T14:44:58.613 回答