C# IF оператор двойной результат - PullRequest
0 голосов
/ 02 февраля 2020

Я новичок в C# обучении, я следовал учебному пособию, а затем сам пытался выдавать сообщение об ошибке каждый раз, когда мое утверждение IF ложно. вот код:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;



namespace ConsoleApp1
{
    class Program
    {
        static void Main(string[] args)
        {

            string SecretWord = "Banana";
            string Guess = "";
            int GuessCount = 0;
            int GuessLimit = 4;
            bool OutOfGuesses = false;


            while (Guess != SecretWord && !OutOfGuesses)             
            {
                if (GuessCount < GuessLimit)
                {
                    Console.Write("Enter a Guess: ");
                    Guess = Console.ReadLine();
                    GuessCount++;

                } else

                {
                    OutOfGuesses = true;
                }

                if (Guess != SecretWord)
                {
                    Console.WriteLine("Wrong Guess");

                }



            }  

              if (OutOfGuesses)
            {

                Console.WriteLine("You Lose");

            }   else {

                Console.WriteLine("You Win!");

            }               




            Console.ReadLine();

        }

    }
}

Вывод такой:

Введите догадку: dsadasd

Неправильная догадка

Введите догадку: dsdasd

Неверное предположение

Ввод догадки: dasdas

Неверное предположение

Ввод догадки: dasdas

Неверное предположение

Неправильная догадка

Вы проиграли

Я не могу понять, почему я получаю двойное "Неправильное предположение" в конце . кто-нибудь знает почему?

Ответы [ 2 ]

2 голосов
/ 02 февраля 2020

Окончательное время около ...

  1. guess все еще не равно secretword
  2. OutOfGuesses еще не верно
  3. GuessCount < GuessLimit равно True

Таким образом, вы не задаете вопрос, вы устанавливаете OutOfGuesses равным True, но тогда, когда guess не совпадает с secretword, вы печатаете сообщение снова.

Чтобы это исправить, вам нужно установить для OutOfGuesses значение true вне блока if/else. Проверьте, достигли ли они своего предела, и установите для него значение True в конце l oop.

, то есть что-то вроде ...

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;


namespace ConsoleApp1
{
    public class Program
    {
        public static void Main(string[] args)
        {

            string SecretWord = "Banana";
            string Guess = "";
            int GuessCount = 0;
            int GuessLimit = 4;
            bool OutOfGuesses = false;


            while (Guess != SecretWord && !OutOfGuesses)             
            {
                Console.Write("Enter a Guess: ");
                Guess = Console.ReadLine();
                GuessCount++;

                if (GuessCount >= GuessLimit)
                {
                    OutOfGuesses = true;
                }

                if (Guess != SecretWord)
                {
                    Console.WriteLine("Wrong Guess");

                }

            }  

            if (OutOfGuesses)
            {
                Console.WriteLine("You Lose");

            } 
            else 
            {
                Console.WriteLine("You Win!");
            }                

            Console.ReadLine();

        } 
    }
}
0 голосов
/ 02 февраля 2020

Dasdas не является вашим секретным словом, поэтому утверждение if является истинным, если вы вставите Banana, ваше утверждение if будет ложным

...