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.