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:
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: