Programa que executa todos o comandos de uma vez só

1. Programa que executa todos o comandos de uma vez só

Dalison
dalison

(usa Slackware)

Enviado em 29/09/2017 - 21:11h

Eu estou tentando criar um programa que simula a prova da PM de pernambuco de 2016 para o meu irmão estudar. Eu criei três variáveis tipo char durante todo o programa: sair, start e letra. Dentro do while quando dou um valor pra start é como se eu tivesse dado o mesmo valor para as três. Além de erros de formatação eu gostaria de saber onde estou errando.
https://hastebin.com/uxoputebir.cpp


  


2. Re: Programa que executa todos o comandos de uma vez só

Paulo
paulo1205

(usa Ubuntu)

Enviado em 29/09/2017 - 23:42h

Por que você declarou funções que retornam dado do tipo char se elas efetivamente não devolvem valor nenhum?

Em todo caso, aparentemente seu problema é que você não está tirando do buffer de leitura o caráter de fim de linha que aparece quando você aperta a tecla Enter, e ele acaba sendo consumido na operação de leitura seguinte.

Em lugar de fazer, por exemplo,

scanf("%c", &letra);
if(letra=='e' || letra=='E') /* ... */


tente o seguinte.

int a, r;

a=b=c=0;
// Note o espaço antes do %c.
r=scanf(" %c%n%*1[\n]%n", &letra, &a, &b);
if(r<=0){
fprintf(stderr, "Erro de leitura.\n");
exit(1);
}
else if(b==0){
// O usuário colocou outros caracteres após a letra, em vez de teclar <Enter>.
fprintf(stderr, "Entrada inválida. Digite apenas uma letra, e tecle <Enter>.\n");
// Esvazia caracteres excedentes.
while((r=getchar())!='\n'){
if(r==EOF){
fprintf(stderr, "Erro de leitura.\n");
exit(1);
}
}
}
else if((letra=tolower(letra))<'a' || letra>'e'){
fprintf(stderr, "Resposta inválida.\n");
}
else if(letra=='e'){
printf("Resposta correta.\n");
nota++;
}
else{
printf("Resposta errada.\n");
}



3. Re: Programa que executa todos o comandos de uma vez só

Dalison
dalison

(usa Slackware)

Enviado em 30/09/2017 - 18:20h

Gostaria que você me explicasse essa linha:
r=scanf(" %c%n%*1[\n]%n", &letra, &a, &b);






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts