Ir para conteúdo
Fórum Script Brasil
  • 0

While e seu Loop


Geovani Almeida Meira

Pergunta

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?

Link para o comentário
Compartilhar em outros sites

1 resposta a esta questão

Posts Recomendados

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,5k
×
×
  • Criar Novo...