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

Armando B. VERA abvera en arnet.com.ar
Vie Nov 21 19:53:08 CET 2008


El Jueves, 20 de Noviembre de 2008 17:29, Zaka Elab escribió:
> Si te fijas en la definición de scanf, cuando el valor leído no es válido,
> el valor de retorno de la función es EOF, que está definido como un entero
> negativo; por lo que tenemos que siempre que el valor sea diferente de un
> entero la expresión if (scanf("%d",&fechaTemp)>=1 && ...) será FALSE.

Si eso ocurre, se debe mostrar el mensaje de error y volver a mostrar el 
scanf inclido en el if. Si el if es verdadera se cambia el valor "dia" 
con el que se controla el while, si no se cumple, "dia" vale cero y debería
mostrar nuevamente el scanf esperando que se ingrese por teclado un valor 
correcto. Es lo que se espera.

Funciona muy bien si el usuario presiona un entero, si el valor ingresado por
teclado no es entero es donde se general el inconveniente.

He intentado con la sugerencia de "Silvio S Stenta" pero no me funcionó. El 
valro de retorno de "fflush(stdin) es un entero negativo, pero el buffer no
se descarga. 

Sigo teniendo el mismo problema si se presiona una tecla tipo caracter.

Debe existir alguna forma de poner la variable fechaTem a un valor "NULL", es
decir, el usuario presiona una tecla que no es entero, que no se produzca la
asignación de fechaTemp. Eso ocurre poniendo un * en scanf("%*") pero entonces
directamente scanf descarta el valor ingresado.

En principio no queria tratarlo caracter a caracter ya que el valor ingresado 
puede ser 1 o 2 digitos.

Si lo trato caracter a caracter tendré que realizar algo así:

------------
char fechaTemp[2]

	(int) fechaTemp[0]*10 +(int) fechaTemp[1]
	pero, por ejemplo (int) fechaTemp[0]='5' no es 5.
------------
	Voy a agotar mi idea original de tratar de deterctar
	el tipo de dato ingresado, si no lo encuentro comenzaré
	la posibilidad que sugieres, aunque ya lo habia considerado
	pero me pareció que era más laborioso.

	De todas forma gracias.

Saludos

-- 
Armando B. VERA
abvera en arnet.com.ar




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