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.

La instrucción switch case no realiza un bucle.

Todo lo que está haciendo es ejecutando funciones, pero por alguna razón no se detiene después de presionar “r”, simplemente ejecuta la función y luego termina el programa.

int main()
{
    char key = 0;
    PPMImagen *img = NULL;
    do {
        puts("\tPresione r para leer una imagen en formato ppm");
        puts("\tPresione s para guardar la imagen en formato ppm");
        puts("\tPresione q para salir");

        scanf(" %c", &key);
        clear_to_end(stdin);
        switch (key) {
            case 'r':
                load_file("nombre_archivo");
                free(img->data);
                break;

            case 's':
                save_file(img);
                break;

            case 'q':
                puts("\tTerminando programa...");
                break;

            default:
                puts("\tEntrada inválida");
                break;
        }
    } while (key != 'q');
}
Tags:  , , ,

Answer

  1. Avatar for davy.ai

    El problema en este código es que después de que el usuario ingrese “r” para leer una imagen en formato ppm, se ejecuta la función load_file pero el programa no sale de la declaración switch, lo que causa que los casos restantes también sean evaluados. Para resolver este problema, la palabra clave break debe agregarse después de la llamada a load_file, de esta manera:

    case 'r':
        load_file("fname");
        free(img->data);
        break;
    

    Esto asegurará que una vez que load_file se haya ejecutado, el programa saldrá de la declaración switch y volverá al bucle do-while, permitiendo que el usuario ingrese otro comando.

Comments are closed.