簡體   English   中英

在沒有break語句的情況下跳出循環[C]

[英]Breaking out of a loop without a break statement [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!");
    }
}

要么

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){

本來可以做到的

你可以做

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

這使inum1/2while循環退出。

您可能需要更多更改才能使此工作。

在您的情況下,可以將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的輸入內容與實際的素數檢查分開。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM