C duvida existencial

Zittoxic

Membro
Boas pessoal, tenho uma duvida existencial, não entendo como é que isto ñ funfa este codigo.
A ideia é vereficar se não existe uma especialidade em duplicado. É um pequeno programa de gerir especialidades medicas. Tenho a impressão q algo me falta no else if.
Agradeço desde já a ajuda.
cumps

Código:
void add_esp()
 {
         for(;;) 
  {
   printf("\n\t**********************************************\n");
   printf("\n \t- Adicione Nome de Especialidade Medidca!\n\n\t");
   fgets( listaE[num_espec].nome, sizeof(listaE[num_espec].nome), stdin );
   if( listaE[num_espec].nome[0] == '\r'  ||  listaE[num_espec].nome[0] == '\n' )
   {
    puts("Não foi adicionado nenhuma especialidade, e a operacao sera abortada." );
    getchar();
    return;
   } 
   if(num_espec==0)
   {
    printf("\n\n\t - Adicione Descricao!\n\n\t");
    fgets( listaE[num_espec].descricao, sizeof(listaE[num_espec].descricao), stdin );
    printf("\n\tPrima S para sair!\n");
                printf("\n\t**********************************************\n");
    fflush(stdin); // limpar o buffer do teclado
    num_espec++;
   }
   else if(num_espec>0) 
   {
    for(  i=0; i< num_espec; i++)
     {
      if(strcmp(listaE[i].nome,listaE[num_espec].nome) == 0 )
      printf("\nEssa especialidade ja existe, favor inserir outra!");
      getchar();
                        return;
     }
   }
   else
   {
    printf("\n\n\t - Adicione Descricao!\n\n\t");
    fgets( listaE[num_espec].descricao, sizeof(listaE[num_espec].descricao), stdin );
    printf("\n\tPrima S para sair!\n");
                printf("\n\t**********************************************\n");
    fflush(stdin); // limpar o buffer do teclado
    num_espec++;
   }
   if (getchar()=='s')break;
  }
 }
 
(...)
else if(num_espec>0)
{
for( i=0; i< num_espec; i++)
{
if(strcmp(listaE.nome,listaE[num_espec].nome) == 0 ){
printf("\nEssa especialidade ja existe, favor inserir outra!");
getchar();
return;}
}
}
else
{

printf("\n\n\t - Adicione Descricao!\n\n\t");
fgets( listaE[num_espec].descricao, sizeof(listaE[num_espec].descricao), stdin );
printf("\n\tPrima S para sair!\n");
printf("\n\t**********************************************\n");
fflush(stdin); // limpar o buffer do teclado
num_espec++;
}
if (getchar()=='s')break;
}
}[/code]


Agora n estou com muita cabeça para isto :D mas o problema principal é que n tens o return dentro do if. Não colocaste os {}. Para além disso, acho que n é preciso a parte de código que coloquei a vermelho. Isto porque seria um else ao if(num_espec>0). Não tenho a certeza pq n experimentei mas deve ser mais ou menos isso.
 
Já está resolvido, estava oultimo o adicionar dentro do for.
a parte laranja estava dentro da vermelha.

Código:
void add_esp()
 {
         for(;;) 
  {
   printf("\n\t**********************************************\n");
   printf("\n \t- Adicione Nome de Especialidade Medidca!\n\n\t");
   fgets( listaE[num_espec].nome, sizeof(listaE[num_espec].nome), stdin );
   if( listaE[num_espec].nome[0] == '\r'  ||  listaE[num_espec].nome[0] == '\n' )
   {
    puts("Não foi adicionado nenhuma especialidade, e a operacao sera abortada." );
    getchar();
    return;
   } 
   else if(num_espec==0)
   {
    printf("\n\n\t - Adicione Descricao!\n\n\t");
    fgets( listaE[num_espec].descricao, sizeof(listaE[num_espec].descricao), stdin );
    printf("\n\tPrima S para sair!\n");
                printf("\n\t**********************************************\n");
    fflush(stdin); // limpar o buffer do teclado
    num_espec++;
   }
   else if(num_espec>0) 
   {
    [COLOR=red]for(  i=0; i< num_espec; i++)[/COLOR]
[COLOR=red]   {[/COLOR]
[COLOR=red]    if(strcmp(listaE[i].nome,listaE[num_espec].nome) == 0 )[/COLOR]
[COLOR=red]    {[/COLOR]
[COLOR=red]       printf("\nEssa especialidade ja existe, favor inserir outra!");[/COLOR]
[COLOR=red]       getchar();[/COLOR]
[COLOR=red]       return;[/COLOR]
[COLOR=red]   }[/COLOR]
[COLOR=red]}[/COLOR]
 
    [COLOR=darkorange]printf("\n\n\t - Adicione Descricao!\n\n\t");[/COLOR]
[COLOR=darkorange]   fgets( listaE[num_espec].descricao, sizeof(listaE[num_espec].descricao), stdin );[/COLOR]
[COLOR=darkorange]   printf("\n\tPrima S para sair!\n");[/COLOR]
[COLOR=darkorange]               printf("\n\t**********************************************\n");[/COLOR]
[COLOR=darkorange]   fflush(stdin); // limpar o buffer do teclado[/COLOR]
[COLOR=darkorange]   num_espec++;[/COLOR]
 
 
[COLOR=darkorange]  }[/COLOR]
 
   if (getchar()=='s')break;
  }
 }

obrigado pessoal
 
Última edição pelo moderador:
Back
Topo