scanf se omite [duplicado]
Estoy intentando crear un programa C simple para una clase y uno de los requisitos es que debo usar scanf
/ printf
para todas las entradas y salidas. Mi pregunta es ¿por qué mi scanf
bucle for posterior en el archivo principal se omite y el programa simplemente finaliza?
Aquí está mi código.
#include <stdio.h>
void main() {
int userValue;
int x;
char c;
printf("Enter a number : ");
scanf("%d", &userValue);
printf("The odd prime values are:\n");
for (x = 3; x <= userValue; x = x + 2) {
int a;
a = isPrime(x);
if (a = 1) {
printf("%d is an odd prime\n", x);
}
}
printf("hit anything to terminate...");
scanf("%c", &c);
}
int isPrime(int number) {
int i;
for (i = 2; i < number; i++) {
if (number % i == 0 && i != number)
return 0;
}
return 1;
}
Pude "arreglarlo" agregando otro idéntico scanf
después del primero, pero preferiría usar solo ese.
El carácter de nueva línea presente stdin
después de ingresar el anterior int
no habrá sido consumido por la última llamada a scanf()
. Entonces, la llamada scanf()
después del for
bucle consume el carácter de nueva línea y continúa sin que el usuario tenga que ingresar nada.
Para corregir sin tener que agregar otra scanf()
llamada, puede usar " %c"
el especificador de formato scanf()
después del for
ciclo. Esto hará que scanf()
se omitan los espacios en blanco iniciales (incluida la nueva línea). Tenga en cuenta que significa que el usuario tendrá que ingresar algo más que una nueva línea para finalizar el programa.
Además:
verifique el resultado de
scanf()
para asegurarse de que realmente asigna un valor a las variables pasadas:/* scanf() returns number of assigments made. */ if (scanf("%d", &userValue) == 1)
esta es una tarea (y siempre será cierta):
if (a = 1){ /* Use == for equality check. Note 'a' could be removed entirely and replace with: if (isPrime(x)) */