Aqui fica um pequeno exercício que fiz onde englobo a aplicação de estruturas e ficheiros em C, não é nada de outro mundo e são conceitos simples de entender.

Aqui fica o código:

#include <stdio .h>
#include <stdlib .h>
 
#define N 100
 
struct data
{
    int dia;
    int mes;
    int ano;
};
 
struct localizacao
{
    float latitude;
    float longitude;
};
 
struct local
{
    char nome[100];
    struct data quando;
    struct localizacao onde;
};
 
void main()
{
    FILE *saida, *entrada;
    int quantos, i;
 
    saida = fopen("saida.txt", "w");
 
    struct local locais[20];
 
    printf("Quantos Locais? ");
    scanf("%d", &quantos);
 
    for(i = 0; i < quantos && i < 20; i++)
    {
        printf("Nome = ");
        fflush(stdin);
        gets(locais[i].nome);
        printf("Data(Dia/Mes/Ano) = ");
        scanf("%d/%d/%d", &locais[i].quando.dia, &locais[i].quando.mes, &locais[i].quando.ano);
 
        printf("Latitude = ");
        scanf("%f", &locais[i].onde.latitude);
 
        printf("Longitude = ");
        scanf("%f", &locais[i].onde.longitude);
    }
 
    if(saida == NULL)
    {
        perror("Erro na Abertura do Ficheiro!");
        system("PAUSE");
    }
    else
    {
        for(i = 0; i < quantos; i++)
        {
            fprintf(saida,"%d/%d/%d|%s|%f:%f\n", locais[i].quando.dia, locais[i].quando.mes, locais[i].quando.ano, locais[i].nome, locais[i].onde.latitude, locais[i].onde.longitude);
        }
 
        fclose(saida);
    }
 
    entrada =  fopen("saida.txt", "r");
 
    if(entrada == NULL)
    {
        perror("Erro na Abertura do Ficheiro!");
        system("PAUSE");
    }
    else
    {
        i = 0;
 
        while(!feof(entrada))
        {
            fscanf("%d/%d/%d|%s|%f:%f\n", &locais[i].quando.dia, &locais[i].quando.mes, &locais[i].quando.ano, &locais[i].nome, &locais[i].onde.latitude, &locais[i].onde.longitude);
            printf(entrada,"%d/%d/%d|%[^|]|%f:%f\n", locais[i].quando.dia, locais[i].quando.mes, locais[i].quando.ano, locais[i].nome, locais[i].onde.latitude, locais[i].onde.longitude);
 
            i++;
        }
 
        fclose(entrada);
    }
}

O código que apresento está funcional, mas certamente haverá métodos mais elegantes de chegar ao mesmo resultado.

Share

Leave a Reply