C 小于整数的素数

C 小于整数的素数,c,C,我编写了一个程序来查找所有小于用户输入整数的素数。然而,它只是挂起。我想所有这些都在继续使用,什么的都是一团糟,我已经做了意大利面代码……有人能帮我吗 /*takes integer input, displays all primes less than that integer*/ #include <stdio.h> int main(void) { unsigned int num_in, test_num = 0, divisor = 0; _Bool

我编写了一个程序来查找所有小于用户输入整数的素数。然而,它只是挂起。我想所有这些都在继续使用,什么的都是一团糟,我已经做了意大利面代码……有人能帮我吗

 /*takes integer input, displays all primes less than that integer*/
#include <stdio.h>

int main(void) {
    unsigned int num_in, test_num = 0, divisor = 0;
    _Bool primestate = 0;
    printf("Please enter an integer.\n");
    scanf("%d", &num_in);

    while(test_num < num_in) {
        while(divisor < test_num) {
            if(test_num % divisor == 0) {
                primestate = 1;
            }

            test_num++;
        }
        if(primestate == 1) {
            printf("%d is prime and less than %d.\n", test_num, num_in);
        } else {
            continue;
        }
    }

    return 0;
}
/*接受整数输入,显示小于该整数的所有素数*/
#包括
内部主(空){
无符号整数,测试数=0,除数=0;
_布尔素数状态=0;
printf(“请输入一个整数。\n”);
scanf(“%d”、&num_in);
while(test_num
您从不增加
test_num
除数,因此它会卡在其中一个循环中

while(test_num < num_in) {
    while(divisor < test_num) {
        if(test_num % divisor == 0) {
            primestate = 1;
        }
        divisor++; // NEW LINE            
    }

    if(primestate == 1) {
        printf("%d is prime and less than %d.\n", test_num, num_in);
    } else {
        continue;
    }

    test_num++; // NEW LINE
}
#包括
#包括
内部主(空){
无符号整数,测试数,除数;
布尔原状态;
printf(“请输入一个整数。\n”);
scanf(“%u”、&num_in);
如果(2对于(除数=3;除数*除数,你永远不会增加
test\u num
。在函数中构造你的代码。设计每个函数来实现一个单一的目的。你的代码自然会变得更清晰,更容易调试。我一直告诉自己函数很好,但从来没有使用过它们。它们看起来需要做很多工作
(除数
while(0你自己试过调试它吗?你知道,在调试器下一步一步地运行它(使用小整数),或添加调试打印。即使修复此问题,它也会在输入后挂起。更新code@user3813418刚刚注意到你也没有递增
除数
。更新了代码。@user3813418刚刚检查了你的代码,你没有在正确的位置递增
test_num
。请检查我的代码。我在这个问题上犯了严重错误。仍然挂起,所有这些都e> 继续
s使其无法follow@user3813418请尝试打印test_num或divisior的值,以确保这些值正确,并且程序仍在运行。
if(test_num % divisor == 0) {
#include <stdio.h>
#include <stdbool.h>

int main(void) {
    unsigned int num_in, test_num, divisor;
    bool primestate;
    printf("Please enter an integer.\n");
    scanf("%u", &num_in);

    if(2 < num_in)
        printf("\n%u\n", 2);
    for(test_num = 3; test_num < num_in; test_num += 2){
        primestate = true;
        for(divisor=3; divisor * divisor <= test_num ; divisor += 2) {
            if(test_num % divisor == 0) {
                primestate = false;
                break;
            }
        }
        if(primestate) {
            printf("%u\n", test_num);
        }
    }

    return 0;
}