Last active
November 9, 2020 13:42
-
-
Save gregori/4a97111be274e0d6b6a4f920cba88119 to your computer and use it in GitHub Desktop.
Exemplo de agenda com gravação e leitura de arquivo binário, em C
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include <stdio.h> | |
#include <stdlib.h> | |
#include <ctype.h> | |
#define clear() puts("\x1B[2J") | |
#define MAX_AGENDA 50 | |
typedef struct { | |
char nome[50]; | |
int idade; | |
} registro; | |
void imprimeMenu() { | |
puts("Agenda eletronica"); | |
puts("\n"); | |
puts("1 - Novo Contato"); | |
puts("2 - Lista Contatos"); | |
puts("S - Sair"); | |
puts("\n"); | |
printf("Escolha uma opção: "); | |
} | |
void criaContato(registro r[], int *tamanho) { | |
int indice = *tamanho; | |
printf("Entre o nome do contato: "); | |
scanf("%s", r[indice].nome); | |
printf("Entre a idade do contato: "); | |
scanf("%d", &r[indice].idade); | |
*tamanho = *tamanho + 1; | |
} | |
void listaContatos(registro r[], int *tamanho) { | |
clear(); | |
int tam = *tamanho; | |
puts("Lista de Contatos\n"); | |
puts("Nome\tIdade\n"); | |
for (int i = 0; i < tam; i++) { | |
printf("%s\t%d\n", r[i].nome, r[i].idade); | |
} | |
} | |
void processaOpcao(int opcao, registro r[], int *tamanho) { | |
switch(opcao) { | |
case '1': | |
criaContato(r, tamanho); | |
break; | |
case '2': | |
listaContatos(r, tamanho); | |
break; | |
case 's': | |
puts("Encerrando...\n"); | |
break; | |
default: | |
puts("Opção inválida!\n"); | |
break; | |
} | |
} | |
int main() { | |
FILE *arquivo; | |
char *nome_arquivo = "agenda.bin"; | |
char op; | |
registro agenda[MAX_AGENDA]; | |
int tamanho = 0; | |
// lê o arquivo e carrega seu conteúdo para o vetor "agenda", se existir | |
arquivo = fopen(nome_arquivo, "rb"); | |
if (arquivo != NULL) { | |
fread(&tamanho, sizeof(int), 1, arquivo); | |
fread(agenda, sizeof(registro), MAX_AGENDA, arquivo); | |
fclose(arquivo); | |
} else { | |
puts("Sem arquivo!"); | |
} | |
do { | |
clear(); // limpa a tela - multiplataforma | |
imprimeMenu(); | |
op = tolower(getchar()); | |
processaOpcao(op, agenda, &tamanho); | |
fflush(stdin); // limpa o buffer do teclado (para remover lixos) | |
getchar(); | |
getchar(); | |
} while (op != 's'); | |
// grava o arquivo, com o conteúdo do vetor, ao sair | |
arquivo = fopen(nome_arquivo, "wb"); | |
fwrite(&tamanho, sizeof(int), 1, arquivo); | |
fwrite(agenda, sizeof(registro), MAX_AGENDA, arquivo); | |
fclose(arquivo); | |
return 0; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment