C# Пока l oop с несколькими операторами || (или) не работает - PullRequest
0 голосов
/ 23 марта 2020

У меня есть следующий C# Код

int amount_guesses = 2;
int c_answer = 4;
int u_answer = 0;

Console.WriteLine("Guessing Game");
Console.WriteLine("*Hint:The number is between 1 and 5");
Console.WriteLine("*Hint:You only get 2 guesses");

while (u_answer != c_answer || amount_guesses != 0)
{
    u_answer = Convert.ToInt32(Console.ReadLine());
    amount_guesses = amount_guesses-1;
    if (u_answer == c_answer)
    {
        Console.WriteLine("Well Done that is the Correct Number");
    }
    else
    {
        Console.WriteLine("Wrong Number!Try again.You have {0} trys left", amount_guesses);
    }
}

Console.WriteLine("Press any key to close");
Console.ReadLine();

Но он не выпрыгивает из l oop, когда требования в выражении while не выполнены.
Я также пытался

while ((u_answer != c_answer) || (amount_guesses != 0))

Но это все еще не работает, я прекратил изменять логи c на это:

int amount_guesses = 2;
int c_answer = 4;
int u_answer = 0;

Console.WriteLine("Guessing Game");
Console.WriteLine("*Hint:The number is between 1 and 5");
Console.WriteLine("*Hint:You only get 2 guesses");

while (u_answer != c_answer && amount_guesses != 0)
{
    u_answer = Convert.ToInt32(Console.ReadLine());
    amount_guesses = amount_guesses-1;
    if (u_answer == c_answer)
    {
        Console.WriteLine("Well Done that is the Correct Number");
        amount_guesses = 0;
    }
    else
    {
        Console.WriteLine("Wrong Number!Try again.You have {0} trys left", amount_guesses);
    }
}

Console.WriteLine("Press any key to close");
Console.ReadLine();

Это прекрасно работает, но я хотел знать, почему мой код вверху где я использую || не работает?

Ответы [ 2 ]

1 голос
/ 23 марта 2020

Это распространенная (i sh) проблема при использовании отрицания в логических логиках c. ИЛИ звучит так, как будто это должно быть правильно, так как это соответствует английскому языку sh, но на самом деле И это то, что вы хотите.

Я стараюсь всегда писать условие проверки на равенство, а затем отрицать его, поэтому вместо этого из:

u_answer != c_answer && amount_guesses != 0

Вы можете написать:

!(u_answer == c_answer || amount_guesses == 0)

То же самое условие.

Взгляните на Закон де Моргамса , также легче запомнить как

Прервать линию, изменить знак

1 голос
/ 23 марта 2020

A while l oop продолжается , пока выполняется его условие. В вашем случае вы хотите продолжить l oop до тех пор, пока игрок не угадает число и у него останутся догадки. Вы должны использовать && (логическое И) условие, а не ||:

while (u_answer != c_answer && amount_guesses != 0)
{
    // Here ----------------^
...