Saudações! Acabei de me inscrever no fórum (primeiro fórum que me inscrevo) porque estou com uma dúvida que está tirando meu sono:
Como fazer o While verificar a condição no meio da execução dos seus comandos?
Bem, primeiro meu objetivo: Fazer um jogo de perguntas e respostas do tipo múltipla escolha, onde o jogador pode ir respondendo as questões enquanto não tiver errado 3 perguntas.
Estou usando o Dev C++ e escrevendo em C++ também, fiz uma versão menor só pra verificar a funcionalidade, e ficou assim:
#include <iostream>
using namespace std;
int main(void){
int resposta, erros=0, acertos=0;
while (erros<1){
cout<<"\nQual a cor do ceu?\n\t1 - Azul\n\t2 - Rosa\n\t3 - Branco\nResposta: ";
cin>>resposta;
if(resposta!=1){
erros++;
}
else{
acertos++;
}
cout<<"\nQual a cor da agua?\n\t1 - Azul\n\t2 - Rosa\n\t3 - Incolor\nResposta: ";
cin>>resposta;
if(resposta!=3){
erros++;
}
else
acertos++;
// Se o programa chegou aqui, todas as perguntas foram respondidas e deve sair do loop
erros=1;
cout<<"\n\n\t\t Erros: "<<erros;
}
// Exibi a pontuação do jogador
cout<<"\n\n\n\t Sua pontuacao foi: "<<acertos<<"\n\n";
system("PAUSE");
return 0;
}
Ou seja, se errar a primeira pergunta, o jogador não responde a segunda, e se ele acertar as duas, ele sai do programa do mesmo modo, e sua pontuação é igual ao seu número de acertos.
Porém, não está funcionando, quando o jogador erra a primeira pergunta, a variável erros muda pra 1 ou seja, deixou de ser menor que 1 e passou a ser igual, porém o "ENQUANTO" continua seu loop e só volta a verificar a variável quando acaba.
Já tentei usar o break e o continue porém, nenhum dos dois tem os resultados que quero, já que o break sai de todo o bloco do while, então se o contador fosse 3, não importaria, pois no primeiro erro o programa chegaria ao fim.
Eu sei que a solução fácil pra isso seria fazer vários "ifs" antes das questões pra verificar o número de erros. Mas essa é uma solução meio idiota pois iria aumentar muito o tamanho do programa, e eu não estou programando com objetos, então queria saber alguma solução para fazer o While verificar dentro de seu próprio Loop se ela ainda está apto a ser executado ou deveria ser parado, não sei se existe essa possibilidade, pois pelo que eu saiba o funcionamento do While é tosco assim:
Condição -> Executa todos os comandos do bloco -> Volta pra condição
Eu queria algo assim:
Condição -> Comandos !CONDIÇÃO DESFEITA! -> Sai da condição
Eu também pensei em colocar:
if( erros>=3) break;
Ao final de cada pergunta, mas ainda assim, pra mim parece algo muito tosco.
O problema é por ser um programa linear? Não existe realmente outra opção ou eu ainda preciso aprender mais?