Ir ao conteúdo

Dificuldade Cadastrar Item


BCD1000E

Posts recomendados

Postado

Estou com muita dificuldade em alterar um registro no arquivo, me parece que o fread não funciona ou sei lá olhei tudo e parece tudo certo, preciso de ajuda !

 

Compilado no DevC++ :

 

Codigo em Anexo :

 

 

codigo.txt

Postado

Primeiramente, qual é exatamente o erro,  a partir de qual linha ?(pelo que entendi é na função ALTERAR()). Olhando o teu código, entre algumas coisas estranhas, o que vi de mais grave é que você não fecha o arquivo cad_veiculo na função CADASTRAR

Postado

Tudo bem obrigado por ter visto e respondido,eu consertei este problema havia esquecido.

Erro não mostra nenhum ClodoaldoPeres, é um erro de Logica porque compila tudo e quando escolho a opção 3 ele até pede para digitar a placa, depois quando sai pesquisar parece que ele não compara e nem chega ao fim do arquivo.

 

Fiz umas modificaçoes na funçao ALTERAR(); veja:

 

 

void ALTERAR(void){

     
     char placa[20];
     char opc;
     FILE *file;
     int regnum=0,pos=0;
    
    if((file=fopen("cad_veiculo.txt","r+")) == NULL){       //se o arquivo nao existe mostra a mensagem abaixo e sai
 
                                     printf("\nERRO AO ABRIR O ARQUIVO ! ");
                                    for(int x=0;x<999999999;x++); //um time para dar tempo de ver a mensagem acima
                                     exit(EXIT_SUCCESS);
 
                                                    }
printf("\nDIGITE A PLACA -> ");
fflush(stdin);
fgets(placa,sizeof(placa),stdin);
 
 
while(!feof(file)){
                  
                  fscanf(file,"%20s %20s %5d %20s ",cad.modelo,cad.placa,&cad.ano,cad.descricao);
                  
                                         if(strstr(placa,cad.placa)){     
                                           printf("Modelo :%s\n Placa :%s\n Ano :%d\n Descricao :%s\n",cad.modelo,cad.placa,cad.ano,cad.descricao);
                                           regnum = pos+1;
                                           break;                          
                                                                           }
                                           pos++;
                                           }
                                           
                                           
                                           
               if(regnum==0){
                             printf("\nDESCULPE CADASTRO NAO LOCALIZADO!\n\n\n");
                             
                             }else{
                                   printf("\nDESEJA ALTERAR O REGISTRO?(s/n)");
                                   scanf("%c",&opc);
                                   //getchar();
                                   if(opc=='s' || opc=='S'){
                                               printf("\nATUALIZAR CADASTRO!");
                                               printf("\n\nModelo : ");
                                               fflush(stdin);
                                               fgets(cad.modelo,sizeof(cad.modelo),stdin);
                                               
                                               printf("\nPlaca : ");
                                               fflush(stdin);
                                               fgets(cad.placa,sizeof(cad.placa),stdin);
                                               
                                               printf("\nAno : ");
                                               fflush(stdin);
                                               scanf("%d",&cad.ano);
                                               
                                               printf("\nDescricao : ");
                                               fflush(stdin);
                                               fgets(cad.descricao,sizeof(cad.descricao),stdin);
                                               
                                               printf("\n\n");
                                               //getchar();
                                               
                                               fseek(file,sizeof(struct cad_veiculo)*(regnum-1),SEEK_SET);
                                               fwrite(&cad,sizeof(struct cad_veiculo),1,file);
                                               printf("\t*******ARQUIVO ALTERADO COM SUCESSO******\n\n");
                                               pos=0;
                                               regnum=0;
                                               }
                                   
                                   }   
                  
                  fclose(file);
                  
                                                    
                                                    
                                     
                              
     }
 

 

Dê uma olhada por favor fico no aguardo !

Obrigado

Postado

