forked from kennedyufersa/scriptLab
-
Notifications
You must be signed in to change notification settings - Fork 0
/
lerArquivos.cpp
71 lines (59 loc) · 1.91 KB
/
lerArquivos.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
#ifndef LERARQUIVOS_CPP
#define LERARQUIVOS_CPP
#include <stdio.h> // Ler e Inserir dados
#include <stdlib.h> // Operações de prompt
#include <string> // Auxiliar com caracteres
#include "estrutura.cpp" // Estrutura da cidade
#include "grafo.cpp" // TAD que contém as funções do grafo
// Variável auxiliar para a leitura do arquivo
#define MAX 167
// Declarando as funções
Cidade *getCidades(char *arquivo);
void printCidades(Cidade *dado);
/**
* @brief Lê o arquivo passado como parametro e retorna uma estrutura Cidade
* @param arquivo
* @return cidade*
*/
Cidade *getCidades(char *arquivo){
// Abre o arquivo
FILE *f = fopen(arquivo, "r");
// Aloca o espaço para todas as cidades
Cidade *dados = (Cidade*) malloc(MAX*sizeof(Cidade));
// Informa se o arquivo não for aberto
if (!f) {
perror("\nErro na Abertura do Arquivo!\n");
return NULL;
}
// Variáveis auxiliares para a leitura do arquivo
unsigned int id;
char *uf;
char *cid;
latitude la;
longitude lo;
int i = 0;
// Percore o arquivo salvando as informações
while (!feof(f)) {
uf = (char *)malloc(2 * sizeof(char));
cid = (char *)malloc(40 * sizeof(char));
fscanf(f, "%d %f %f %s", &id, &la, &lo, uf);
fgets(cid, 40 * sizeof(char), f);
dados[i].id = id; // ID da cidade
dados[i].estado = uf; // Estado
dados[i].cidade = cid; // Cidade
dados[i].la = la; // Latitude
dados[i].lo = lo; // Longitude
i++;
}
return dados; // Retorna a estrutura
}
/**
* Função que imprime as cidades lidas no arquivo
* @param dado
*/
void printCidades(Cidade *dado){
for (int i = 0; i < MAX; i++) {
printf(" %d -> %.2f %.2f %s %s \n\n\n", dado[i].id, dado[i].la, dado[i].lo, dado[i].estado, dado[i].cidade);
}
}
#endif