Otra cuestión es que usted está leyendo, con sólo scanf("%f", &input);
. Si el usuario escribe algo que no se puede interpretar como un número de coma flotante C, como "pi", la llamada scanf()
no asignará nada al input
, y no progresará desde allí. Esto significa que intentaría seguir leyendo "pi" y fallando.
Dado que los otros carteles son recomendables, si escribe "pi" habrá un bucle sin fin de impresión del valor anterior de input
e imprimiendo el mensaje, pero el programa nunca procesará ningún nuevo entrada.
scanf()
devuelve el número de asignaciones a las variables de entrada que realizó. Si no hizo ninguna asignación, eso significa que no encontró un número de coma flotante, y debería leer más entradas con algo como char string[100];scanf("%99s", string);
. Esto eliminará la siguiente cadena de la secuencia de entrada (hasta 99 caracteres, de todos modos, el char
adicional es para el terminador nulo en la cadena).
Sabes, esto me está recordando todas las razones que odio scanf()
, y por eso uso fgets()
lugar y luego tal vez analizarlo usando sscanf()
.
Nota: Suponiendo que la entrada del usuario no se canaliza, la comprobación de EOF probablemente no es ideal, ya IIRC generalmente que significa que el usuario debe golpear CTRL + D para dejar de fumar, que no es obvio – Brian