Ir para conteúdo

POWERED BY:

Arquivado

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

Nevis

Meu fwrite está gravando errado

Recommended Posts

dae Galera beleza...é o seguinte..estou fazendo um trab p facul baseado num estacionamento de carros.

Ainda está no começo, mas quero colocar mais coisas pra frente...Vai ficar gravado a hora, data, placa e o preço total do serviço. Só fiz o struct da hora ainda, mas parece que algo esta errado.

O numero que eu digitar era pra ele gravar no arquivo, mas aparece uns símbolos muito estranhos!!

sera que alguem pode me ajudar?? valeu

 

o código é o seguinte:

 

 

 

#include <stdio.h>#include <conio.h>#include <string.h>void main(){  struct {  char desc[4];  int ind;  } tipo_hora;	int hora;	FILE *fptr;	fptr = fopen("teste.txt","w");	printf("				 BEM-VINDO AO PROGRAMA DE ESTACIONAMENTO\n\n");	printf("Digite a hora: ");	scanf("%d", &hora);	//gets(tipo_hora.desc);	int i;		for(i=0;i<24;i++)		{		  if ((hora>24) || (hora<=0))		  {			 printf("\nHora invalida");			 printf("\n\nDigite uma hora valida: ");			 scanf("%d",&hora);}			 //fwrite(&tipo_hora,sizeof(tipo_hora),1,fptr);		}	fwrite(&tipo_hora,sizeof(tipo_hora),1,fptr);	fclose(fptr);	getch();}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Vamos lá, tbm estou aprendendo a mecher com arquivos, mas vou tentar te ajudar :)

 

você colocou o modo "w" para iniciar o arquivo, olhe o que o modo w faz: cria e abre novo arquivo texto onde podem ser realizadas apenas operações de gravação

 

o ideal seria usar o "r+": abre arquivo texto existente posicionando a cabeça de leitura e gravação no início do arquivo, permitindo ler e gravar dados;

 

o w'+' é bom usar na condição de não existir ainda o arquivo.. aí ele cria e tudo bem, mas aí, o que esta acontecendo, ele sempre cria um arquivo novo ao você compilar, e tudo que você salvou antes foi deletado..

 

Utilize o modo "r+" para ler e gravar, mas antes não se esqueça de fazer o teste [ if (ftpr == NULL) ... fopen (w+) e depois coloque outro fopen com o modo "r+" ]

 

Teste tbm utilizando o ferror logo após cada fwrite:

if (ferror (fptr))

printf ("Erro ao salvar!!\n");

 

aí você sabera se esta salvando ou não.. caso não está salvando... de um fclose(fptr), e abra novamente o arquivo usando [ fptr = fopen("teste.txt","r+") ], mas como aí esta tudo em uma função só, provavelmente não vai ter problemas.

e bote um fread ae ;)

Compartilhar este post


Link para o post
Compartilhar em outros sites

você ta gravando o endereço da struct tipo_hora no arquivo, por isso aparecem arquivos estranhos.o Certo é você usar:fwrite(tipo_hora.desc,sizeof(4),1,fptr);fwrite(tipo_hora.ind,sizeof(int),1,fptr);

Compartilhar este post


Link para o post
Compartilhar em outros sites

você ta gravando o endereço da struct tipo_hora no arquivo, por isso aparecem arquivos estranhos.

 

o Certo é você usar:

 

fwrite(tipo_hora.desc,sizeof(4),1,fptr);

fwrite(tipo_hora.ind,sizeof(int),1,fptr);

Eu já testei e ele salva tudo se coloca só a variavel da struct, não precisa fazer esse trabalhão todo..

Mesmo acontece com vetores, se tem o vetor x[20], para salvar é: fwrite(&x,sizeof(x),1,fptr);

Compartilhar este post


Link para o post
Compartilhar em outros sites

Intao funciona... O codigo dele ta errado pq ele ta guardando a informacao em hora do tipo int, e armazena uma struct vazia no arquivo.O programa coloca um monte de lixo no arquivo.Tem que declarar hora como tipo_hora e armazenar os dados ali, e ai sim guardar no arquivo.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.