Ir ao conteúdo

Gravar struct em arquivo.txt


Ir à solução Resolvido por MassakiMsk,

Posts recomendados

Postado

Bom, estou com problema para gravar struct em um arquivo.txt. O problema é que na hora de gravar, ele escreve somente o nome e os outros campos pegam sujeira de memória alguém poderia me ajudar para descobrir aonde estou errando?

 

 

#include <stdio.h>
#include <stdlib.h>
#define T 3
struct aluno {
char nome [100];
int idade;
int ra;
float mensal;
 
};
 
struct aluno ler (){
struct aluno a;
printf("\n----Digite seu nome:---- \n");
fflush(stdin);
gets(a.nome);
printf("----Digite sua idade:---- \n");
scanf("%d",&a.idade);
printf("----Digite seu RA:---- \n");
scanf("%d",&a.ra);
printf("----Digite sua mensalidade:---- \n");
scanf("%f",&a.mensal);
printf("\n============================\n");
return a;
 
 
}
void imprime (struct aluno a[T]){
for (int x=0; x<T; x++){
printf("\t Nome: %s\n",a[x].nome);
printf("\t Idade: %d\n",a[x].idade);
printf("\t RA: %d\n",a[x].ra);
printf("\t Mensalidade: %.2f\n",a[x].mensal);
}
}
int main (){
char caminho[]="aluno.txt",caractere;
FILE *arquivo;
arquivo = fopen (caminho,"w");
struct aluno a[T];
if (arquivo==NULL){
printf("Erro ao criar arquivo.\n");
 
}else{
 
for(int x=0; x<T; x++){
fprintf(arquivo,"%s %d %d %.2f",a[x]= ler(), a[x].nome,a[x].idade,a[x].ra,a[x].mensal);
printf("\tArquivo gravado com sucesso.\n");
}
fclose(arquivo);
 
 
}
 
 
 
//imprime(a);
 
 
 
system("pause");
return 0;
}
  • Solução
Postado

Alterei a declaração do "int x" e a chamada da função "ler" tava no lugar errado dentro do "printf", ela deve ser chamada antes, pois ali o "printf" estava tentando imprimir o que nao devia.

#include <stdio.h>#include <stdlib.h>#define T 3struct aluno {char nome [100];int idade;int ra;float mensal;};struct aluno ler (){struct aluno a;printf("\n----Digite seu nome:---- \n");fflush(stdin);gets(a.nome);printf("----Digite sua idade:---- \n");scanf("%d",&a.idade);printf("----Digite seu RA:---- \n");scanf("%d",&a.ra);printf("----Digite sua mensalidade:---- \n");scanf("%f",&a.mensal);printf("\n============================\n");return a;}void imprime (struct aluno a[T]){    int x;for (x=0; x<T; x++){printf("\t Nome: %s\n",a[x].nome);printf("\t Idade: %d\n",a[x].idade);printf("\t RA: %d\n",a[x].ra);printf("\t Mensalidade: %.2f\n",a[x].mensal);}}int main (){    int x;char caminho[]="aluno.txt",caractere;FILE *arquivo;arquivo = fopen (caminho,"w");struct aluno a[T];if (arquivo==NULL){printf("Erro ao criar arquivo.\n");}else{for(x=0; x<T; x++){        a[x]= ler();fprintf(arquivo,"Nome: %s\nIdade: %d\nRA: %d\nMensalidade: %.2f\n\n\n", a[x].nome,a[x].idade,a[x].ra,a[x].mensal);printf("\tArquivo gravado com sucesso.\n");}fclose(arquivo);}imprime(a);system("pause");return 0;}
  • mês depois...
Postado

 

Alterei a declaração do "int x" e a chamada da função "ler" tava no lugar errado dentro do "printf", ela deve ser chamada antes, pois ali o "printf" estava tentando imprimir o que nao devia.

#include <stdio.h>#include <stdlib.h>#define T 3struct aluno {char nome [100];int idade;int ra;float mensal;};struct aluno ler (){struct aluno a;printf("\n----Digite seu nome:---- \n");fflush(stdin);gets(a.nome);printf("----Digite sua idade:---- \n");scanf("%d",&a.idade);printf("----Digite seu RA:---- \n");scanf("%d",&a.ra);printf("----Digite sua mensalidade:---- \n");scanf("%f",&a.mensal);printf("\n============================\n");return a;}void imprime (struct aluno a[T]){    int x;for (x=0; x<T; x++){printf("\t Nome: %s\n",a[x].nome);printf("\t Idade: %d\n",a[x].idade);printf("\t RA: %d\n",a[x].ra);printf("\t Mensalidade: %.2f\n",a[x].mensal);}}int main (){    int x;char caminho[]="aluno.txt",caractere;FILE *arquivo;arquivo = fopen (caminho,"w");struct aluno a[T];if (arquivo==NULL){printf("Erro ao criar arquivo.\n");}else{for(x=0; x<T; x++){        a[x]= ler();fprintf(arquivo,"Nome: %s\nIdade: %d\nRA: %d\nMensalidade: %.2f\n\n\n", a[x].nome,a[x].idade,a[x].ra,a[x].mensal);printf("\tArquivo gravado com sucesso.\n");}fclose(arquivo);}imprime(a);system("pause");return 0;}

Nossa eu nem tinha percebido.. obrigada \o/

Visitante
Este tópico está impedido de receber 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...

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!