Duvida em c

pjgo

Membro
Estou com umas duvidas num codigo de c. Tenho um programa que insere dados numa lista ligado que depois vao ser guardados num ficheiros binario. Ate ai tudo bem. Mas depois de guardados queria saber como alterar um campo de um registo e grava-lo por cima do antigo. Ja tentei varias solucoes mas nenhuma resultou.
A funcao e a seguinte:
Código:
void alterar_restaurante()
{
     int alterar; 
     int op;
     if(head==NULL)
     {
        printf("sem registos\n");
        return;
     }
     struct restaurantes *add= (struct restaurantes*)malloc(sizeof (struct restaurantes));   
     add -> seguinte = NULL;
     struct restaurantes *restaurante=head;
     
     printf("Introduza o codigo do restaurante a alterar \n  ");
     scanf("%d",&alterar);
     while(restaurante!=NULL)
     {   
       if (alterar == restaurante->codigo)
       {
           printf("Restaurante encontrado. O que deseja alterar: \n");
           printf("1-Nome\n");
           printf("2-Localidade\n");
           printf("3-rua\n");
           printf("4-Codigo Postal\n");
           printf("5-Tipo comida:\n");
           printf("6-Dia de Folga:%d\n");
           printf("7-Numero telefone:%d\n");
           printf("8-Inicio do periodo de ferias:\n");
           printf("9-Fim do periodo de ferias:\n");
           printf("10-Observacoes:\n");
           printf("11-Telefone \n");
           printf("12-Sair \n");
           
           do{
           scanf("%d",&op);
           }while ((op<1) || (op>12));
           switch(op)
           {case 1:
                 
                 printf("Nome: ");
              scanf(" %25[^\f\n\r\t\v]s",&add -> nome);
     
                 if(add-> nome == "")
                     printf("Nao introduziu nome. Introduza um nome:\n");
                 else
                     break;
                                  
           case 2:
                printf("Localidade: ");
             scanf(" %25[^\f\n\r\t\v]s",&add -> localidade);
 
                if(add-> localidade == "")
                    printf("Nao introduziu localidade. Introduza uma localidade:\n");
                else
                    break;
                
           case 3:
                printf("\nRua: ");
             scanf(" %25[^\f\n\r\t\v]s",&add -> rua );
   
                if(add-> rua == "")
                    printf("Nao introduziu rua. Introduza uma rua:\n");
                else
                    break;
                
           case 4:
                printf("Codigo Postal: ");            //verificacao da validade do codigo postal
             scanf("%d",&add -> codpostal);
     
             if(add->codpostal<0)
                    printf("Codigo de postal invalido.\n");
                else
                    break;           
                
           case 5:
                printf("E-mail: ");
             scanf(" %25s",&add -> email);
     
             if(add-> localidade == "")
                    printf("Nao introduziu email. Introduza um email:\n");
                else
                    break;
           
           case 6:
                printf("Tipo Comida : ");
             scanf(" %20s",&add -> tipo_comida);
     
             if(add-> tipo_comida == "")
                    printf("Nao introduziu o tipo de comida. Introduza o tipo de comida:\n");
                else
                    break;     
                
           case 7:
                 printf("Dia descanso: ");
              printf("1-Domingo \n 2-Segunda \n 3-Terca \n  4-Quarta \n 5-Quinta \n 6-Sexta \n 7-Sabado"); 
        
              scanf("%d",&add ->folga );
     
              if(add->folga<1|| add->folga>7)
                     printf("Folga invalida.\n");
                 else
                     break;
                
           case 8:     
                 printf("Inicio das ferias ( Dia ): ");
              scanf("%d",&add -> dia_ferias_inicio);
     
              if(add->dia_ferias_inicio<0 || add->dia_ferias_inicio>31)
                     printf("Epoca de ferias invalida.\n");
                 
                         
                 
                 printf("Inicio das ferias ( Mes ): ");
              scanf("%d",&add -> mes_ferias_inicio);
     
              if(add->mes_ferias_inicio<0 || add->mes_ferias_inicio>31)
                     printf("Epoca de ferias invalida.\n");
                 else
                     break; 
                
           case 9:
                 printf("Fim das ferias ( Dia ): ");
              scanf("%d",&add -> dia_ferias_fim);
     
              if(add->dia_ferias_fim<0 || add->dia_ferias_fim>31)
                     printf("Epoca de ferias invalida.\n");
                 
                         
                 
                 printf("Fim das ferias ( Mes ): ");
              scanf("%d",&add -> mes_ferias_fim);
     
              if(add->mes_ferias_fim<0 || add->mes_ferias_fim>31)
                     printf("Epoca de ferias invalida.\n");
                 else
                     break;
                
            case 10:    
                 printf("Observacoes: ");
              scanf(" %40[^\f\n\r\t\v]s",add -> observacoes);
     
              if(add-> observacoes == "")
                     printf("Observacoes invalidas. Introduza observacoes acerca do restaurante");
                 else
                     break;
            
            case 11:
                 printf("Telefone: ");
              scanf("%d",&add -> telefone);
     
              if(add->telefone>999999999 || add->telefone<100000000)
                  printf("Numero de telefone invalido.\n");
                 else
                     break;        
                
            case 12:break;    
           }
           }while(op!=12);
           return;
        }
        restaurante=restaurante->seguinte;  

}
 
Última edição pelo moderador:
Back
Topo