在没有break语句的情况下突破循环[C]

时间:2016-04-08 05:16:59

标签: c

如果没有break语句,你如何突破循环?我的教授HATES打破了陈述并告诉我们不要使用它。我只是好奇,如果我得到的数字不是素数,我将如何突破while循环?

这是我的代码:

#include <stdio.h>
#include <stdlib.h>

/* Prototypes */
void primeChecker(int num1);

int main() {
    int num1 = 5;

    primeChecker(num1);

    return 0;
}

void primeChecker(int num1) {
    int i, flag = 0;

    printf("Enter a number to check for prime numbers: ");
    scanf("%d", &num1);

    /* Number to start with */
    i = 2;

    while (i <= num1/2) {
        if (num1 % i == 0) {
            flag = 1;
        } else {
            i++;
        }
    }

    if (flag == 0) {
        printf("The number is a prime number!");
    } else {
        printf("The number is NOT a prime number!");
    }
}

3 个答案:

答案 0 :(得分:2)

或者

int prime = 1;
while (i <= num1/2 && prime) {
    if (num1 % i == 0){
       prime = 0;
    } else {
       i++;
    }
}

if(prime){
    printf("The number is a prime number!");
}else{
    printf("The number is not prime.");
}

我的意思是,你几乎拥有它:

while (i <= num1/2 && !flag){

也可以完成这个伎俩

答案 1 :(得分:1)

你可以做到

while (i <= num1/2) {
    if (num1 % i == 0) {
        i = num1;
    } else {
        i++;
    }
}

这会使i大于num1/2并且while循环退出。

您可能需要进行一些更改才能使其正常工作。

答案 2 :(得分:1)

在您的情况下,您可以使用flag的值作为条件:

while (flag == 0 && i <= num1/2) {
    if (num1 % i == 0) {
        flag = 1;
    } else {
        i++;
    }
}

但是看起来像Pascal而不是C.一个更好的解决方案可能是重构循环以便它在一个单独的函数中:

int is_prime(int num1)
{
    int i = 2;

    while (i <= num1/2) {
        if (num1 % i == 0) return 0;
        i++;
   }

   return 1;
}

这使代码更简单,并将primeChecker中的输入内容与实际的主要检查分开。