【发布时间】:2016-12-22 10:14:42
【问题描述】:
为什么以下 for 循环在第一次迭代之后不执行 任何人都可以帮助我解决这个问题。 提前致谢。
输出:
输入数字范围
输入第一个数字:2
输入最后一个数字:30
2 到 30 之间的非质数是:
.start for 循环......i=2
.p....=3
for 循环结束:i....=2
.start for 循环......i=3
在此之后,for 循环不再执行。为什么?
#include <stdio.h>
int main(void)
{
int start, end, i, remain, k, p, count = 0;
printf("\nEnter the Range of Numbers\n\n");
printf("Enter the First Number: ");
scanf("%d", &start);
printf("Enter the Last Number: ");
scanf("%d", &end);
int flag;
printf("The non-prime numbers between %d and %d are:\n", start, end);
for (i = start; i <= end; i++)
{
printf("\n.start for loop...............i=%d\n", i);
// p = 2;
for (p = 2; p<i;)
{
remain = i%p;
if (remain == 0)
break;
//p++;
}
p++;
printf("\n.p....=%d \n", p);
if (i == p)
// if(remain==0)
{
printf("%d ", i);
count++;
}
printf("\n end of for loop: i....=%d\n", i);
}
printf("\n............\n");
}
【问题讨论】:
-
p看起来您试图在它控制的循环内对其进行修改,但由于某种原因选择将其注释掉。//p++;- 那么inside那个循环会ever导致条件p<i为false? -
@WhozCraig 在 for (p = 2; p
-
你现在在整个循环之外增加它。 IE。如果曾经在 (a)
p < i和 (b)i%p != 0的位置输入该循环,则它是无限的。 for 循环条件和内部的任何中断条件都不会导致循环中断; 永远。运行这是一个调试器,单步执行该循环。它将显示我所描述的内容。 -
当
i为2 时,循环为for (p=2; p<2;),因此跳过循环。当i为3 时,循环为for(p=2; p<3;),为无限循环。 -
@user3386109 我认为在“当 i 为 2 时,循环是 for (p=2; p
标签: c for-loop conditional-statements break