[英]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++;
}
}
這使i
比num1/2
, while
循環退出。
您可能需要更多更改才能使此工作。
在您的情況下,可以將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.