break in side for loop - 在 break 语句之后不在 for 循环之外打印任何内容

break in side for loop -after break statement not printing anything outside the for loop

为什么下面的 for 循环在第 1 次迭代后不执行 谁能帮我解决这个问题。 提前致谢。

输出:

Enter the Range of Numbers

Enter the First Number: 2

Enter the Last Number: 30

The non-prime numbers between 2 and 30 are:

.start for loop...............i=2

.p....=3

end of for loop: i....=2

.start for loop...............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");
}

你的循环代码

    for (p = 2; p<i;)
    {
        remain = i%p;
        if (remain == 0)
            break;
        //p++;
    }

不完整。

pfor 语句中不可更改,在正文中 p++ 被注释。因此,您可能会遇到无限循环。

考虑以下更改:

    remain = 1;
    for (p = 2; p<i && remain; p++)
    {
        remain = i % p;
    }

甚至(没有remain

for (p = 2; p < i && i%p; p++); 

让我们考虑 p = 2i = 5。那么在这个循环中会发生什么

for (p = 2; p<i;)
    {
        remain = i%p;
        if (remain == 0)
            break;
        //p++;
    }

第 1 行 >> 运行 for 循环。 第 2 行 >> remain = i%p。 i = 5 & p = 2. 所以剩下 = 5%2 = 1. 第三行 >> remain 不为零。所以 if(remain == 0) return 错误。 然后它从第一行再次开始工作。所以这个循环就像一个无限循环。

试试这个代码:

int start, end, i, remain, k, p, count = 0;
printf("\nEnter the Range of Numbers\n\n");
printf("Enter the First Number: ");
scanf_s("%d", &start);
printf("Enter the Last Number: ");
scanf_s("%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);
    for (p=1;p<i;p++) 
    {
        if (p > 1 && i%p == 0) 
        {
            printf("%d ", i);
            count++;
            break;
        }
    }
    //printf("\n end of for loop: i...............d\n", i);
}
printf("\n............\n");

它保留了我假设您正在尝试做的事情。我已经评论了打印语句的噪音,并且 count++ 似乎没有在任何地方使用过。您可以将 for 循环减少到:

printf("The non-prime numbers between %d and %d are:\n", start, end);
for (i = start; i <= end; i++)
{
    for (p=1;p<i;p++) 
    {
        if (p > 1 && i%p == 0) 
        {
            printf("%d ", i); 
            break;
        }
    }
}
printf("\n............\n");