Ir para conteúdo

POWERED BY:

Arquivado

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

marciocorbolan

Problema com gravação de registro em arquivo!!!

Recommended Posts

Boa tarde,

 

Gente, tenho que entregar um trabalho para aula de c++, mas estou com ums problemas, me parecem ser coisas bobas que eu não estou prestando atenção, pois eu ja rodei o programa inteiro e não achei os possiveis erros!!

 

Oh! O programa é um cadastrador de CD/DVD, dai você entra e consegue gravar um artista, dai manda mostrar, ai mostra o artista e codigo.. uma beleza.. dai quando você manda gravar outro e depois manda mostrar ele mostra so os dois nomes e o codigo do ultimo :/

 

Na parte de cadastro de CD/DVD a pessoa tem que escrever CD ou DVD, para processeguir, mas não ta dando certo, trava ali, essas são as prioridades do momento, a outras coisas que eu tenho que fazer ainda, mas primeiro tenho que resolver esses problemas..

 

Olha! Eu até tentei colocar o codigo, mas ficou muito grande não coube, cheguei no 3 post e nem tinha chego na metade do codigo!! Bem, então vou resumir logo o erro!!

 

O Programa roda e salva um registro, mas se for salvar mais de um ele some com algums valores, então fui no arquivo que ele cria para analizar o que tava acontecendo, notei que estava com problema na gravação pois apareceu coisas que não eram para aparecer, vejam abaixo..

 

   teste Ô@  @ 0 @ RAC†2àŽØÿ7K! ñ ž=àŽÉ ª Opcao: ruirarDVD AlgoritimosE)5’LOADHIGHÐ`9’LHÐ`

Logo peguei e fui testar um pedaço do codigo de inserção separado do programa, logo consegui gravar direito, vejam abaixo..

 

teste						    TC

Bem, até ai ja estava bolado porque ele "funcionou", mas achei estranho o TC, então troquei o cprintf pelo printf e o resultado foi diferente!

 

teste

Para não ficar muito vago o post, fiz uma adaptação aqui só da parte que faz a entrada de dados e grava o registro no arquivo, quem puder dar uma olhada é só copiar tudo e colar num txt e rodar, pois adaptei ele para rodar a função

 

