Ayuda con este programa en C: El problema es que al usar case 3 me muestra un inventario, pero al regresar al menú me sigue mostrando el inventario en la parte superior. Este es el programa:

#include

#include



using namespace std;

char nombres[100][50];
char tipos[100][50];

int cantidades[100];

float precios[100];

int numPrendas = 50;



struct Producto {

char nombre[50];

int cantidad;

float precio;

};



Producto carrito[100];

int numProductosCarrito = 0;

float saldo = 0;



void inicializarCatalogo() {

strcpy(nombres[0], "Camisa");

strcpy(tipos[0], "Camisas");

cantidades[0] = 20;

precios[0] = 150;



strcpy(nombres[1], "Pantalon");

strcpy(tipos[1], "Pantalones");

cantidades[1] = 15;

precios[1] = 200;



strcpy(nombres[2], "Vestido");

strcpy(tipos[2], "Vestidos");

cantidades[2] = 10;

precios[2] = 250;



strcpy(nombres[3], "Sudadera");

strcpy(tipos[3], "Sueteres");

cantidades[3] = 30;

precios[3] = 299;



strcpy(nombres[4], "Pans");

strcpy(tipos[4], "Pantalones");

cantidades[4] = 25;

precios[4] = 499;



strcpy(nombres[5], "Falda");

strcpy(tipos[5], "Faldas");

cantidades[5] = 12;

precios[5] = 190;



strcpy(nombres[6], "Chaqueta");

strcpy(tipos[6], "Sueteres");

cantidades[6] = 8;

precios[6] = 499;



strcpy(nombres[7], "Gorra");

strcpy(tipos[7], "Gorras");

cantidades[7] = 50;

precios[7] = 100;



strcpy(nombres[8], "Bufanda");

strcpy(tipos[8], "Bufandas");

cantidades[8] = 20;

precios[8] = 50;



strcpy(nombres[9], "Traje");

strcpy(tipos[9], "Trajes");

cantidades[9] = 5;

precios[9] = 1200;



strcpy(nombres[10], "Calcetines");

strcpy(tipos[10], "Calcetas");

cantidades[10] = 40;

precios[10] = 50;



strcpy(nombres[11], "Sombrero");

strcpy(tipos[11], "Sombreros");

cantidades[11] = 15;

precios[11] = 300;



strcpy(nombres[12], "Shorts deportivos");

strcpy(tipos[12], "Shorts");

cantidades[12] = 20;

precios[12] = 150;



strcpy(nombres[13], "Blusa");

strcpy(tipos[13], "Blusas");

cantidades[13] = 18;

precios[13] = 120;



strcpy(nombres[14], "Abrigo");

strcpy(tipos[14], "Sueteres");

cantidades[14] = 10;

precios[14] = 230;



strcpy(nombres[15], "Chaleco");

strcpy(tipos[15], "Sueteres");

cantidades[15] = 7;

precios[15] = 320;



strcpy(nombres[16], "Chamarra");

strcpy(tipos[16], "Sueteres");

cantidades[16] = 25;

precios[16] = 320;



strcpy(nombres[17], "Corbata");

strcpy(tipos[17], "Corbatas");

cantidades[17] = 30;

precios[17] = 50;



strcpy(nombres[18], "Camiseta");

strcpy(tipos[18], "Camisetas");

cantidades[18] = 35;

precios[18] = 100;



strcpy(nombres[19], "Top");

strcpy(tipos[19], "Tops");

cantidades[19] = 20;

precios[19] = 200;

}



int main() {

inicializarCatalogo();

int opcion;

do {

cout << "\n Menu:\n";

cout << " 1. Registrar saldo\n";

cout << " 2. Buscar prenda por tipo\n";

cout << " 3. Mostrar inventario\n";

cout << " 4. Contar número de prendas por tipo\n";

cout << " 5. Carrito de compras\n";

cout << " 6. Mostrar carrito y total a pagar\n";

cout << " 7. Compra definitiva\n";

cout << " 8. Consultar saldo\n";

cout << " 0. Salir\n";

cout << " Ingrese su opcion: ";

cin >> opcion;

//system("cls");

switch(opcion) {

case 3: {

system("cls");

cout << "Catálogo de productos:" << endl;

for (int i = 0; i < 20; i++) {

cout << "-----------------------------" << endl;

cout << "Nombre: " << nombres[i] << endl;

cout << "Tipo: " << tipos[i] << endl;

cout << "Cantidad disponible: " << cantidades[i] << endl;

cout << "Precio: " << precios[i] << endl;

system("cls");

}

break;

}

} system("pause");

system("cls");

} while (opcion != 0);

return 0;

}

Respuesta :

Respuesta:

El problema que estás experimentando se debe a que estás limpiando la pantalla (`system("cls");`) dentro del bucle `for` que imprime el inventario. Esto hace que la pantalla se limpie repetidamente en cada iteración del bucle, mostrando solo temporalmente cada producto en lugar de mantenerlos en pantalla. Además, el uso de `system("pause");` y `system("cls");` está provocando que el comportamiento del programa no sea el esperado.

Aquí te dejo una versión corregida del código para el caso 3, y algunas mejoras adicionales para el programa en general:

