Dúvida em C

Não seria mais facil fazer isto no 2º scanf, scanf(" %c",&est_civil),ou seja meter um espaço no " %c" de forma a limpar-mos o buffer do teclado.
O getchar que falaram faz exactamente a mm coisa quando utilizado associado ao \n,ou seja limpa o buffer..

Obrigado
Cumps

tens a certeza que isso funciona?
acho que isso dava para o caso de haver apenas um '\n' no buffer, agora como ele tem mais uma série de caracteres, penso que não funciona (aliás, no primeiro post o essa solução já era usada e aparentemente não estava a funcionar).
 
tens a certeza que isso funciona?
acho que isso dava para o caso de haver apenas um '\n' no buffer, agora como ele tem mais uma série de caracteres, penso que não funciona (aliás, no primeiro post o essa solução já era usada e aparentemente não estava a funcionar).

Não funciona. Pois fazer scanf(" %c",est_civil); só ignora o 1º caracter no buffer. Podia tentar com vários espaços, mas não ia dar jeito uma vez que não sabemos quantos caracteres o utilizador vai escrever.
 
o fflush(stdin) também funciona em Linux. Mas mais uma vez, o seu comportamento não é definido, nem para um SO nem para o outro.

Para quem quer contrariar o uso de um vector de caracteres (memória desnecessária, mas pode-se usar um free(); de qualquer forma, mas pronto), while e ANSI C, tem isto:

Código:
      char cm,cf;
      puts("Gajo:");
      scanf("%20[^\n]",&cm);
      puts("Gaja:");
      scanf(" %c",&cf);
      printf("%c %c\n",cm,cf);
Mas sinceramente.. não compliquem o fácil sff.

Edit:
Já agora, passo a explicar, aquele estilo de formatação no scanf permite ler até ser encontrado um \n, até um máximo de 20 caracteres. É útil para quem pretende ler strings do género

Miguel Warrior <warrior@..>
ou
Warrior<warrior@..>

Mas não sabe quantas palavras existem antes do <. Deste modo não se tem que criar uma função especificamente para o parsing.
 
Última edição:
Back
Topo