Salir de un bucle sin una statement de ruptura

¿Cómo salir de un bucle sin una statement de ruptura? Mi profesor odia las declaraciones y nos dice que no las usemos. Solo tengo curiosidad por saber cómo romper el ciclo while si el número que obtuve NO fuera un número primo?

Aquí está mi código:

#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!"); } } 

Tu puedes hacer

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

Esto hace que i sea ​​más grande que num1/2 y el bucle while sale.

Probablemente necesites algunos cambios más para que esto funcione.

O

 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."); } 

Quiero decir, casi lo tienes:

 while (i <= num1/2 && !flag){ 

hubiera hecho el truco también

En su caso, puede utilizar el valor de flag como condición:

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

Pero eso se parece a Pascal en lugar de C. Una solución mejor podría ser refactorizar el bucle para que esté en una función separada:

 int is_prime(int num1) { int i = 2; while (i <= num1/2) { if (num1 % i == 0) return 0; i++; } return 1; } 

Esto hace que el código sea más sencillo y separa las cosas de entrada en primeChecker de la comprobación principal real.