```cpp

#include <iostream>

#include <cstring>

using namespace std;

char nombres[100][50];

char tipos[100][50];

int cantidades[100];

float precios[100];

int numPrendas = 20; // Corregido a 20 para coincidir con el número de prendas inicializadas

struct Producto {

char nombre[50];

int cantidad;

float precio;

};

Producto carrito[100];

int numProductosCarrito = 0;

float saldo = 0;

void inicializarCatalogo() {

strcpy(nombres[0], "Camisa");

strcpy(tipos[0], "Camisas");

cantidades[0] = 20;

precios[0] = 150;

strcpy(nombres[1], "Pantalon");

strcpy(tipos[1], "Pantalones");

cantidades[1] = 15;

precios[1] = 200;

strcpy(nombres[2], "Vestido");

strcpy(tipos[2], "Vestidos");

cantidades[2] = 10;

precios[2] = 250;

strcpy(nombres[3], "Sudadera");

strcpy(tipos[3], "Sueteres");

cantidades[3] = 30;

precios[3] = 299;

strcpy(nombres[4], "Pans");

strcpy(tipos[4], "Pantalones");

cantidades[4] = 25;

precios[4] = 499;

strcpy(nombres[5], "Falda");

strcpy(tipos[5], "Faldas");

cantidades[5] = 12;

precios[5] = 190;

strcpy(nombres[6], "Chaqueta");

strcpy(tipos[6], "Sueteres");

cantidades[6] = 8;

precios[6] = 499;

strcpy(nombres[7], "Gorra");

strcpy(tipos[7], "Gorras");

cantidades[7] = 50;

precios[7] = 100;

strcpy(nombres[8], "Bufanda");

strcpy(tipos[8], "Bufandas");

cantidades[8] = 20;

precios[8] = 50;

strcpy(nombres[9], "Traje");

strcpy(tipos[9], "Trajes");

cantidades[9] = 5;

precios[9] = 1200;

strcpy(nombres[10], "Calcetines");

strcpy(tipos[10], "Calcetas");

cantidades[10] = 40;

precios[10] = 50;

strcpy(nombres[11], "Sombrero");

strcpy(tipos[11], "Sombreros");

cantidades[11] = 15;

precios[11] = 300;

strcpy(nombres[12], "Shorts deportivos");

strcpy(tipos[12], "Shorts");

cantidades[12] = 20;

precios[12] = 150;

strcpy(nombres[13], "Blusa");

strcpy(tipos[13], "Blusas");

cantidades[13] = 18;

precios[13] = 120;

strcpy(nombres[14], "Abrigo");

strcpy(tipos[14], "Sueteres");

cantidades[14] = 10;

precios[14] = 230;

strcpy(nombres[15], "Chaleco");

strcpy(tipos[15], "Sueteres");

cantidades[15] = 7;

precios[15] = 320;

strcpy(nombres[16], "Chamarra");

strcpy(tipos[16], "Sueteres");

cantidades[16] = 25;

precios[16] = 320;

strcpy(nombres[17], "Corbata");

strcpy(tipos[17], "Corbatas");

cantidades[17] = 30;

precios[17] = 50;

strcpy(nombres[18], "Camiseta");

strcpy(tipos[18], "Camisetas");

cantidades[18] = 35;

precios[18] = 100;

strcpy(nombres[19], "Top");

strcpy(tipos[19], "Tops");

cantidades[19] = 20;

precios[19] = 200;

}

void mostrarInventario() {

cout << "Catálogo de productos:" << endl;

for (int i = 0; i < numPrendas; i++) {

cout << "-----------------------------" << endl;

cout << "Nombre: " << nombres[i] << endl;

cout << "Tipo: " << tipos[i] << endl;

cout << "Cantidad disponible: " << cantidades[i] << endl;

cout << "Precio: " << precios[i] << endl;

}

}

int main() {

inicializarCatalogo();

int opcion;

do {

cout << "\n Menu:\n";

cout << " 1. Registrar saldo\n";

cout << " 2. Buscar prenda por tipo\n";

cout << " 3. Mostrar inventario\n";

cout << " 4. Contar número de prendas por tipo\n";

cout << " 5. Carrito de compras\n";

cout << " 6. Mostrar carrito y total a pagar\n";

cout << " 7. Compra definitiva\n";

cout << " 8. Consultar saldo\n";

cout << " 0. Salir\n";

cout << " Ingrese su opcion: ";

cin >> opcion;

switch (opcion) {

case 3:

system("cls");

mostrarInventario();

break;

default:

break;

}

system("pause"); // Espera a que el usuario presione Enter

system("cls"); // Limpia la pantalla

} while (opcion != 0);

return 0;

}

```

### Explicación de las correcciones:

1. **Función `mostrarInventario()`**: Se creó esta función separada para mostrar el inventario completo. Esta función imprime todos los productos una sola vez sin necesidad de un bucle `for` dentro del bucle principal del menú.

2. **Uso de `system("pause")` y `system("cls")`**: Se movieron fuera del `switch` para evitar limpiezas innecesarias de la pantalla y esperas en cada iteración del menú.

3. **Corrección del número de prendas (`numPrendas`)**: Se ajustó para coincidir con el número real de prendas inicializadas (20).

Con estas correcciones, el programa debería comportarse correctamente y mostrar el inventario solo cuando se selecciona la opción 3 del menú.