Float y caracteres
Hola!
Mi problema es el siguiente: tengo una aplicación a la que hay que meterle un dato float. Pero quiero que si el usuario se equivoca y mete un carácter el programa lo detecte y no se salga como me ocurre actualmente. ¿sabési alguna manera de hacerlo?.
Gracias.
Mi problema es el siguiente: tengo una aplicación a la que hay que meterle un dato float. Pero quiero que si el usuario se equivoca y mete un carácter el programa lo detecte y no se salga como me ocurre actualmente. ¿sabési alguna manera de hacerlo?.
Gracias.
podes hacer un gets a un buffer de... 200 chars o algo asi (mejor un fget6s que te deja poner la cantidad maxima) y luego un sscanf controlando su retorno asi:
int n = sscanf ("%f", &var);
Ahora, tenes en n la cantidad de entradas escaneadas y almacenadas por scanf (sscanf, fscanf y derivados) que en este caso sera 1 si se encontro un float o cero si no se encontro nada... ahora, si es mas agarrate porque scanf escrivio en algun parte lo otro que leyo... (o no segun implementaciones de esto) pero de todas formas si ahora es distinto de 1 el resultado y queres comprovar que sea una palabra (o conjunto de estas) podes verificar con isalpha(c) dentro de un if asi:
if (isalpha(buffer[0]))... // Suponiendo que el arreglo que le pasaste al gets sea "buffer" :-)
asi, espero que esto te sirva, hay mucho mas de la familia scanf en las ayudas de los compiladores.
suerte.
int n = sscanf ("%f", &var);
Ahora, tenes en n la cantidad de entradas escaneadas y almacenadas por scanf (sscanf, fscanf y derivados) que en este caso sera 1 si se encontro un float o cero si no se encontro nada... ahora, si es mas agarrate porque scanf escrivio en algun parte lo otro que leyo... (o no segun implementaciones de esto) pero de todas formas si ahora es distinto de 1 el resultado y queres comprovar que sea una palabra (o conjunto de estas) podes verificar con isalpha(c) dentro de un if asi:
if (isalpha(buffer[0]))... // Suponiendo que el arreglo que le pasaste al gets sea "buffer" :-)
asi, espero que esto te sirva, hay mucho mas de la familia scanf en las ayudas de los compiladores.
suerte.