#include<stdio.h>#include<stdlib.h>#include<conio.h>#include<string.h>struct cad_veiculo{       char modelo[80];       char placa[20];       char descricao[200];       int ano;       }cad;//################### PROTOTIPOS && VARIABLES GLOBAIS ######################       void CADASTRAR(void);       void PESQUISA(char pesq[200]);       void MENU(void);       void ALTERAR(void);      //########################## FUNÇAO PRINCIPAL ################################int main(){      //textcolor(WHITE);  // system("MODE con cols=60 lines=30");   while(1){            MENU();            }    }// ########################## FUNÇOES ##############################################void MENU(void){     int menu=0;     char ch,pesq[200],excluir[200];    printf("\t\tMENU\n\n\n");    printf("1 - CADASTRAR \n\n");    printf("2 - PESQUISAR STRING\n\n");    printf("3 - LOCALIZAR/EDITAR \n\n");    printf("4 - SAIR\n\n");    printf("\n\n############################################\n\n\n");    scanf("%d",&menu);    switch(menu)    {       case 1:             system("cls");             CADASTRAR();             break;       case 2:            system("cls");            printf("Digite o que quer procurar -> ");            fflush(stdin);            fgets(pesq,sizeof(pesq),stdin);            PESQUISA(pesq);            break;      case 3:           system("cls");           ALTERAR();           break;      case 4:           exit(EXIT_SUCCESS);           break;       default:               system("cls");               printf("Desculpe op\x87\xc6o errada !");               ch=getche();               system("cls");    }     }void ALTERAR(void){          char placa[20];     char opc;     FILE *file;     int regnum=0,pos=0;        if((file=fopen("cad_veiculo.txt","r")) == NULL){       //quando você usar fread, aqui você deve abrir como "rb", ou seja, binario. Nesse caso abri como texto                                     printf("\nERRO AO ABRIR O ARQUIVO ! ");									 system("pause");									exit(-1);                                                    }printf("\nDIGITE A PLACA -> ");fflush(stdin);fgets(placa,sizeof(placa),stdin);   while(feof(file) == 0){                          fgets(cad.modelo,sizeof(char)*20,file);//lendo como texto e nao binario		fgets(cad.placa,sizeof(char)*80,file);		fgets(cad.descricao,sizeof(char)*200,file);		fscanf(file,"%d",&cad.ano);			//printf("cad.placa %s - modelo %s descricao %s ano %d ",cad.placa,cad.modelo,cad.descricao,cad.ano);            if(strcmp(placa,cad.placa)==0){                printf("Modelo :%s\n Placa :%s\n Ano :%d\n Descricao :%s\n",cad.modelo,cad.placa,cad.ano,cad.descricao);                regnum = ++pos;                break;                                      }            }                                                 if(regnum==0){                             printf("\nDESCULPE CADASTRO NAO LOCALIZADO!\n\n\n");                                                          }else{                                   printf("\nDESEJA ALTERAR O REGISTRO?(s/n)");                                   scanf("%c",&opc);                                   getchar();                                   if(opc=='s' || opc=='S'){                                               printf("\nATUALIZAR CADASTRO!");                                               printf("\n\nModelo : ");                                               fflush(stdin);                                               fgets(cad.modelo,sizeof(cad.modelo),stdin);                                                                                              printf("\nPlaca : ");                                               fflush(stdin);                                               fgets(cad.placa,sizeof(cad.placa),stdin);                                                                                              printf("\nAno : ");                                               fflush(stdin);                                               scanf("%d",&cad.ano);                                                                                              printf("\nDescricao : ");                                               fflush(stdin);                                               fgets(cad.descricao,sizeof(cad.descricao),stdin);                                                                                              printf("\n\n");                                               getchar();                                                                                              fseek(file,sizeof(struct cad_veiculo)*(regnum-1),SEEK_SET);                                               fwrite(&cad,sizeof(struct cad_veiculo),1,file);                                               printf("\t*******ARQUIVO ALTERADO COM SUCESSO******\n\n");                                               pos=0;                                               regnum=0;                                               }                                                                      }                                       fclose(file);                                                                                                                                                                                                  }void PESQUISA(char pesq[200]){     FILE *file;     char temp[200];     if((file=fopen("cad_veiculo.txt","r")) == NULL){       //se o arquivo nao existe mostra a mensagem abaixo e sai                                     printf("\nERRO AO ABRIR O ARQUIVO ! ");                                    for(int x=0;x<999999999;x++); //um time para dar tempo de ver a mensagem acima                                     exit(-1);                                     }     while(fgets(temp,200,file)!=NULL){                                      if(strstr(temp,pesq)){                                                                                 // textcolor(RED);                                         printf("\n\n%s",strupr(temp));                                         //textcolor(WHITE);                                         printf("\n\n\n");                                         }                                         }                                         fclose(file);                                }//CADASTRA VEICULOvoid CADASTRAR(void){#define ESC 27int year,key=0;FILE *cad_veiculo;cad_veiculo=fopen("cad_veiculo.txt","a");    do{    printf("\t\tCADASTRO\n\n\n");    printf("\t\tPRESSIONE ESC PARA SAIR\n\n\n");    printf("\nModelo : ");    fflush(stdin);//limpando o buffer    fgets(cad.modelo,sizeof(cad.modelo),stdin);        printf("\nAno : ");        fflush(stdin);    scanf("%d",&year);    printf("\nPlaca : ");        fflush(stdin);    fgets(cad.placa,sizeof(cad.placa),stdin);    printf("\nDescricao : ");        fflush(stdin);    fgets(cad.descricao,sizeof(cad.descricao),stdin);    cad.ano=year;       //gravando no arquivo	/**		aqui na hora de gravar você deve obedecer uma ordem para que possa ler. você estava gravando em uma ordem e lendo em outra. Eu alterei a ordem	*/	fprintf(cad_veiculo,"%s" ,cad.modelo);    fprintf(cad_veiculo,"%s",cad.placa);	fprintf(cad_veiculo,"%s",cad.descricao);    fprintf(cad_veiculo,"%d",cad.ano);       fflush(stdin);   printf("\n\nDESEJA CONTINUAR ?\n\n");   printf("DIGITE QUALQUER TECLA PARA CONTINUAR OU ESC PARA SAIR\n\n");   key=getch();	fclose(cad_veiculo);}while(key!=27);  //se precionar ESC sai do programa    system("cls");     }


