Tenet1001 Ответов: 3

Я пытаюсь заставить свой проект сказать что-то, если этот bool оценивается как true, и что-то еще, если false.


using System;

namespace AgeGuesser
{
    class Program
    {
        static void Main(string[] args)
        {
            int agevalue;

            bool yes = true;
            int maxGuesses = 5;
            int guesses = 1;
            int ntries = 2;
            int tries = 1;
            string appName = "Age Guesser";
            string version = "1.0.0";
            string appAuthor = "Tenet";
            Console.WriteLine($"{appName}: Version {version} Author {appAuthor}");

            while (true)
            {
                Console.WriteLine($"try: #{tries} | Input your age please: ");

                var age = Console.ReadLine();

                if (Int32.TryParse(age, out agevalue))
                {
                    
                    if (agevalue <= 100 && agevalue > 0)
                    {

                        Console.WriteLine("Is this right?(Y/N): " + agevalue);

                        if (Console.ReadKey().Key == ConsoleKey.Y) break;

                        Console.Clear();

                    }
                    else Console.WriteLine("You are either too young to play this or too old to be alive...try again mate");
                }



                if (++tries > ntries) break;


            }
            
            Random random = new Random();
            while (true)
            {

                int guess = random.Next(agevalue - 8, agevalue + 8);
                Console.WriteLine($"\n{agevalue}");
                Console.WriteLine($"Guess: #{guesses}");
                Console.WriteLine(guess);
                Console.WriteLine("Did I get it?");
                if (Console.ReadKey().Key == ConsoleKey.Y) break;
                


                if (++guesses > maxGuesses) break;
                {
                    yes = false;
                }
                if (yes == true)
                    Console.WriteLine("Yay I got it");
                else
                    Console.WriteLine("\nSorry, I didn't guess correctly. I'll try again!");
            }
            
            


        }
    }
}


Что я уже пробовал:

Поместите yes == true внутри оператора while и переместите операторы break.

0x01AA

может быть, просто проблема нижнего / верхнего регистра?
Если нет, пожалуйста, опишите, чего вы ожидаете и что получаете

Richard Deeming

"Слишком стар, чтобы жить"?

Хотя это еще не является обычным явлением, некоторые люди действительно живут за пределами 100 в наши дни. По последним оценкам, в 2015 году в США их было около 72000, а в мире-примерно 451000.

Возможно, вы захотите немного увеличить этот лимит. :)

3 Ответов

Рейтинг:
1

Richard MacCutchan

Вы могли бы немного упростить код догадки:

if (Console.ReadKey().Key == ConsoleKey.Y)
{
    // user responded yes
    Console.WriteLine("Yay I got it");
    break;
}
// user did not respond yes, so see if number of guesses exceeds the maximum
else if (++guesses > maxGuesses)
{
    // too many guesses
    Console.WriteLine("\nOK, you beat me!");
    break;
}
else
{
    // not reached max so try another guess
    Console.WriteLine("\nSorry, I didn't guess correctly. I'll try again!");
}


Tenet1001

Спасибо! Сработало как по волшебству!

Richard MacCutchan

Добро пожаловать.

Рейтинг:
0

OriginalGriff

Посмотрите на свой код:

if (++guesses > maxGuesses) break;
{
    yes = false;
}
Вот где правильный отступ действительно пригодится ...
Единственный код, который выполняется, когда guesses превышает maxGuesses это одно утверждение: break;
Если бы он был внутри фигурных скобок все было бы по другому:
if (++guesses > maxGuesses)
{
     yes = false;
     break;
}
Пожалуйста, попробуйте это в Visual Studio: CTRL+K, D - он переформатирует ваш документ в соответствии с вашим предпочтительным стилем отступа, который должен лучше отображать подобные проблемы.


Рейтинг:
0

Patrice T

Перемещение перерыва вокруг не очень хорошая идея

if (++guesses > maxGuesses) break; // because of the break here
{
    yes = false; // this is not part of the if
}

С отладчиком вы бы сами это увидели, вам не нужно представлять себе, что происходит, вы это видите.
Цитата:
Я пытаюсь заставить свой проект сказать что-то, если этот bool оценивается как true, и что-то еще, если false.

Ваш код ведет себя не так, как вы ожидаете, или вы не понимаете, почему !

Существует почти универсальное решение: запускайте свой код на отладчике шаг за шагом, проверяйте переменные.
Отладчик здесь, чтобы показать вам, что делает ваш код, и ваша задача-сравнить с тем, что он должен делать.
В отладчике нет никакой магии, он не знает, что должен делать ваш код, он не находит ошибок, он просто помогает вам, показывая, что происходит. Когда код не делает того, что ожидается, вы близки к ошибке.
Чтобы увидеть, что делает ваш код: просто установите точку останова и посмотрите, как работает ваш код, отладчик позволит вам выполнять строки 1 на 1 и проверять переменные по мере их выполнения.

Отладчик - Википедия, свободная энциклопедия[^]

Освоение отладки в Visual Studio 2010 - руководство для начинающих[^]
Базовая отладка с помощью Visual Studio 2010 - YouTube[^]

Отладка кода C# в Visual Studio - YouTube[^]

Отладчик здесь только для того, чтобы показать вам, что делает ваш код, и ваша задача-сравнить его с тем, что он должен делать.