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.
#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); }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.