C, exercício de análise
assunto: um vetor dinâmico de estruturas
pergunta: lidar com um vetor (vector) dinâmico de estruturas, e ficheiro binário
#include <stdio.h> #include <stdlib.h> #include <string.h> typedef struct cliente pessoa; struct cliente { char nome[200]; // Nome do cliente char morada[200]; // Morada do cliente int nConta; // Número de conta int montante; // Saldo da conta }; void guarda_dados_binario(pessoa * exame, int totalC) { FILE *f; f = fopen("bancoBinario.bin", "wb"); if (f == NULL) { printf("\n erro no acesso ao ficheiro \n"); return; } else { fwrite(&totalC, sizeof (int), 1, f); fwrite(exame, sizeof (pessoa), totalC, f); fclose(f); } } pessoa * ler_dados_binario(int totalC) { FILE *f; pessoa * auxc; f = fopen("bancoBinario.bin", "rb"); if (f == NULL) { printf("\n erro no acesso ao ficheiro \n"); return 0; } else { fread(&totalC, sizeof (int), 1, f); auxc = malloc(sizeof (pessoa) * totalC); fread(auxc, sizeof (pessoa), totalC, f); } fclose(f); return auxc; } void mostra_todos(pessoa * exame, int totalC) { if (totalC == 0) { printf("nao existem clientes\n"); } else { printf("\ntotal: %d", totalC); for (int i = 0; i < totalC; i++) { printf("\n%s", exame[i].nome); } } } pessoa * adiciona_pessoa(int * auxtotalC) { int auxTotal = 0, totalC = 0; pessoa * auxc; printf("\nquantas pessoas quer adicionar?"); scanf("%d", &totalC); * auxtotalC = totalC; auxc = malloc(sizeof (pessoa) * totalC); do { printf("Qual o nome?"); scanf(" %99[^\n]", auxc[auxTotal].nome); printf("Qual a morada?"); scanf(" %99[^\n]", auxc[auxTotal].morada); printf("Qual o numero da conta?"); scanf("%d", &(auxc[auxTotal].nConta)); printf("Qual o montante?"); scanf("%d", &(auxc[auxTotal].montante)); auxTotal++; } while (auxTotal < totalC); return auxc; } int main(int argc, char** argv) { pessoa * listaPessoas = NULL; // um vetor dinâmico de estruturas pessoa * listaPessoas2 = NULL; // um vetor dinâmico de estruturas, para testes int total = 0; listaPessoas = adiciona_pessoa(&total); mostra_todos(listaPessoas, total); guarda_dados_binario(listaPessoas, total); //auxliar/verificar/para testes listaPessoas2 = ler_dados_binario(total); mostra_todos(listaPessoas2, total); return (EXIT_SUCCESS); }
Tags : C, Learn C, linguagem C
0 thoughts on “C, exercício de análise”