1
resposta

Existe uma alternativa para o uso da função break?

Queria saber se há algum outro tipo de solução que não utilize o break nesse código:

#include

#include

#include

#include using namespace std;

int main() { cout << "**" << endl; cout << "* Será que você consegue adivinhar o número secreto? " << endl; cout << "*" << endl; cout << "Escolha o nível de dificuldade." << endl; cout << "Fácil (F), Médio (M), Difícil (D) ou Impossível (I)." << endl;

// escolha do nível e verificação se o nível escolhido é válido.
char nivel;
cin >> nivel;

while (nivel != 'F' and nivel != 'M' and nivel != 'D' and nivel != 'I') {
    cout << "Nível inválido, tente novamente." << endl;
    cin >> nivel;
}

int qtd_tentativas;

if (nivel == 'F') {
    qtd_tentativas = 20;
} else if (nivel == 'M') {
    qtd_tentativas = 10;
} else if (nivel == 'D') {
    qtd_tentativas = 6;
} else if (nivel == 'I') {
    qtd_tentativas = 4;
}

cout << "Você escolheu: " << nivel << endl;

//ínicio das tentativas para acertar o número secreto.
srand(time(NULL));
const int NUMERO_SECRETO = (rand() % 100);
int tentativas = 0;
double pontos = 1000.0;
bool nao_acertou = true;
bool ganhou = false;

for (tentativas = 1; tentativas <= qtd_tentativas; tentativas++) {
         int chute;
         cout << "Tentativa " << tentativas << endl;
         cout << "Qual número você acha que é? " << endl;
         cin >> chute;

    double pontos_perdidos = abs(chute - NUMERO_SECRETO) / 2.0;
    pontos = pontos - pontos_perdidos;
    bool acertou = chute == NUMERO_SECRETO;
    bool maior = chute > NUMERO_SECRETO;

    if (acertou) {
        cout << "Parabéns, esse é o número secreto! " << endl;
        nao_acertou = false;
        break;
    } else if (maior) {
        cout << "O número secreto é menor. " << endl;
    } else {
        cout << "O número secreto é maior." << endl;
    }
}

cout << "Fim de jogo!" << endl;

if (nao_acertou) {
    cout << "Suas tentativas acabaram, tente novamente." << endl;
} else {
    cout << "Você acertou o número secreto em " << tentativas << " tentativas." << endl;
    cout << fixed << setprecision(2);
    cout << "Sua pontuação foi " << pontos << " pontos." << endl;
}
return 0;

}

1 resposta

Olá.

Sim, podemos fazer com um while no lugar do for.

Esse while (!acertou && tentativas < qtd_tentativas) significa que irá ficar no loop enquanto a pessoa não acertou e enquanto o número de tentativas for menor que a quantidade máxima de tentativas.

#include <iostream>
#include <cmath>
#include <cstdlib>
#include <iomanip>

using namespace std;

int main() {
   cout << "**" << endl;
   cout << "* Será que você consegue adivinhar o número secreto? " << endl;
   cout << "*" << endl;
   cout << "Escolha o nível de dificuldade." << endl;
   cout << "Fácil (F), Médio (M), Difícil (D) ou Impossível (I)." << endl;

   // escolha do nível e verificação se o nível escolhido é válido.
   char nivel;
   cin >> nivel;

   while (nivel != 'F'
      and nivel != 'M'
      and nivel != 'D'
      and nivel != 'I') {
      cout << "Nível inválido, tente novamente." << endl;
      cin >> nivel;
   }

   int qtd_tentativas;

   if (nivel == 'F') {
      qtd_tentativas = 20;
   } else if (nivel == 'M') {
      qtd_tentativas = 10;
   } else if (nivel == 'D') {
      qtd_tentativas = 6;
   } else if (nivel == 'I') {
      qtd_tentativas = 4;
   }

   cout << "Você escolheu: " << nivel << endl;

   //ínicio das tentativas para acertar o número secreto.
   srand(time(NULL));
   const int NUMERO_SECRETO = (rand() % 100);
   int tentativas = 0;
   double pontos = 1000.0;

   bool acertou = false;

   while (!acertou && tentativas <= qtd_tentativas) {
      int chute;
      cout << "Tentativa " << tentativas << endl;
      cout << "Qual número você acha que é? " << endl;
      cin >> chute;

      if (chute < NUMERO_SECRETO) {
         cout << "O número secreto é maior" << endl;
      } else if (chute > NUMERO_SECRETO) {
         cout << "O número secreto é menor" << endl;
      }

      double pontos_perdidos = abs(chute - NUMERO_SECRETO) / 2.0;
      pontos = pontos - pontos_perdidos;
      acertou = (chute == NUMERO_SECRETO);
       tentativas++;
   }

   cout << "Fim de jogo!" << endl;

   if (!acertou) {
      cout << "Suas tentativas acabaram, tente novamente." << endl;
   } else {
      cout << "Você acertou o número secreto em " << tentativas << " tentativas." << endl;
      cout << fixed << setprecision(2);
      cout << "Sua pontuação foi " << pontos << " pontos." << endl;
   }

   return 0;
}