[C con Clase] Dudas con printf y scanf

JoseL joselubar en gmail.com
Sab Dic 29 22:29:29 CET 2007


Hola,

Estoy con los primeros capítulos del curso y he empezado a mirar también algunas funciones de las librerías estándar. Concretamente estaba experimentando con printf y scanf, con la idea de escribir un prototipo de programa que muestre opciones y se reinicie indefinidamente hasta que el usuario seleccione expresamente la opción 'salir'. Más o menos así:


#include <cstdio>
#include <cstdlib>

int main()
{
	char opcion;
	
	/* Este bucle se repetirá indefinidamente mientras no se elija
	   opción 'salir' (opcion == '4') */
	
	while(true)
	{
		printf("\n\n\t--- MENU PRINCIPAL ---\n\n");
		
		printf(" 1 - Hacer una primera cosa\n");
		printf(" 2 - Hacer una segunda cosa\n");
		printf(" 3 - Hacer una tercera cosa\n");
		printf(" 4 - Salir\n\n");
		
		printf(" Introduce una opcion: ");
		scanf("%c", &opcion);
				
		switch(opcion)
		{
			case '1':
			{
				printf("\n\tCodigo para la opcion '1'...\n");
				break;
			}
			case '2':
			{
				printf("\n\tCodigo para la opcion '2'...\n");
				break;
			}
			case '3':
			{
				printf("\n\tCodigo para la opcion '3'...\n");
				break;
			}
			case '4': return 0;
				// La única opción para finalizar el programa.
			
			default:
				printf("\n\n Debe introducir una opcion valida\n");
		}
	
	printf("\n Presione cualquier tecla para volver al menu principal...\n");
	system("pause>null");
	}
}

El caso es que no se comporta como yo esperaba. Mejor me explico mostrando lo que aparece en la consola:


         --- MENU PRINCIPAL ---

    1 - Hacer una primera cosa
    2 - Hacer una segunda cosa
    3 - Hacer una tercera cosa
    4 - Salir

    Introduce una opcion: 1
          [Tecleo 1 y pulso INTRO]

          Codigo para la opcion '1'...

    Presione cualquier tecla para volver al menu principal...
          [Pulso INTRO]


         --- MENU PRINCIPAL ---

    1 - Hacer una primera cosa
    2 - Hacer una segunda cosa
    3 - Hacer una tercera cosa
    4 - Salir

    Introduce una opcion:
          [Debería pararse aquí, pero no se detiene, y se comporta como si]
           hubiera introducido una opción no válida:]

    Debe introducir una opcion valida

    Presione cualquier tecla para volver al menu principal...
          [Pulso INTRO]


         --- MENU PRINCIPAL ---

    1 - Hacer una primera cosa
    2 - Hacer una segunda cosa
    3 - Hacer una tercera cosa
    4 - Salir

    Introduce una opcion: 4
          [Ahora si se detiene]


A ver si alguien me puede explicar qué debería hacer para que el programa funcione correctamente.

Gracias y un saludo.


Más información sobre la lista de distribución Cconclase