1
resposta

[Bug] Erro no codigo está gerando txt errado (C)

Olá,

Criei esse código para um projeto da faculdade que gera um arquivo txt caso o usuário opte por fechar o caixa. Mas, o txt está gerando com linhas na mesma sequencias dos registros de vendas, e não tabulado como a string espera: "Codigo: 1, Nome: arroz, Valor: R$ 4.00, Peso: 2.0Codigo: 3, Nome: ovo, Valor: R$ 18.00, Peso: 9.00Codigo: 3, Nome: abacate, Valor: R$ 24.00, Peso:" enquanto deveria ser: Codigo: 1, Nome: arroz, Valor: R$ 4.00, Peso: 2.0 Codigo: 3, Nome: ovo, Valor: R$ 18.00, Peso: 9.00 Codigo: 3, Nome: abacate, Valor: R$ 24.00, Peso: 1

Obs.: Inclui a parte do código que somente faz o caixa. Por isso, pode parecer incompleto.

O codigo é:

#include <stdio.h> #include <stdlib.h>

int main(){{

int numero; char nomeproduto[50]; // vetor para armazenar o nome do produto int codigoproduto; float valorproduto; float pesoproduto; FILE *file; // ponteiro para criacao do arquivo do fechamento do caixa

// Variáveis para armazenar as vendas
char vendas[50][50]; // array para armazenar as vendas 
int index = 0; // indice para controlar a quantidade de vendas registradas

do {
    printf("\nOPCOES DISPONIVEIS NO PDV.\n");
    printf("****************************************\n");
    printf("1. Registrar venda\n");
    printf("2. Realizar fechamento do caixa\n");
    printf("3. Sair do PDV\n");
    printf("Digite a opcao desejada: ");
    scanf("%d", &numero);

    switch (numero) {
        case 1: {
            // estrutura de repeticao para registrar vendas até o usuário decidir parar
            int continuarVenda = 1;  // varivel para controlar se o usuário quer continuar vendendo

            while (continuarVenda) {
                printf("Digite o codigo do produto: ");
                scanf("%d", &codigoproduto);
                printf("Digite o nome do produto: ");
                scanf("%s", nomeproduto);  
                printf("Digite o valor do produto: ");
                scanf("%f", &valorproduto);
                printf("Digite o kg do produto: ");
                scanf("%f", &pesoproduto);//bloco de codigo que solicita as informacoes do produto
                
                float valorTotal = valorproduto * pesoproduto;
                printf("O valor total do produto e: R$ %.2f. \n", valorTotal);

                //string que armazena as vendas informadas 
                snprintf(vendas[index], sizeof(vendas[index]), "Codigo: %d, Nome: %s, Valor: R$ %.2f, Peso: %.2fkg\n", codigoproduto, nomeproduto, valorTotal, pesoproduto);
                index++; //incremento que passa para a proxima venda

                
                printf("Deseja registrar outra venda? (1 - Sim, 0 - Nao): ");// pergunta ao usuario se vai continuar as vendas
                scanf("%d", &continuarVenda);
            }
            break; 
        }

        case 2: {
            // abre o arquivo para gravar as vendas
            file = fopen("vendas.txt", "w"); // cria o arquivo com os registro das vendas
            if (file == NULL) {
                printf("Erro ao abrir o arquivo!\n");
                break; //condicao caso de erro ao abrir o arquivo
            }

            for (int i = 0; i < index; i++) {
                fprintf(file, "%s", vendas[i]); //estrutura de repeticao for que usa o incremento para gravar as vendas dentro do arquivo;
            }

            fclose(file);
            printf("Fechamento do caixa realizado com sucesso! Vendas registradas em vendas.txt.\n");
            break; 
        }

        case 3:
            printf("Saindo do PDV...\n");
            break;

        default:
            printf("Opcao invalida! Por favor, escolha uma opcao entre 1 e 3.\n");
            break;
    }
} while (numero != 3);  //estrutura que finaliza a estrutura de repeticao enquanto o usuario nao apertar 3

printf("Obrigado pela compra!\n");
return 0; 

} }

1 resposta

Oi Jéssica, pelo que entendi, o seu vetor não é grande o suficiente para armazenar a frase inteira, ai está apagando parte da sua string.

Insira aqui a descrição dessa imagem para ajudar na acessibilidadeInsira aqui a descrição dessa imagem para ajudar na acessibilidade

Tenta aumentar o tamanho da sua matriz nas colunas.

/*char vendas[50][50]; // array para armazenar as vendas */
char vendas[50][70]; // array para armazenar as vendas