include <stdio.h>
// Segue arquivo da agenda2.c para rodar e relatar o teste
typedef struct {
char nome[30+1];
int fone;
} Aluno; // novo tipo "Aluno" foi criado aqui
Aluno alu[100]; // cria tabela "alu" na memória com 100 linhas
int prox; // indice da proxima linha livre na tabela "alu"
GravaDadosMemoria(){
FILE *arq; // serve para referenciar o arquivo aberto no disco
int i;
arq = fopen("dadosAgenda.txt", "w" // cria o arquivo para gravacao "w"
if( arq == NULL ) {
printf("Erro: disco cheio!!!\n"
return; // cancela gravacao
}
for( i=0; i < prox; i++ ) {
printf("Gravando [%s]...\n", alu[i].nome);
fprintf( arq, "%s\n%d\n", alu[i].nome, alu[i].fone );
}
printf("GravaDadosMemoria: gravou %d nomes\n", i);
}
RemoveNovaLinha( char area[] ) {
int indNulo = strlen( area ) - 1;
area[ indNulo ] = '\0'; // removo o '\n' que foi lido do arq para memoria
}
LerDadosGravados() { // se existir "dadosAgenda.txt"
FILE *arq; // serve para referenciar o arquivo aberto no disco
int i=0;
char area[100+1];
printf("LerDadosGravados: Inicio\n"
arq = fopen("dadosAgenda.txt", "r" // tenta abrir arquivo para leitura "r"
if( arq == NULL ) {
printf("LerDadosGravados: nao existia dadosAgenda.txt!\n"
return; // Volta para o menu principal
}
while( fgets( area, 100, arq ) != NULL) {
RemoveNovaLinha( area ); // remove o '\n' do nome
printf("nome [%s]...\n", area);
strcpy( alu[i].nome, area ); // copia o nome para alu[i].nome
if( fgets( area, 100, arq ) != NULL) {
RemoveNovaLinha( area );
printf("fone [%s]...\n", area);
alu[i].fone = atoi( area );
}
i++;
}
printf("LerDadosGravados: Leu %d registros para memoria\n", i );
prox = i;
}
MostraMenu() {
char opc;
printf(" AGENDA - ALUNO\n"
printf(" i) incluir\n"
printf(" l) Listar\n"
printf(" f) Fim\n"
printf(" Qual a Opcao? "
scanf("%c", &opc );
if( opc == '\n' ) {
scanf("%c", &opc ); // joga fora o '\n' do teclado
}
return opc;
}
void
Incluir() {
printf(" AGENDA - INCLUIR\n"
printf(" Nome? "
scanf("%s", alu[prox].nome );
printf(" Fone? "
scanf("%d", &alu[prox].fone );
printf("[%s-%d] foi incluido!\n", alu[prox].nome, alu[prox].fone);
prox++; // indica que a proxima linha na tab "alu" esta livre
}
void
Listar() {
int i;
printf(" AGENDA - LISTAR\n"
printf("Nome Fone\n"
for( i=0; i < prox; i++ ) {
printf("%s %d\n", alu[i].nome, alu[i].fone );
}
printf("---Fim da Listagem ---\n"
}
int
main() {
char opc, termina = 'n'; // inicia com nao
LerDadosGravados(); // recupera os dados da ativacao anterior, se existir
do {
opc = MostraMenu();
if( opc == 'f' ) {
termina = 's';
} else if( opc == 'i' ) {
Incluir(); // Ativa tela Incluir
} else if( opc == 'l' ) {
Listar(); // Ativa tela Listar
} else {
printf("[%c] opcao invalida!!!", opc );
}
} while( termina == 'n' );
GravaDadosMemoria(); // grava os dados da memória para o arquivo
printf("\nAteh +++\n"
}
luiza-silva
Zerinho
Registrado
4 Mensagens
2 Curtidas
[Resolvido] Programa em C.
#1 Por luiza-silva
11/04/2024 - 01:10