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');
}
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ónswitch
, lo que causa que los casos restantes también sean evaluados. Para resolver este problema, la palabra clavebreak
debe agregarse después de la llamada aload_file
, de esta manera:Esto asegurará que una vez que
load_file
se haya ejecutado, el programa saldrá de la declaraciónswitch
y volverá al bucledo-while
, permitiendo que el usuario ingrese otro comando.