Me encontré con este problema cuando quiero comprobar lo que ingresé es número. La función scanf devolverá 1 si ingreso con éxito un número. Así que aquí está lo que escribí:¿Qué sucede cuando ingresas cosas como 12ab a scanf ("% d", & argu)?
int argu;
while(scanf("%d",&argu)!=1){
printf("Please input a number!\n");
}
Pero cuando las cosas I de entrada como ABCD para él, el bucle irían para siempre y no parar para pronta.
Lo busqué en línea y descubrí que tenía algo que ver con el caché y necesito limpiarlo para que scanf pueda obtener nuevos datos. Así que probé fflush pero no funcionó.
Y vi esto:
int argu,j;
while(scanf("%d",&argu)!=1){
printf("Please input a number!\n");
while((j=getchar())!='\n' && j != '\n');
}
Luego, cuando las cosas que de entrada como 'ABCD' funcionó bien y se impulsó para mi entrada. Pero cuando ingreso cosas como '12ab', no funcionaría de nuevo.
Entonces, ¿hay alguna manera de verificar la entrada de scanf ("% d", & argu) es realmente un número y solicitar otra entrada si no es así?
EDITAR:
vi las respuestas y resolvió mi problema utilizando while(*eptr != '\n')
.
Observe que la función fgets
realmente lee '\ n' en la matriz y fget
no. Así que ten cuidado.
use el código como fgets (s, 10, stdin)? – Gnijuohz
¡Gracias! No sabía Strtol. ¡Aprendió mucho! – Gnijuohz
lo siento, ¿puedes explicar 'if (eptr == NULL ||! Isspace (* eptr))'? cuando se utiliza el código que se da, se aceptan entradas como '12 34 ', pero no deberían serlo. cuando ingresé '1234' ¿a qué se referiría el eptr y qué tal '12ab' y '12 34 '? – Gnijuohz