Valide el tipo de entrada en un ciclo do-while C
Básicamente, necesito asegurarme de que la entrada sea unentero, al igual que:
do {
printf("Enter > ");
scanf("%d", &integer);
} while (/* user entered a char instead of an int */);
He intentado varios métodos, pero siempre termina con un error de tiempo de ejecución o un bucle infinito cuando intento ingresar unchar
. Lo he sabidofflush(stdin)
es un comportamiento indefinido, que es mejor no involucrarlo en mi código para evitar cualquier error másya no funciona en VS2015 por algunas razones
Los códigos a continuación son el método que he probado:
typedef enum {false, true} bool;
int ipt;
char c;
bool wrong_ipt;
do {
c = '\0';
printf("Enter > ");
scanf("%d%c", &ipt, &c); //infinite loop occurs while a char has been entered
} while (c != '\n');
do {
c = '\0';
printf("Enter > ");
} while (scanf("%d", &ipt) != EOF);
do {
wrong_ipt = false;
do {
ipt = NULL;
printf("Enter > ");
scanf("%d", &ipt);
if (ipt == NULL) {
wrong_ipt = true;
break;
}
} while (ipt == NULL);
} while (wrong_ipt);
¿Hay alguna otra forma que no seafflush(stdin)
que puede usarse para evitar el bucle infinito cuando el usuario ingresó unchar
enC?
Gracias