[C con Clase] ¿Como detectar el tipo de dato ingresado con scanf en C?

Silvio S. Stenta silviostenta en hotmail.com
Vie Nov 21 03:37:25 CET 2008


Armando, lo que pasa es que queda cargado la entrada proba usando la funcion 
fflush() la cual te limpia el buffer.
Esta funcion conviene usarla siempre cuando vas a leer un solo caracter por 
ejemplo: que responda s/n o un valor para compara en un switch.
Espero que te sirva porque lo probe y funciona.

#include <stdio.h>

int main() {
int fechaTemp=0;
int dia=0;
printf("\n\tIngrese un entero entre 1 y 31");
while(dia==0) {
fflush(stdin); //ACA INGRESE LA FUNCION FFLUSH(SDTIN)
if(scanf("%d",&fechaTemp)>=1 && fechaTemp<=31) {

dia=fechaTemp;
} else {
printf("\n\n\tError: Ingrese un valor correcto (entero entre 1 y 31)  ");
}
}
}


--------------------------------------------------
From: "Armando B. VERA" <abvera en arnet.com.ar>
Sent: Thursday, November 20, 2008 11:18 AM
To: "Lista de correo sobre C y C++" <cconclase en listas.conclase.net>
Subject: [C con Clase] ¿Como detectar el tipo de dato ingresado con scanf en 
C?

> cómo podemos detectar el tipo de dato ingresado por teclado y tratarlo
> adecuadamente?
>
> Ejemplo
> #include <stdio.h>
>
> int main() {
> int fechaTemp=0;
> int dia=0;
> printf("\n\tIngrese un entero entre 1 y 31");
> while(dia==0) {
> if(scanf("%d",&fechaTemp)>=1 && fechaTemp<=31) {
>
> dia=fechaTemp;
> } else {
> printf("\n\n\tError: Ingrese un valor correcto (entero entre 1 y 31)  ");
> }
> }
> }
>
> El problema de este código es que si el valor ingresado por teclado no es
> entero el bucle se repite indefinidamente.
>
> La pregunta es: ¿Hay alguna forma de saber si el valor ingresado por 
> teclado
> es entero o nó. algo asi como las funciones "isdigit(variable)" de la
> librería ctype? pero que se pueda tratar con scanf.
>
> Ese problema no la tengo en c++ (cin) pero estoy tratando de entenderle al 
> C.
> -- 
> Armando B. VERA
> abvera en arnet.com.ar
>
> _______________________________________________
> Lista de correo Cconclase Cconclase en listas.conclase.net
> http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net
> Bajas: http://listas.conclase.net/index.php?gid=2&mnu=FAQ
> 




Más información sobre la lista de distribución Cconclase