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
我做错了什么?
答案 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
的用途)。