Faça um programa que receba como entrada o ano corrente e o nome de dois arquivos: um de entrada e outro de saída. Cada linha do arquivo de entrada contém o nome de uma pessoa (ocupando 40 caracteres) e o seu ano de nascimento. O programa deverá ler o arquivo de entrada e gerar um arquivo de saída onde aparece o nome da pessoa seguida por uma string que representa a sua idade.
- Se a idade for menor do que 18 anos, escreva “menor de idade”
- Se a idade for maior do que 18 anos, escreva “maior de idade”
- Se a idade for igual a 18 anos, escreva “entrando na maior idade”
Passo 1
Receber como entrada o ano corrente e os nomes dos arquivos de entrada e saída.
Passo 2
Abrir o arquivo de entrada em modo leitura e o de saída em modo escrita, verificando erros.
Passo 3
Para cada linha do arquivo de entrada: ler os primeiros 40 caracteres como nome (incluindo espaços) e em seguida o ano de nascimento. Calcular a idade subtraindo o ano de nascimento do ano corrente. Comparar a idade com 18: se menor, preparar a string “menor de idade”; se igual, “entrando na maior idade”; se maior, “maior de idade”.
Passo 4
Escrever no arquivo de saída o nome da pessoa seguido da string de categorização. Repetir até o fim do arquivo de entrada e, por fim, fechar ambos os arquivos.
Resposta
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stdlib.h>
#include <string.h>
int main() {
int ano_corrente;
char nome_arquivo_entrada[100];
char nome_arquivo_saida[100];
int ano_corrente;
char nome_arquivo_entrada[100];
char nome_arquivo_saida[100];
// 1. Ler ano corrente e nomes dos arquivos
if (scanf("%d %99s %99s", &ano_corrente,
nome_arquivo_entrada, nome_arquivo_saida) != 3) {
fprintf(stderr, "Erro na leitura dos parâmetros de entrada.\n");
return 1;
}
// 2. Abrir arquivos
FILE *fp_in = fopen(nome_arquivo_entrada, "r");
if (!fp_in) {
perror("Erro ao abrir arquivo de entrada");
return 1;
}
FILE *fp_out = fopen(nome_arquivo_saida, "w");
if (!fp_out) {
perror("Erro ao abrir arquivo de saída");
fclose(fp_in);
return 1;
}
// 3. Processar cada linha
char nome[41];
int ano_nasc;
while (1) {
// ler exatamente 40 caracteres de nome e o ano de nascimento
int lidos = fscanf(fp_in, "%40c%d", nome, &ano_nasc);
if (lidos == EOF || lidos != 2) break;
nome[40] = '\0'; // garantir terminação
// 4. Calcular idade
int idade = ano_corrente - ano_nasc;
// 5. Determinar categoria
const char *categoria;
if (idade < 18) {
categoria = "menor de idade";
} else if (idade == 18) {
categoria = "entrando na maior idade";
} else {
categoria = "maior de idade";
}
// 6. Escrever no arquivo de saída
fprintf(fp_out, "%s %s\n", nome, categoria);
}
// 7. Fechar arquivos
fclose(fp_in);
fclose(fp_out);
return 0;
}