Estou fazendo um programa no qual é necessário criar um arquivo para gravar as informações que já foram digitadas. Estou usando uma função para chamar o código que está criando os arquivos e guardando as informações...
No entanto não estou conseguindo gravar as informações através da struct que criei. Quando eu abro o programa novamente, não consigo recuperar as informações.
Acredito que esteja gravando somente o ponteiro e não as informações em si. Será que alguém teria alguma ideia pra me ajudar?
Aqui vai o código.
#include <stdlib.h>
#include <stdio.h>
#include <conio.h>
#include <string.h>
#include <ctype.h>
#define MAX1 1000
//////////////////////////////STRUCT
struct livro{
char nomedolivro[17];
int area;
char autores[60];
char editora[20];
};
/////////////////////////////////////////////////////////FUNCAO CADASTRAR LIVROS
void cadastrarLivros(struct livro livros[MAX1], int *contlivros){
int ii;
int *pont;
FILE *fptr;
FILE *guarda1;
///////////////////LENDO QUAL POSIÇÃO (QUANTOS LIVROS JÁ CADASTRADOS)
guarda1=fopen("guardaponteiro1.txt","r");
int x=0;
while(fscanf(guarda1, "%i", &x) > 0)
{
fprintf(guarda1, "%i", x);
printf("\n%i", x);
printf("\nVALOR PONTEIRO");
}
///////////////////ESCREVENDO INFORMAÇÕES
if ((fptr = fopen("pessoas", "wb")) == NULL){
printf("\nErro na abertura do arquivo");
}else{
contlivros=&x;
do{
printf("\nDigite o Nome do Livro: ");
gets(livros[*contlivros].nomedolivro);
}while(strlen(livros[*contlivros].nomedolivro)==0);
fwrite(&livros, sizeof(livro), 1, fptr);
*contlivros=*contlivros+1;
fclose(fptr);
}
///////////////////LENDO INFORMAÇÕES
if ((fptr = fopen("pessoas", "rb")) == NULL)
printf("\nErro na abertura do arquivo");
else{
while(fread(&livros, sizeof(livro), 1, fptr) == 1){
for(ii = 0; ii <=*contlivros-1; ii++){
printf("\nNome: %s\n",livros[ii].nomedolivro);
}
}
fclose(fptr);
}
///////////////////GUARDANDO PONTEIRO
guarda1=fopen("guardaponteiro1.txt","w");
if(guarda1==NULL){
printf("\n erro");
}else{
pont=contlivros;
fprintf(guarda1, "%i", *pont);
//printf("\n%i", *pont);
fclose(guarda1);
}
///////////////////LENDO PONTEIRO
if ((fptr = fopen("guardaponteiro1.txt", "r")) == NULL){
printf("\nErro na abertura do arquivo");
}else{
while (!feof(guarda1)){
fscanf(guarda1,"%i",&*pont);
printf("\n%i",*pont);
}
}
fclose(guarda1);
};////final funcao
////////////////////////////////////////////////
main(){
struct livro livros[MAX1];
int opcao,contlivros=0;
do{
printf("\n\n");
printf("\n Escolha sua opcao");
printf("\n 1 - Cadastrar livros");
printf("\n OPCAO: ");
scanf("%d", &opcao);
fflush(stdin);
switch(opcao){
case 1:{
cadastrarLivros(livros, &contlivros);
//criar documento adicionando livros
break;
}
case 0:{
break;
}
default:{
printf("\n \n =====OPCAO INVALIDA===== \n \n");
break;
}
}
}while (opcao!=0);
}
Pergunta
ThaisM
Olá!
Será que alguém poderia me ajudar?
Estou fazendo um programa no qual é necessário criar um arquivo para gravar as informações que já foram digitadas. Estou usando uma função para chamar o código que está criando os arquivos e guardando as informações...
No entanto não estou conseguindo gravar as informações através da struct que criei. Quando eu abro o programa novamente, não consigo recuperar as informações.
Acredito que esteja gravando somente o ponteiro e não as informações em si. Será que alguém teria alguma ideia pra me ajudar?
Aqui vai o código.
Obrigada!
Editado por ThaisMLink para o comentário
Compartilhar em outros sites
1 resposta 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.