Va como un tiro con el flush_stdin() :)
Aquí os dejo el programa completo y perfectamente depurado para quien le pueda interesar:
Código C++:
Ver original/***********************************************************************************************************************************************
PARKING:
Realizar un programa para controlar un aparcamiento que dispone de 25 plazas de 2 tamaños: 10 grandes y 15 pequeñas. Las plazas se asignaran
automáticamente cuando entre un vehiculo segun el tamaño:
· Cada vehiculo solo ocupara una plaza.
· Un vehiculo pequeño siempre ocupara una plaza pequeña salvo que estén todas ocupadas y haya plazas grandes libres.
· Un vehiculo grande solo podrá aparcar en una plaza grande.
· Cuando entre un vehiculo ocupara siempre la plaza de número menor de todas las libres.
El programa tendrá tres opciones básicas:
· Entrada: es necesario indicar el tamaño del coche.
· Salida: es necesario indicar la plaza que deja libre.
· Situación del aparcamiento: indicando las plazas libres y las ocupadas.
***********************************************************************************************************************************************/
#include <stdio.h>
#include <ctype.h>
/* Vectores que indicarán la situación de cada aparcamiento */
typedef bool Tipo_Vector_ParkingP[15];
typedef bool Tipo_Vector_ParkingG[10];
Tipo_Vector_ParkingP Vector_ParkingP = {false, false, false, false, false, false, false, false, false, false, false, false, false, false, false};
Tipo_Vector_ParkingG Vector_ParkingG = {false, false, false, false, false, false, false, false, false, false};
/* Función para limpiar el BUFFER */
void flush_stdin(){
int ch;
while( (ch
= getchar()) != '\n' && ch
!= EOF
);
}
/* Subprograma que se encarga de imprimir las plazas pequeñas del parking una a una, vacias o llenas, según la situación del vector 'Vector_ParkingP' */
void imprimir_plazaP(){
for(int k = 1; k <= 15; k++){
if (Vector_ParkingP[k]){
} else {
}
}
}
/* Subprograma que se encarga de imprimir las plazas grandes del parking una a una, vacias o llenas, según la situación del vector 'Vector_ParkingG' */
void imprimir_plazaG(){
for(int k = 1; k <= 10; k++){
if (Vector_ParkingG[k]){
} else {
}
}
}
/* Subprograma que imprime la gráfica del parking indicando su situación */
void imprimir_parking(){
printf(" _01_02_03_04_05_06_07_08_09_10_11_12_13_14_15_\n"); imprimir_plazaP();
imprimir_plazaP();
printf(" |- - - - - - - - - - - - - - - - - - - - |\n"); imprimir_plazaG();
imprimir_plazaG();
printf("in/ |\n |___|___|___|___|___|___|___|___|___|___| out|\n"); printf(" 01 02 03 04 05 06 07 08 09 10 | |\n");
}
/* Subprograma que gestiona las entradas de vehiculos. */
void entrar_vehiculo(){
char tecla = ' ';
while (tecla != 'P' && tecla != 'G'){
printf("\nIndique si el vehiculo es grande 'G' o pequeño 'P': ");
flush_stdin();
if(tecla != 'P' && tecla != 'G'){
printf("\nCOMANDO INCORRECTO\n"); }
}
if (tecla == 'P'){
for(int k = 1; k <= 15; k++){
tecla = 'G';
if (!Vector_ParkingP[k]){
Vector_ParkingP[k] = true;
tecla = ' ';
k = 16;
}
}
}
if (tecla == 'G'){
for(int k = 1; k <= 10; k++){
if (!Vector_ParkingG[k]){
Vector_ParkingG[k] = true;
k = 11;
tecla = ' ';
}
}
}
if (tecla != ' '){
printf("\n\nParking lleno, no pueden entrar más vehiculos:\n\n");
} else {
printf("\n\nEl vehiculo ha ocupado su plaza:\n\n"); tecla = ' ';
}
imprimir_parking();
}
/* Subprograma que gestiona las salidas de vehiculos. */
void salir_vehiculo(){
int plaza = 0;
char teclo = ' ';
while (teclo != 'P' && teclo != 'G'){
printf("\nIndique la zona (G/P)): ");
flush_stdin();
if(teclo != 'P' && teclo != 'G'){
printf("\nCOMANDO INCORRECTO\n"); }
if (teclo == 'P'){
printf("\nIndique la plaza (1-15)): ");
flush_stdin();
if (Vector_ParkingP[plaza]){
Vector_ParkingP[plaza] = false;
printf("\n\nEl vehiculo ha abandonado la plaza:\n\n");
} else {
printf("\n\nERROR: No hay vehiculo en esa plaza:\n\n"); }
}
if (teclo == 'G'){
printf("\nIndique la plaza (1-10)): ");
flush_stdin();
if (Vector_ParkingG[plaza]){
Vector_ParkingG[plaza] = false;
printf("\n\nEl vehiculo ha abandonado la plaza:\n\n");
} else {
printf("\n\nERROR: No hay vehiculo en esa plaza:\n\n"); }
}
}
teclo = ' ';
imprimir_parking();
}
/* Programa principal. */
int main (){
char accion = ' ';
do{
printf("\nIndique acción a realizar (Si entra vehiculo pulse 'E', si sale vehiculo pulse 'S', si desea observar el estado del parking pulse 'O', si desea finalizar el programa pulse 'F'): "); flush_stdin();
switch (accion) {
case 'E':
entrar_vehiculo();
break;
case 'S':
salir_vehiculo();
break;
case 'O':
imprimir_parking();
break;
default:
printf("\nCOMANDO INCORRECTO\n"); }
} while (accion != 'F');
return 0;
}
Gracias a todos por vuestra ayuda ;)