Bom, este programa consiste em Cadastrar e Buscar no arquivo de registro, usando fread e fwrite, mas, na execução do programa, ao achar o livro atraves do autor, ele imprimi as caracteristicas do livro duas vezes, mas lá no arquivo que foi criado, ele imprimi só uma vez, como deve ser.
Ou seja, quando é só um arquivo, ele le de novo, mas já fiz teste com dois, e isso não acontece. Qual poderia ser o problema? Na condição de parada?
obs: ignorem alguns comentários que eram válidos quando era apenas um teste.
#include <stdio.h>
#include <stdlib.h>
#include<string.h>
typedef struct
{
char titulo[20];
char autor[20];
char assunto[20];
char editora[20];
int edicao;
}reg;
typedef reg registro;
registro regLivro;
void Cadastro()
{
//funcao que grava os dois regs acima no arquivo.
FILE *ptrArq;
ptrArq = fopen("Teste.txt","wb");//escrita binaria
printf("Titulo: ");
gets(regLivro.titulo);
printf("Autor: ");
gets(regLivro.autor);
printf("Assunto: ");
gets(regLivro.assunto);
printf("Editora: ");
gets(regLivro.editora);
printf("Edicao: ");
scanf("%d", ®Livro.edicao);
fflush(stdin);
fwrite(®Livro,sizeof(registro),1,ptrArq);//salva o arquivo 1,
//fwrite(&teste2,sizeof(registro),2,arq);//o parametro mudou para 2,
//para não sobrescrever o
//registro 1
fclose(ptrArq);//fecha o arquivo para não ferra-lo.
//Somente salva o arquivo no disco.
}
void Busca(char *autor)//passa como parametro uma chave pela qual busca...
{
FILE *ptrArq;//arquivo...
ptrArq = fopen("Teste.txt","rb");//leitura binaria, usada para ler registros.
registro temp;//registro temporario
//int posicao =1;//so para mostrar onde achou o reg no arquivo...
while(!feof(ptrArq))//enquanto não FimDeArquivo(NomeDoArquivo)
{
fread(&temp,sizeof(registro),1,ptrArq);//Le um registro salvando o no temp...
//no caso esta comparando o paramentro com o campo TESTE do registro
/*
*Poderiamos buscar em um registro por exemplo pelo campo RGA, então essa busca seria util...
*/
if (strcmp(temp.autor,autor)==0)//e compara se a chave do registro lido é igual a procurada.
{
//printf("Achou a parada na posicao %d\n",posicao);//se encontrou mostra-a.
printf("\nTitulo: %s", temp.titulo);
printf("\nAutor: %s", temp.autor);
printf("\nAssunto: %s", temp.assunto);
printf("\nEditora: %s", temp.editora);
printf("\nEdicao: %d", temp.edicao);
}
else printf("Livro inexistente no arquivo");
//posicao++;//avanca o contador.
}
fclose(ptrArq);//fecha
}
int main()
{
char autor[20];
Cadastro();
printf("Informe o autor para efetuar a busca: ");
gets(autor);
Busca(autor);
return 0;
}
Pergunta
AlineI
Bom, este programa consiste em Cadastrar e Buscar no arquivo de registro, usando fread e fwrite, mas, na execução do programa, ao achar o livro atraves do autor, ele imprimi as caracteristicas do livro duas vezes, mas lá no arquivo que foi criado, ele imprimi só uma vez, como deve ser.
Ou seja, quando é só um arquivo, ele le de novo, mas já fiz teste com dois, e isso não acontece. Qual poderia ser o problema? Na condição de parada?
obs: ignorem alguns comentários que eram válidos quando era apenas um teste.
Editado por AlineILink para o comentário
Compartilhar em outros sites
2 respostass a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.