在没有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的输入内容与实际的主要检查分开。