#include <dos.h>						// biblioteca dos.h#include <conio.h>						// biblioteca conio.h#include <stdio.h>						// biblioteca stdio.h#include <string.h>						// biblioteca string.h#include <stdlib.h>						// biblioteca stdlib.h#include <string.h>						// biblioteca string.hstruct artista{	int codigo;	int e;	char nome[100];};void main(){	char *tit01 = "2§ Periodo de SI - Algoritimos";		// titulo	char *tit02 = "Cadastro de CD/DVD";			// subtitulo 01	char *tit03 = "Cadastro de Artista/Grupo";		// subtitulo 02	char *tit04 = "ERRO";					// subtitulo 04	char aux[100];						// declaracao de variavel	char op;						// declaracao de variaveis	clrscr();	//DEFINE OS ATRIBUTOS DE COR DA JANELA MESTRE	textbackground(1);					// define a cor de fundo como azul	textcolor(15);						// define a cor da letra como branca	//FAIXA AZUL COM TITULO	gotoxy(1,1);						// posiciona cursor no canto esquerdo	clreol();						// desenha fundo de linha	gotoxy(40 - strlen(tit01)/2, 1);			// posiciona cursor	cprintf("%s",tit01);					// escreve o titulo	//FAIXA CINZA	textbackground(7);					// seleciona cor de fundo de linha	textcolor(1);						// cor de letra	gotoxy(1,2);						// posiciona cursor no canto esquerdo	clreol();						// desenha fundo de linha	//FAIXA CINZA COM O SUBTITULO	gotoxy(1,3);						// posiciona cursor no canto esquerdo	clreol();						// desenha fundo de linha	gotoxy(40 - strlen(tit02)/2, 3);			// posiciona cursor	cprintf("%s",tit02);					// escreve o subtitulo	//FAIXA AZUL COM O RODAPE	textbackground(1);					// define a cor de fundo como azul	textcolor(15);						// define a cor da letra como branca	gotoxy(1,25);						// posiciona cursor	clreol();						// desenha fundo de linha	//JANELA DO MEIO	delay(300);		   					// pausa pra nao ficar muito ligeiro	window(15,8,65,20);					// define o tamanho da janela (esq,sup,dir,inf)	textbackground(1);					// define a cor de fundo como azul	textcolor(15);						// define a cor da letra como branca	clrscr();						// preenche janela com cor	struct artista a;	FILE *fpartista;	if((fpartista=fopen("artista.txt","rb+"))==NULL)	{		if((fpartista=fopen("artista.txt","wb"))==NULL)		{			clrscr();						// limpa a tela			//FAIXA CINZA COM O TITULO			textbackground(7);					// define a cor de fundo como cinza			textcolor(1);						// define a cor da letra como azul			gotoxy(1,1);						// posiciona cursor no canto esquerdo			clreol();						// desenha fundo de linha			gotoxy(27 - strlen(tit04)/2, 1);			// posiciona cursor			cprintf("%s",tit04);					// escreve titulo centralizado			textbackground(1);					// define a cor de fundo como azul			textcolor(15);						// define a cor da letra como branca			//AVISO DE ERRO			gotoxy(17,6);						// Alinha a frase			cprintf("Erro ao abrir arquivo");			// escreve a frase			getche();						// pausa o programa			textbackground(0);					// restaura cor de fundo padrao			clrscr();						// limpa a tela			exit(1);						// saindo do programa		}	}	do	{		clrscr();						// limpa a tela		//FAIXA CINZA COM O TITULO		textbackground(7);					// define a cor de fundo como cinza		textcolor(1);						// define a cor da letra como azul		gotoxy(1,1);						// posiciona cursor no canto esquerdo		clreol();						// desenha fundo de linha		gotoxy(27 - strlen(tit02)/2, 1);			// posiciona cursor		cprintf("%s",tit02);					// escreve titulo centralizado		textbackground(1);					// define a cor de fundo como azul		textcolor(15);						// define a cor da letra como branca		//MENU DE ENTRADA DE DADOS		do		{			gotoxy(18,5);						// Alinha a frase			cprintf("Nome: ");					// escreve a frase			gets(a.nome);						// le o nome digitado			if(strcmp(a.nome,"")==0)			{				gotoxy(18,5);						// Alinha a frase				cprintf("Nome: ");					// escreve a frase				clreol();						// desenha fundo de linha			}		}while(strcmp(a.nome,"")==0);		do		{			gotoxy(18,6);						// Alinha a frase			cprintf("Codigo: ");					// escreve a frase			gets(aux);						// le o nome digitado			a.codigo=atoi(aux);			if((strcmp(aux,"")==0) || (a.codigo<0))			{				gotoxy(18,6);						// Alinha a frase				cprintf("Codigo: ");					// escreve a frase				clreol();						// desenha fundo de linha			}		}while((strcmp(aux,"")==0) || (a.codigo<0));		a.e=0;		fseek(fpartista,0,2);		fwrite(&a, sizeof(a),1,fpartista);		gotoxy(12,8);						// Alinha a frase		cprintf("Cadastrar outro Artista? (s/n)");		// escreve a frase		op=getch();						// le o codigo digitado	}while((op=='s') || (op=='S'));	fclose(fpartista);					// fecha o arquivo	textbackground(0);					// restaura cor de fundo padrao	clrscr();						// limpa a tela}

 

Olha gente eu não entendo muito de c++, se puderem me ajudar, vao me adiantar pra caramba :)

Compartilhar este post


Link para o post
Compartilhar em outros sites

não consigo testar seu código, pois uso o gcc

mas olhando rapidamente esse trecho tem erro:

 

fwrite(&a, sizeof(a),1,fpartista);

o tipo de dados não é "a" e sim struct artistica, corrigindo

 

fwrite(&a, sizeof(struct artista),1,fpartista);

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.