¿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.