Usuário com melhor resposta
Dúvida sobre loop DO WHILE

Pergunta
-
Bom dia amigos, sou estudante iniciante na linguagem C#, estava fazendo esse código para praticar mas estou com uma dúvida no loop while, a ideia do meu código é a seguinte: Um "jogo" com dois jogares onde um jogador digita uma palavra e o outro tenta "adivinhar", caso o jogador adivinhe a palavra, este ganha 1 ponto. Vence aquele que acumular 3 pontos primeiro. Mas estou com um problema, ao invés do meu loop encerrar quando um dos dois jogadores alcança 3 pontos, ele só encerra quando ambos os jogadores alcançam 3 pontos, alguém poderia me explicar onde estou errando?
Eis o código:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Jogo_da_Forca
{
class Program
{
static void Main(string[] args)
{
// Pontos pontuacao = new Pontos();
int ponto1 = 0;
int ponto2 = 0;
Console.WriteLine("Jogo da Forca - Um jogador irá escrever uma palavra e outro tentará adivinhar, cada rodada vale um ponto, ganha quem pontuar 3 pontos");
Console.WriteLine("Jogador 1, digite o seu nome");
string nome1 = Console.ReadLine();
Console.WriteLine("Jogador 2, digite o seu nome");
string nome2 = Console.ReadLine();
do {
Console.WriteLine(nome1 + ", escolha uma palavra");
string palavra = Console.ReadLine();
Console.WriteLine(nome2 + ", tente acertar a palavra escolhida");
string tentativa = Console.ReadLine();
if (palavra == tentativa) {
ponto2++;
Console.WriteLine("Parabéns," + nome2 +" você acertou e ganhou 1 ponto, seu placar é de: " + ponto2 + " pontos");
} else
Console.WriteLine("Você errou");
Console.WriteLine(nome2 + ", escolha uma palavra");
palavra = Console.ReadLine();
Console.WriteLine(nome1 + ", tente acertar a palavra escolhida");
tentativa = Console.ReadLine();
if (palavra == tentativa) {
ponto1++;
Console.WriteLine("Parabéns, " + nome1 + " você acertou e ganhou 1 ponto, seu placar é de: " + ponto1 + " pontos");
} else
Console.WriteLine("Você errou");
} while ((ponto1 <= 2) || (ponto2 <= 2));
if (ponto1 == 3) {
Console.WriteLine("O vencedor foi " + nome1);
} else if (ponto2 == 3)
Console.WriteLine("O vencedor foi " + nome2);
Console.ReadKey();
}
}
}
Respostas
-
Bom dia,
Acho que isso está ocorrendo porque você está utilizando o operador Or (||) no seu while, ou seja, enquanto um ou outro é menor ou igual a 2.
Experimente trocar o Or por And.
Espero que ajude
Assinatura: http://www.imoveisemexposicao.com.br
- Marcado como Resposta Hamurabi123 domingo, 8 de novembro de 2020 03:22
-
Conforme o gapimex disse, se você alterar essa linha:
} while ((ponto1 <= 2) || (ponto2 <= 2));
por essa :
} while ((ponto1 <= 2) && (ponto2 <= 2));
irá funcionar de acordo com o que vc quer.
Lembrando que o 'E - &&' será verdade apenas quando todas as condições forem verdadeiras, diferentemente do 'OU - ||' que terá valor verdadeiro quando apenas uma das condições for verdade e a outra falsa.
- Marcado como Resposta Hamurabi123 domingo, 8 de novembro de 2020 03:22
Todas as Respostas
-
Bom dia,
Acho que isso está ocorrendo porque você está utilizando o operador Or (||) no seu while, ou seja, enquanto um ou outro é menor ou igual a 2.
Experimente trocar o Or por And.
Espero que ajude
Assinatura: http://www.imoveisemexposicao.com.br
- Marcado como Resposta Hamurabi123 domingo, 8 de novembro de 2020 03:22
-
Conforme o gapimex disse, se você alterar essa linha:
} while ((ponto1 <= 2) || (ponto2 <= 2));
por essa :
} while ((ponto1 <= 2) && (ponto2 <= 2));
irá funcionar de acordo com o que vc quer.
Lembrando que o 'E - &&' será verdade apenas quando todas as condições forem verdadeiras, diferentemente do 'OU - ||' que terá valor verdadeiro quando apenas uma das condições for verdade e a outra falsa.
- Marcado como Resposta Hamurabi123 domingo, 8 de novembro de 2020 03:22
-
-