Ir ao conteúdo

Criando uma Agenda e gerando arquivos em disco


Andryas

Posts recomendados

Postado

Essa agenda utilza fread e fwrite para leitura e gravação de arquivos em disco.

Tudo da certo em tempo de execução,porém quando vou ver o txt gerado e abro ele,com wordpad, aparecem os caracteres todos zuados.

Vejam só o programa:

// Uso de arquivos - fread e fwrite no projeto de agenda

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

/* DEFINICAO DA ESTRUTURA */
struct no {
char nome[30];
int telefone;
char email[20];
struct no *prox;
};

/* PROTOTIPOS DAS FUNCOES */

int display_menu(void);
void imprime (struct no *);
void insere(struct no **,struct no **, struct no);


/* PROGRAMA PRINCIPAL */
int main()
{
FILE *arq;
int opcao, num;
struct no *lista = NULL; // inicialização da lista
struct no *fim = NULL;

struct no data;

if((arq=fopen("entrada.txt","r+")) == NULL){
printf("Arquivo nao existente, sera criado\n");
arq=fopen("entrada.txt","w+");
}
else {
printf("Leitura do arquivo.....\n");
while (!feof(arq))
{
fread(&data ,sizeof(struct no), 1, arq);
if (!feof(arq)) {
printf("Insercao do registro %s\n",data.nome);
insere(&lista,&fim, data);
}
}
}


/*MENU DE opções */
do {
opcao=display_menu();
switch (opcao) {
case 1:
printf("\nDigite o nome:");
fflush(stdin);
gets(data.nome);
printf("\nDigite o telefone:");
fflush(stdin);
scanf("%d",&(data.telefone));
printf("\nDigite o e-mail:");
fflush(stdin);
gets(data.email);
insere(&lista,&fim, data);
break;
case 2:
imprime(lista);
break;

}
} while (opcao != 0);


rewind(arq);
fflush(arq);
struct no*aux=lista;

while (aux!=NULL){
printf("Gravando o registro %s\n",aux->nome);
fwrite((char *)aux,sizeof(struct no),1,arq);
aux = aux -> prox;
}

printf("Fim");
fflush(stdin);
scanf("%c",&opcao);
fclose(arq);
return (0);
}

/* MOSTRA O MENU DE OPÇÕES */

int display_menu(void)
{
int opcao;
printf("\n\n ------------------------------ \n\n");
printf("\n LISTA SIMPLES (Exemplo de uso de fread e fwrite) \n\n\n opções \n\n");
printf("1- Inserir no final\n");
printf("2- Imprimir\n");

printf("0- Sair (grava em arquivo) \n\n => ");
scanf("%d", &opcao);
return(opcao);
}



/* IMPRIME OS ELEMENTOS DE UMA LISTA */
void imprime (struct no *inicio)
{
printf("\n\n >>>>> LISTA: \n\n");
if (inicio == NULL) printf("Lista vazia");
else do {
printf("%s\n", inicio -> nome);
printf("%d\n", inicio -> telefone);
printf("%s\n\n", inicio -> email);
inicio = inicio -> prox;
} while (inicio !=NULL);
}


//Insere no final da lista
void insere (struct no **inicio,struct no **fim, struct no dado)
{
if (*inicio==NULL){
(*inicio)=(struct no*) malloc(sizeof(struct no));
strcpy((*inicio)->nome,dado.nome);
(*inicio)->telefone=dado.telefone;
strcpy((*inicio)->email,dado.email);
(*inicio)->prox=NULL;
(*fim)=(*inicio);
}
else{
struct no *aux=(struct no*) malloc(sizeof(struct no));
strcpy(aux->nome,dado.nome);
aux->telefone=dado.telefone;
strcpy(aux->email,dado.email);
(*fim)->prox=aux;
(*fim)=aux;
(*fim)->prox=NULL;
}
}

e aqui o arquivo txt gerado(agenda.txt):

Lucas o ed\Windows Live;C:\Progr‡1 [email protected] Fiøo pedro o dows Live;C:\Windows\sysg<ñ[email protected] :\Wind   

e os dados entrados em tempo de execução foram:



Lucas
3212423
[email protected]

pedro
32586855
[email protected]

Nota-se que o problema fica na impressao dos numeros...realmente nao sei o que aconteceu...

Postado

up pra questao

Li que as funcoes fread e fwrite armazenam numeros em formato binario e que sao mais recomendadas para trabalharem com arquivos binarios ao invés de txt.

Sera esse o problema? Como corrijo?

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!