Desenvolva um programa computacional que solicite ao usuário nome completo e CPF de 3 pessoas. Como é um programa com dados pessoais, esse programa deve ser capaz de:
a. Gravar um arquivo com nome: “Dados_Pessoais.bin”, em binário, com todos os dados fornecidos.
b. Leia o arquivo binário, quando requisitado pelo usuário do programa, apresentando os nomes e CPFs na tela.
a. Gravar um arquivo com nome: “Dados_Pessoais.bin”, em binário, com todos os dados fornecidos.
b. Leia o arquivo binário, quando requisitado pelo usuário do programa, apresentando os nomes e CPFs na tela.
Passo 1
O enunciado pede um programa que gerencie dados pessoais (nome completo e CPF) de três pessoas, guardando tudo num arquivo binário chamado “Dados_Pessoais.bin” e permitindo, a partir de uma opção do usuário, gravar novos dados ou ler e exibir os dados já gravados. Para resolver isso em C, vamos usar uma
struct
para armazenar cada pessoa, funções de entrada e saída de arquivo em modo binário (fwrite
e fread
) e um menu simples em main
.Passo 2
Definimos uma estrutura para guardar cada registro de pessoa, com espaço fixo para nome e para CPF. Usamos arrays de
char
para simplificar a leitura com fgets
e garantir tamanho máximo:typedef struct {
char nome[100];
char cpf[15];
} Pessoa;
Passo 3
Implementamos a função
gravarDados()
que abre o arquivo em modo binário de escrita ("wb"
), solicita ao usuário os dados de três pessoas (usando fgets
e retirando o \n
final) e faz fwrite
de cada registro. Ao final, fecha o arquivo.void gravarDados() {
FILE *fp = fopen("Dados_Pessoais.bin", "wb");
if (!fp) {
printf("Erro ao abrir o arquivo para escrita.\n");
return;
}
Pessoa p;
for (int i = 0; i < 3; i++) {
printf("Pessoa %d\n", i+1);
printf(" Nome completo: ");
fgets(p.nome, sizeof(p.nome), stdin);
p.nome[strcspn(p.nome, "\n")] = '\0';
printf(" CPF (somente dígitos): ");
fgets(p.cpf, sizeof(p.cpf), stdin);
p.cpf[strcspn(p.cpf, "\n")] = '\0';
fwrite(&p, sizeof(Pessoa), 1, fp);
}
fclose(fp);
printf("Dados gravados em Dados_Pessoais.bin\n");
}
Passo 4
Implementamos a função
lerDados()
que abre o mesmo arquivo em modo binário de leitura ("rb"
), faz fread
em laço até o fim de arquivo, e imprime cada registro lido. Ao final, fecha o arquivo.void lerDados() {
FILE *fp = fopen("Dados_Pessoais.bin", "rb");
if (!fp) {
printf("Erro ao abrir o arquivo para leitura ou o arquivo não existe.\n");
return;
}
Pessoa p;
int i = 1;
while (fread(&p, sizeof(Pessoa), 1, fp) == 1) {
printf("Registro %d\n", i++);
printf(" Nome: %s\n", p.nome);
printf(" CPF: %s\n", p.cpf);
}
fclose(fp);
}
Passo 5
No
main()
, apresentamos um menu que pede ao usuário escolher entre gravar dados, ler dados ou sair. Usamos um switch
para chamar gravarDados()
ou lerDados()
conforme a escolha, e repetimos até o usuário optar por sair.int main() {
int opcao;
do {
printf("\nMenu:\n");
printf("1. Gravar dados\n");
printf("2. Ler dados\n");
printf("3. Sair\n");
printf("Escolha uma opção: ");
if (scanf("%d%*c", &opcao) != 1) {
printf("Entrada inválida.\n");
return 1;
}
switch (opcao) {
case 1:
gravarDados();
break;
case 2:
lerDados();
break;
case 3:
printf("Encerrando.\n");
break;
default:
printf("Opção inválida.\n");
}
} while (opcao != 3);
return 0;
}
Resposta
#include <stdio.h>
#include <string.h>
typedef struct {
char nome[100];
char cpf[15];
} Pessoa;
void gravarDados() {
FILE *fp = fopen("Dados_Pessoais.bin", "wb");
if (!fp) {
printf("Erro ao abrir o arquivo para escrita.\n");
return;
}
Pessoa p;
for (int i = 0; i < 3; i++) {
printf("Pessoa %d\n", i+1);
printf(" Nome completo: ");
fgets(p.nome, sizeof(p.nome), stdin);
p.nome[strcspn(p.nome, "\n")] = '\0';
printf(" CPF (somente dígitos): ");
fgets(p.cpf, sizeof(p.cpf), stdin);
p.cpf[strcspn(p.cpf, "\n")] = '\0';
fwrite(&p, sizeof(Pessoa), 1, fp);
}
fclose(fp);
printf("Dados gravados em Dados_Pessoais.bin\n");
}
void lerDados() {
FILE *fp = fopen("Dados_Pessoais.bin", "rb");
if (!fp) {
printf("Erro ao abrir o arquivo para leitura ou o arquivo não existe.\n");
return;
}
Pessoa p;
int i = 1;
while (fread(&p, sizeof(Pessoa), 1, fp) == 1) {
printf("Registro %d\n", i++);
printf(" Nome: %s\n", p.nome);
printf(" CPF: %s\n", p.cpf);
}
fclose(fp);
}
int main() {
int opcao;
do {
printf("\nMenu:\n");
printf("1. Gravar dados\n");
printf("2. Ler dados\n");
printf("3. Sair\n");
printf("Escolha uma opção: ");
if (scanf("%d%*c", &opcao) != 1) {
printf("Entrada inválida.\n");
return 1;
}
switch (opcao) {
case 1:
gravarDados();
break;
case 2:
lerDados();
break;
case 3:
printf("Encerrando.\n");
break;
default:
printf("Opção inválida.\n");
}
} while (opcao != 3);
return 0;
}