Structs not fed

-1

Dear C programmers, good evening,

I ask them for help in the following case: I want to feed an array of structs to each interaction in a row of a file, the problem is that although I can read the file line, I can not send the data to the struct .

Follow the code:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <conio.h>
#include <locale.h>
#define TAM_VEICULOS 100
#define TAM_RESERVAS 100
#define TAM_DEVOLUCOES 100


const int TAM_BUFFER = 660;

//char    TAM_BUFFER[660];
char    url_veiculos[]   = "veiculos.csv";
FILE    *arq_veiculos;
char    url_reservas[]   = "reservas.csv";
FILE    *arq_reservas;
//char  url_devolucoes[] = "devolucoes.csv";

int opc;

void menu();

int     tam_arquivo_veiculos = 0, tam_arquivo_reservas = 0, tam_arquivo_devolucoes = 0, count = 0;

char    linha_veiculos[660];
char    linha_resevas[660];
char    linha_devolucoes[660];

char    marca_disponivel[15];
char    modelo_disponivel[15];
char    placa_disponivel[15];
char    valorDiaria_disponivel[8];

char    marca_nao_disponivel[15];
char    modelo_nao_disponivel[15];
char    placa_nao_disponivel[15];
char    valorDiaria_nao_disponivel[8];

// struct do arquivo veiculos.cvs
typedef struct {
    char    codigo[15];
    char    marca[15];
    char    modelo[15];
    char    placa[15];
    char    valorDiaria[8]; 
} Veiculos;

// array do arquivo de veicuos
Veiculos veiculos[TAM_VEICULOS];

// struct do arquivo reservas.cvs
typedef struct {
    char    reserva_ticket[10];
    char    reserva_cpf[12];
    char    reserva_bonus[2];
    char    reserva_placa[9];
    char    reserva_data_contrato[11];
    char    reserva_hora_contrato[6];
    char    reserva_data_devolucao[11];
    char    reserva_hora_devolucao[6];
    char    reserva_preco_contrato[7];
    char    reserva_preco_devolucao[7];
    char    reserva_desconto_um[7];
    char    reserva_desconto_dois[7];
} Reservas;

Reservas reservas[TAM_RESERVAS];

void preenche_array_veiculos() {
    arq_veiculos = fopen(url_veiculos, "r");
    if(arq_veiculos == NULL) {
        printf("Erro, nao foi possivel abrir o arquivo veiculos\n");
    } else {
        fflush(stdin);
        while (fgets(linha_veiculos, TAM_BUFFER, arq_veiculos)) {
            fscanf(arq_veiculos, "%[^;],%[^;],%[^;],%[^;]\n", veiculos[tam_arquivo_veiculos].codigo, veiculos[tam_arquivo_veiculos].marca, 
            veiculos[tam_arquivo_veiculos].modelo, veiculos[tam_arquivo_veiculos].placa, veiculos[tam_arquivo_veiculos].valorDiaria);

            printf("Linha veículos: %s\n", linha_veiculos);

            ++tam_arquivo_veiculos;

            printf("Tamanho do arquivo veiculos: %d\n", tam_arquivo_veiculos);
        }
    }
}

void preenche_array_reservas () {
    arq_reservas   = fopen(url_reservas, "r");
    if(arq_reservas == NULL) { // etapa 2 - listar as reservas linha a linha
        printf("Erro, nao foi possivel abrir o arquivo reservas\n");
    } else {
        fflush(stdin);
        while (fgets(linha_resevas, TAM_BUFFER, arq_reservas)) {
            fscanf(arq_reservas, "%[^;],%[^;],%[^;],%[^;],[^;],%[^;],%[^;],%[^;],%[^;],%[^;]\n", reservas[tam_arquivo_reservas].reserva_ticket, 
            reservas[tam_arquivo_reservas].reserva_cpf, reservas[tam_arquivo_reservas].reserva_bonus, reservas[tam_arquivo_reservas].reserva_placa, 
            reservas[tam_arquivo_reservas].reserva_data_contrato, reservas[tam_arquivo_reservas].reserva_data_devolucao,
            reservas[tam_arquivo_reservas].reserva_preco_contrato, reservas[tam_arquivo_reservas].reserva_preco_devolucao,
            reservas[tam_arquivo_reservas].reserva_desconto_um, reservas[tam_arquivo_reservas].reserva_desconto_dois);

            ++tam_arquivo_reservas;

            printf("Tamanho do arquivo reservas: %d\n", tam_arquivo_reservas);
        }
    }
}

void fechar_arquivos () {
    //fclose(arq_devolucoes);
    fclose(arq_reservas);
    fclose(arq_veiculos);
}

void lista_veiculos () {
    printf("Tamanho do arquivo Veiculos: %d ", &tam_arquivo_veiculos);

    for (count = 0; count <= tam_arquivo_veiculos; count++) {
        printf("Marca: %s\n", veiculos[count].marca);
        printf("Placa: %s\n", veiculos[count].placa);
    }
}

executa(opc) {
    setlocale(LC_ALL, "Portuguese");
    switch(opc) {
        default:
        preenche_array_veiculos();
        preenche_array_reservas ();
        fechar_arquivos();
        lista_veiculos();
    }
}

Thank you in advance.

    
asked by anonymous 15.11.2017 / 02:38

2 answers

0

Resolved.

The problem was in the separation of the fields, where a comma was used, the semicolon being correct.

This

"%[^;],%[^;],%[^;],%[^;]\n"

Fixed for this:

"%[^;];%[^;];%[^;];%[^;]\n"

Thanks to everyone who tried to help.

    
15.11.2017 / 14:37
-1

People, I almost got around to it.

Instead of doing this

while (fgets(linha_veiculos, TAM_BUFFER, arq_veiculos)) {
            fscanf(arq_veiculos, ...

I did this:

while (fgets(linha_veiculos, TAM_BUFFER, arq_veiculos)) {
            sscanf(linha_veiculos, ...

The problem is that it only assigns value to the variable in the first field of the file, the other fields do not assign.

    
15.11.2017 / 03:16