es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

El programa no está leyendo correctamente la entrada “doble”.

En este programa en C, si ingreso b como entrada, el programa imprime Ingrese la entrada correcta. Si ingreso b45 como entrada, el programa nuevamente imprime Ingrese la entrada correcta. Pero, si ingreso 45b, el programa toma 45 como entrada y continúa normalmente.

Si ingreso 45b, el programa debería imprimir Ingrese la entrada correcta, pero no está sucediendo.

#include <stdio.h>

int main()
{
double i;

printf ("Ingrese un número. \n");
while (scanf("%lf", &i) == 0)
{
printf("Ingrese la entrada correcta. \n");
fflush (stdin);
}

printf ("%lf\n", i);

return 0;
}

Tags:  ,

Answer

  1. Avatar for davy.ai

    La función scanf() se utiliza para leer entrada del usuario. En este programa, lee la entrada en forma de un double (%lf) y lo almacena en la variable i. Si scanf() no puede leer la entrada en el formato esperado (es decir, un double), devuelve 0. En ese caso, el programa imprime “Ingrese una entrada correcta” y limpia el buffer de entrada utilizando fflush().

    Sin embargo, en el caso de ingresar 45b, scanf() lee 45 como un double y deja b en el buffer de entrada. Entonces, la próxima vez que se ejecute el bucle, scanf() devuelve 0 porque espera un double y encuentra b en el buffer. Pero el programa no imprime “Ingrese una entrada correcta” porque asume que la entrada está en el formato correcto (es decir, ha leído el double 45).

    Para solucionar este problema, puede modificar el programa para leer la entrada como una cadena y luego verificar si se puede convertir a un double utilizando la función strtod(). Aquí está el código modificado:

    #include <stdio.h>
    #include <stdlib.h>
    
    int main()
    {
        char input[100];
        double i;
    
        printf ("Ingrese un número. \n");
        while (fgets(input, sizeof(input), stdin) != NULL)
        {
            if (sscanf(input, "%lf", &i) == 1)
            {
                printf ("%lf\n", i);
                break;
            }
            else
            {
                printf ("Ingrese una entrada correcta. \n");
            }
        }
    
        return 0;
    }
    

    En este programa modificado, leemos la entrada como una cadena utilizando fgets() y la almacenamos en el array input. Luego, utilizamos sscanf() para tratar de leer un double de la cadena de entrada. Si tiene éxito (es decir, devuelve 1), imprimimos el double y salimos del bucle. Si falla, imprimimos “Ingrese una entrada correcta” y continuamos el bucle para leer nuevamente la entrada. De esta manera, el programa maneja correctamente la entrada en formato 45b e imprime “Ingrese una entrada correcta”.</stdlib.h></stdio.h>

Comments are closed.