在没有break语句的情况下打破循环
如何在没有break语句的情况下突破循环? 我的教授HATES打破了陈述并告诉我们不要使用它。 我只是好奇如果我得到的数字不是素数,我将如何突破while循环?
这是我的代码:
#include #include /* 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!"); } }
你可以做
while (i <= num1/2) { if (num1 % i == 0) { i = num1; } else { i++; } }
这使得i
大于num1/2
并且while
循环退出。
您可能需要进行一些更改才能使其正常工作。
要么
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){
本来也可以做到这一点
在您的情况下,您可以使用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
的输入内容与实际的主要检查分开。