Ir para conteúdo
Fórum Script Brasil
  • 0

como inserir uma struct em um File


Davi Neves

Pergunta

estou fazendo uma lista encadeada ,e tenho que gravar cadastros em .txt ,porem quando eu crio o arquivo ele fica em branco.

#include<stdio.h>
#include<stdlib.h>
#include <time.h>
#define verdadeiro 1

int codigo()
{
int x;
srand((unsigned)time(NULL));
x=rand()%100+1;
return x;
}

struct estacionamento{
       char nome[40],modelo[40],placa[7],entradad[10],entradah[10];
       int codigo,telefone;
       struct estacionamento *proximo,*anterior;
       };
       struct estacionamento *inicio,*ultimo;
       void listaligada(struct estacionamento *);
        
        int menu();
        void grava();
        int abre();
        void cadastro();
        void exclui(); 
        void lista();
        
          int main (){
             int aux;
             while(verdadeiro){
             aux=menu();
             for(;;){
              printf("%d",aux);
             if(aux==1){
                       cadastro(  );
                       break;
                      
                        
             }
              if(aux==2){
                        grava();
                        break;
                       
                         }
              if(aux==3){
                        abre();
                        break;
                         
                         }
              if(aux==4){
                        exclui();
                        break;
                         }
              if(aux==5){
                        lista();
                         break;
                         }
                         if(aux==6){
                                    exit(0);
                                    }
              else
              printf("\n Entre com uma opcao de 1 a 7.\n");
              system ("pause");
           }
              }
              }
        int menu(){
            inicio=ultimo=NULL;
              int i,n;
            system("cls");
            printf("\n\n\t\t MENU\n\n");
            printf("\t1. Cadastra dados\n");
            printf("\t2. Grava em arquivo\n");
            printf("\t3. Abre arquivo\n");
            printf("\t4. Exclui\n");
            printf("\t5. Lista\n");
            printf("\t6. Sai\n");
            
        while(verdadeiro){
         printf("\n\n\tentre com a opcao:");
         fflush(stdin);
         n=scanf("%d",&i);
         if (!n)
         printf("\n Entrada errada\n");
         else break;
         }
         return i;
         }
        
       
              
              void cadastro(int i){
                   struct estacionamento *p;
                   int comp;
              system ("cls");
              printf("\n\n\t\t cadastro\n\n");
              printf("\n Tecle ENTER sobre o campo nome para sair: \n");
              for(;;){
 
  // p->codigo=codigo();
               //printf("codigo: %d",p->codigo);
                      
                      printf("\n Nome %d: ",i+1);
                      fflush(stdin);
                                    p=(struct estacionamento *)malloc(sizeof(struct estacionamento));
                      gets(p->nome);
                      if(!p->nome[0])
                      break;
                      
                      printf("\n telefone %d: ",i+1);
                      fflush(stdin);
                      scanf("%d",&p->telefone);
                      
                      printf("\n modelo %d: ",i+1);
                      fflush(stdin);
                       gets(p->modelo);
                      
                      printf("\n Placa: ");
                      fflush(stdin);
                      gets(p->placa);
                      
                      printf("\n Entrada: ");
                      _strdate(p->entradad);
                      _strtime(p->entradah);
                     printf("%s %s",p->entradad,p->entradah);
                     
                     p->codigo=i;
                      listaligada(p);
                      
                      
              }
              
              }
              
              void listaligada(struct estacionamento *p){
                   if(inicio==NULL){
                                    ultimo=p;
                                    inicio=p;
                                    p->proximo=NULL;
                                    p->anterior=NULL;
                                    return;
                                    }
                                    ultimo ->proximo=p;
                                    p->anterior=ultimo;
                                    ultimo=p;
                   }
                   void grava (){
                        struct estacionamento *p;
                               FILE *fp;
                               int i=0;
                               char arq[40];
                               system ("cls");
                               printf("\n\n\t\t Grava em arquivo\n\n");
                               printf("\n Entre com o nome do arquivo:");
                               fflush(stdin);
                               gets (arq);
                               if((fp=fopen(arq,"wb"))==NULL){
                                                              printf("\n não pode abrir o arquivo %s\n",arq);
                                                              system ("pause");
                                                              return;
                                                              }  
                               p=inicio;
                               while (p != NULL){
                                     fwrite(p,sizeof(struct estacionamento),1,fp);
                                     p= p->proximo;
                                     i++;
                                     }
                               fclose(fp);
                               printf("\n Foram gravados %d registros \n",i);
                               system ("pause");
                                      
                                     }
                                     int abre(){
                                         struct estacionamento *p;
                                         FILE *fp;
                                         int i=0;
                                         char arq[40];
                                         system ("cls");
                                         printf("\n\n\t\t Abre o arquivo \n\n");
                                         printf("\n Entre com o arquivo:");
                                         fflush(stdin);
                                         gets (arq);
                                         if ((fp=fopen(arq,"rb"))==NULL){
                                            printf("\n não pode abrir o arquivo %s\n",arq);
                                            system ("pause");
                                            return;
                                            }
                                            p=inicio;
                                            while(p!=NULL){
                                                           free(p);
                                                           p=p->proximo;
                                                           }
                                                           inicio=ultimo=NULL;
                                                           p=(struct estacionamento *)malloc(sizeof(struct estacionamento));
                                                           while(fread(p,sizeof(struct estacionamento),1,fp) !=0){
                                                                                       listaligada(p);
                                                                                       p=(struct estacionamento *)malloc(sizeof(struct estacionamento));
                                                                                       i++;
                                                                                       }
                                            fclose(fp);
                                            printf("\n foram lidos %d registros \n",i);
                                            system ("pause");
                                            return (i);
                                         } 
                        void lista (){
                             struct estacionamento *p;
                             int codigo;
                             system("cls");
                              printf("\n\n\t\t LISTA\n\n");
                              p=inicio;
        
                               while(p != NULL){
                               printf("\n\t nome:\t %d",p->nome);
                               printf("\n\t telefone:\t\t %d",p->telefone); 
                                printf("\n\t modelo:\t\t %s",p->modelo); 
                                 printf("\n\t placa:\t\t %.s",p->placa);   
                                   printf("\n\t \t %.s",p->entradad);
                                    printf("\n\t \t %.s",p->entradah);
                                    printf("\n_______________________________\n");
                                     p=p->proximo;                          
                                     }    
       system("pause");          
   }
                        void exclui(){
                             struct estacionamento *p,*p1,*p2;
                             int achou=0,codigo;
                             system("cls");
                             printf("\n\n\t\t Exclui \n\n");
                             printf("\n Entre com o codigo do registro a excluir \n");
                             scanf("%d",&codigo);
                             p=inicio;
                             while (p!=NULL){
                                   if (p->codigo==codigo){
                                       achou =1;                  
                                      if (p->anterior==NULL)
                                         if (p->proximo==NULL)
                                         inicio=ultimo=NULL;
                                         free(p);
                                         break;
                                                             }
                                   
                                   else{
                                        inicio=p->proximo;
                                        inicio->anterior=NULL;
                                        free(p);
                                        }
                                         if(p->proximo==NULL){
                                             ultimo=p->anterior;
                                             ultimo->proximo=NULL;
                                             free(p);
                                             break;
                                             }else{p1=p->anterior;
                                                   p2=p->proximo;
                                                   p1->proximo=p2;
                                                   p2->anterior=p1;
                                                   free(p);
                                                   break;
                                                   }
                                                   
                                                   p=p->proximo;
                                                   }
                             if (achou ==0)
                             printf("\n codigo %d não localizado\n",codigo);
                             else 
                                  printf("\n Sucesso. Registro codigo %d excluido\n",codigo);
                                  system ("pause");
                                                   
                             }     
 

Link para o comentário
Compartilhar em outros sites

1 resposta a esta questão

Posts Recomendados

  • 0

use o botão <> e escolha c/c++ para apresentar o código, aumentará a chance de obter resposta.

Basicamente para guardar uma struct você deve escolher o tipo de ficheiro, entre binário ou  testo plano, abrir o arquivo em modo escritura(w) ou anexar(a). Dependendo de qual tipo de arquivo você escolheu você pode usar umas funções ou outras para salvar os dados. Se escolheu arquivo binário e pretende salvar a representação da memória da estrutura(int, float, char...), deveria usar fwrite e fread. Por outro lado se escolheu arquivo de testo plano(txt), você pode usar fscanf e fprintf, e também serializar os dados(converter em um string).

Link para o comentário
Compartilhar em outros sites

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.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,5k
×
×
  • Criar Novo...