Segue com comentários. Alterei a <conio.h> só para testar. Talvez não atenda completamente mas já tem a ideia geral

Postado

ClodoaldoPeres meu amigo valeu mesmo tive uma ideia sim me ajudou bastante e aprendi o que queria aprender, fiquei vasculhando livros e livros aqui e nenhum falava isso, fasculhei na net e nada...Obrigado por ter me ajudado por enquanto !!!!

Agora percebi que não dá para você colocar o quer no arquivo txt tipo eu estava colocando Nome : Fulano

Talvez isso atrapalhasse, tirei e deixei como você sugeriu, acontece agora que quando eu vou gravar usando a+, ele grava no final mas ele coloca no final da ultima string ex: 

 

O cadastro tá ficando assim :

 

monza
mon-1994
joia
1994fiat  <----fiat junto com o ano do cadastro anterior
fia-1000
h
1990gol  <----gol junto com o ano do cadastro anterior
gol-4000
n
1990
 
Tem como eu colocar espaço tipo uma nova linha ? Sim eu tentei , fprintf(ptr,"%s\n",cad.placa); 
Mas isso não grava nova linha no arquivo.
Postado

Pode ser feito de várias formas como:

fprintf(cad_veiculo,"%s" ,cad.modelo);    fprintf(cad_veiculo,"%s",cad.placa);	fprintf(cad_veiculo,"%s",cad.descricao);    fprintf(cad_veiculo,"%d\n",cad.ano);// na ultima vez q escrever    

ou

fputc('\n',cad_veiculo); // escreve um caractere

...

Postado

Valeu mesmo ClodoaldoPeres me ajudou muito rapaz !!!

Só uma pergunta que não tem nada ver se quiser responder ok .. senao eu vou entender.

 

Você é formado em que ?

Arquivado

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

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!