To com um problema muito estranho, parace q ele executa o loop 2 vezes antes de parar no scanf novamente.
Ele entra no loop para no scanf, ai digito sei lá h
> h (ta no scanf e digito h)
default (imprime msg do default)
> defalt (imprime o > pula o scanf imprime o default)
> (aqui imprime > e para no scanf)
do{
printf("> ");
scanf("%c",&c);
switch (c){
case 'n':
printf("n\n");
break;
case 'r':
printf("r\n");
break;
case 'm':
printf("m\n");
break;
case 'e':
printf("e\n");
break;
case '?':
printf("?\n");
break;
default:
printf("defaul\n");
break;
}
}while(c!='q' && c!='f' && c!='x');
Tive esse mesmo problema, na hora que você executa o scanf, ao invés de utilizar %c (caracter), utilize %s (string) que irá funcionar. Se eu entendi sua pergunta, acho que é isso.
Provavelmente o caractere de quebra de linha ('\n') está sendo empilhado na pilha de scanf's e faz com que o seu programa receba duas entradas: o caractere digitado e o '\n'. O scanf coloca todas as entradas do programa em uma espécie de fila e vai os pegando conforme é chamado. Quando você digita h<aperta enter>, ele considera o caractere h e empilha o '\n' junto. Para evitar isso, tente fazer scanf("%c ", &caractere); ou scanf(" %c", &caractere); que seu programa irá pular as quebras de linhas sem problema.
Só uma curiosidade: se quiserem entender o que eu disse acima, tentem criar uma série de comandos para o programa de vocês, copiem esses comandos e colem no programa de vocês (assim que estuver tudo ok). Se nada der errado, ele vai executar todas as instruções exatamente na ordem em que foi passada na colagem. Em Linux dá para fazer algumas brincadeiras com arquivos de texto, repassando o conteúdo desse arquivo integralmente para o programa (não manjo muito bem disso, mas acredito que seja "./ep3 < cat instrucoes.txt"). Taí uma boa maneira de vocês padronizarem os testes de vocês e descobrir como um monitor corrige os EPs =P
Abraços!
Só uma curiosidade: se quiserem entender o que eu disse acima, tentem criar uma série de comandos para o programa de vocês, copiem esses comandos e colem no programa de vocês (assim que estuver tudo ok). Se nada der errado, ele vai executar todas as instruções exatamente na ordem em que foi passada na colagem. Em Linux dá para fazer algumas brincadeiras com arquivos de texto, repassando o conteúdo desse arquivo integralmente para o programa (não manjo muito bem disso, mas acredito que seja "./ep3 < cat instrucoes.txt"). Taí uma boa maneira de vocês padronizarem os testes de vocês e descobrir como um monitor corrige os EPs =P
Abraços!
bom a parte do pau com o enter funcionou mas na parte de digitar o nome do conjunto eu fiz como o exemplo do prof no posfixa.
i=-1;
do{
i++;
scanf("%c", &nome[i]);
}while(i<10 && nome[i] != '\n');
se digito a mais ele fica só com os 10 primeiros mas usa o resto como comando no programa
se digito a menos ele fica esperando mais como se a checagem != '\n' não funcionasse. tente " %c" , "%c " e " %c " e nada.
i=-1;
do{
i++;
scanf("%c", &nome[i]);
}while(i<10 && nome[i] != '\n');
se digito a mais ele fica só com os 10 primeiros mas usa o resto como comando no programa
se digito a menos ele fica esperando mais como se a checagem != '\n' não funcionasse. tente " %c" , "%c " e " %c " e nada.
Para esse caso, acho melhor você usar direto o scanf("%s", string);. Sua string de nome provavelmente tem tamanho fixo e o scanf nesse modo ignora quebras de linha (se não me engano).
Abraços!
Abraços!