How not to transcribe data in the Tudios visual. In C

Asked

Viewed 35 times

-1

I need to make a program of a cafeteria that the user needs to enter the item they want and quantity, and at the end of the program everything he bought is shown, its quantities and the total amount of the purchase.

I need to make a specific code that the user types (3,3,2) in the program that would be selected items and (2,0,7) which would be the amount of each of these items, but one of the items repeats. the item of n° 3 put in the amount 0 and at the end of the program the data is overwritten since the same item was chosen again but in quantity 0. How can I avoid this problem so that at the end the item will have the right amount that would be 2 and not 0

#include <stdio.h>
#include <stdlib.h>
#include <locale.h>
#include <string.h>
#define TOTAL_PRODUTOS 7

int main()
{
    setlocale(LC_ALL, "Portuguese");

    float  total[TOTAL_PRODUTOS], preco_final= 0;
    int cont, op, qtd[TOTAL_PRODUTOS];
    char produtos[TOTAL_PRODUTOS] [30];
    
    strcpy_s(produtos[0], "Cachorro-quente");
    strcpy_s(produtos[1], "X-Salada");
    strcpy_s(produtos[2], "X-Bacon");
    strcpy_s(produtos[3], "Misto");
    strcpy_s(produtos[4], "Salada");
    strcpy_s(produtos[5], "Água");
    strcpy_s(produtos[6], "Refrigerante");


        printf("Lanchonete LTD\n");
    printf("-----------------------------------------------\n");
    printf("Item | Produto         | Código | Preço unitário |\n");
    printf("1    | Cachorro Quente | 100    | 5,00           |\n");
    printf("2    | X-Salada        | 101    | 8,79           |\n");
    printf("3    | X-Bacon         | 102    | 9,99           |\n");
    printf("4    | Misto           | 103    | 6,89           |\n");
    printf("5    | Salada          | 104    | 4,80           |\n");
    printf("6    | Água            | 105    | 3,49           |\n");
    printf("7    | Refrigerante    | 106    | 4,99           |\n");
    printf("--------------------------------------------------\n");

    printf("Digite o número do item desejado:\n");
    scanf_s("%d", &op);

    
    
    
    
    while ((op <= 7) && (op > 0))
    {
    
        switch (op)
        {
            while ( qtd >0 )
        case 1: // Cachorro-quente

            printf("Você escolheu o item:\n");
            puts(produtos[0]);
            printf("Digite a quantidade desse item:\n");
            scanf_s("%i", &qtd [0]);
            total[0] = qtd[0] * 5.00;
                break;
        case 2: // X - salada
            printf("Você escolheu o item:\n");
            puts(produtos[1]);
            printf("Digite a quantidade desse item:\n");
            scanf_s("%i", &qtd[1]);
            total[1] = qtd[1] * 8.79;
            break;
        case 3: // X -bacon 
            printf("Você escolheu o item:\n");
            puts(produtos[2]);
            printf("Digite a quantidade desse item:\n");
            scanf_s("%i", &qtd[2]);
            total[2] = qtd[2] * 9.99;
            break;
        case 4: // Misto
            printf("Você escolheu o item:\n");
            puts(produtos[3]);
            printf("Digite a quantidade desse item:\n");
            scanf_s("%i", &qtd[3]);
            total[3] = qtd[3] * 6.89;
            break;
        case 5: // Salada
            printf("Você escolheu o item:\n");
            puts(produtos[4]);
            printf("Digite a quantidade desse item:\n");
            scanf_s("%i", &qtd[4]);
            total[4] = qtd[4] * 4.80;
            break;
        case 6: // Água 
            printf("Você escolheu o item:\n");
            puts(produtos[5]);
            printf("Digite a quantidade desse item:\n");
            scanf_s("%i", &qtd[5]);
            total[5] = qtd[5] * 3.49;
            break;
        case 7: // refrigerante
            printf("Você escolheu o item:\n");
            puts(produtos[6]);
            printf("Digite a quantidade desse item:\n");
            scanf_s("%i", &qtd[6]);
            total[6] = qtd[6] * 4.99;
            break;
            

        }


        
        
        printf("Digite o número do item desejado:\n");
        scanf_s("%d", &op);
            
    }
    
    for ( int i = 0; i < TOTAL_PRODUTOS;i++)
    {
        if (qtd[i] >= 0)
        {
            puts(produtos[i]);
            printf("Quantidade do item: %i || Total a pagar do item: %.2f\n",qtd[i], total [i]);
            preco_final += total[i];
        }

    }

    printf("Total do pedido:%.3f", preco_final);



    system; "pause";
    return 0;
};

1 answer

0

That one while ( qtd >0 ) within a switch but out of a case It doesn’t exist, it’s very wrong. Another problem is that you’re making it very confusing for what the quantity variable is for, is it a shopping counter for a product or is it part of the cashier? It would be better something like:

#include <stdio.h>
#include <locale.h>
#include <stdbool.h>
#define TOTAL_PRODUTOS 7

int menu_principal()
{
    int op = -1;
    while(op < 0 || op > 7)
    {
        printf("Lanchonete LTD\n");
        printf("-----------------------------------------------\n");
        printf("Item | Produto         | Código | Preço unitário |\n");
        printf("1    | Cachorro Quente | 100    | 5,00           |\n");
        printf("2    | X-Salada        | 101    | 8,79           |\n");
        printf("3    | X-Bacon         | 102    | 9,99           |\n");
        printf("4    | Misto           | 103    | 6,89           |\n");
        printf("5    | Salada          | 104    | 4,80           |\n");
        printf("6    | Água            | 105    | 3,49           |\n");
        printf("7    | Refrigerante    | 106    | 4,99           |\n");
        printf("--------------------------------------------------\n");
        printf("Digite o número do item desejado:\n");
        scanf("%d", &op);
    }
    return op;
}

bool sub_menu(int opcao, int qtd[TOTAL_PRODUTOS], char produtos[TOTAL_PRODUTOS][30])
{
    if(opcao < 1)
        return false;

    int id_produto = opcao-1;
    int qtd_produto = 0;
    printf("Você escolheu o item:\n");
    puts(produtos[id_produto]);
    printf("Digite a quantidade desse item:\n");
    scanf("%i", &qtd_produto);
    qtd[id_produto] = qtd[id_produto] + qtd_produto;
    return true;
}

int main()
{
    setlocale(LC_ALL, "Portuguese");

    float preco_final = 0;
    float precos[TOTAL_PRODUTOS] = {
        5.0, 8.79, 9.99, 6.89, 4.8, 3.49, 4.99
    };

    int qtd[TOTAL_PRODUTOS];
    for(int i=0; i<TOTAL_PRODUTOS; i++)
        qtd[i] = 0;

    char produtos[TOTAL_PRODUTOS][30] = {
        "Cachorro-quente",
        "X-Salada",
        "X-Bacon",
        "Misto",
        "Salada",
        "Água",
        "Refrigerante"
    };

    while(sub_menu(menu_principal(), qtd, produtos));

    for(int i=0; i<TOTAL_PRODUTOS; i++)
    {
        if (qtd[i] > 0)
        {
            puts(produtos[i]);
            printf("Quantidade do item: %i || Total a pagar do item: %.2f\n",
                    qtd[i], qtd[i]*precos[i]);
            preco_final += qtd[i]*precos[i];
        }
    }

    printf("Total do pedido:%.3f", preco_final);

    return 0;
}

Browser other questions tagged

You are not signed in. Login or sign up in order to post.