如果没有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!");
}
}
答案 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
中的输入内容与实际的主要检查分开。