GrabiCraft Ответов: 3

Проблемы с булевыми значениями в C#


Почему этот код не работает? Кажется, что-то не так с этой штукой swtitch bool, потому что я ничего не делаю. Когда я запускаю программу (Кстати, это не вся программа, пожалуйста, прокомментируйте, если вам это нужно для решения проблемы) и заканчиваю все уровни, включая Уровень босса, я просто получаю заголовок меню уровня, но ничего больше.

Спасибо за вашу помощь!

Кстати извините за использование gotos пожалуйста не пламите меня
Кстати, 2 я совершенно новый и начал 2 дня назад с c#.

if (num001 == answer01)
            {

                Console.Write("What is " + num19 + " plus " + num20 + "?: ");
                int answer = Convert.ToInt32(Console.ReadLine());
                if (answer == num19 + num20)
                {

                    Console.WriteLine("Well done! Your answer is correct. \nCONGRATS! You mastered the first level \nPress any key to go to the Level selection");
                    l1finished = !l1finished;
                    Console.ReadKey();
                    

                    goto LevelMenu;


                }
                else
                {

                    Console.WriteLine("Are you even trying?");
                    Console.ReadKey();
                    goto Menu;

                }
            }


        LevelMenu:
            Console.WriteLine("                                                       Level Menu");
            for (int i = 1; i <= 27; i++)
            {
                Console.WriteLine();
            }
            int answer02 = Convert.ToInt32(Console.ReadLine());
            if (l1finished == true)
            {
                Console.WriteLine("Press 1 to enter the Main Menu. Press 2 to enter next Level");
                if (answer02 == 1)
                {
                    goto Menu; //I know gotos aren't the best. Plaese leave me!
                }
                if (answer02 == 2)
                {
                    goto Menu; //Level 2 doesn't exist yet. Please don't flame me!
                }

                else
                {
                    Console.WriteLine("            You have to finish Level 1 first! Come back again later.");
                }
            }


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

Я также попробовал l1finished = = true, но это тоже, похоже, не работает.

F-ES Sitecore

После того как вы напечатаете заголовок вы сделаете это

int answer02 = преобразовать.ToInt32 (Консоль.Линия чтения());

это ожидание ввода, поэтому он не будет проверять, завершен ли L1, пока вы не нажмете enter.

3 Ответов

Рейтинг:
26

Andy Lanng

Цитата:
Кстати извините за использование gotos пожалуйста не пламите меня

Ха-два дня, и ты уже знаешь самого большого жука-медведя каждого ;)

Переключатель здесь: l1finished = !l1finished; не нужен. Просто используйте l1finished = true;

В сегменте "LevelMenu:" вы пишете "меню уровня" + 27 четких строк, но просите ввести данные, прежде чем проверить, закончен ли уровень:
int answer02 = преобразовать.ToInt32 (Консоль.Линия чтения());

Консоль будет ждать ввода, прежде чем двигаться дальше.


GrabiCraft

Спасибо. Теперь он работает! (;

Andy Lanng

НП ^_^
Пожалуйста, взгляните на Решение 3. Обучение использованию отладчика в бесценном!

Рейтинг:
2

Patrice T

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

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

Отладчик-Википедия, свободная энциклопедия[^]
Освоение отладки в Visual Studio 2010 - руководство для начинающих[^]

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


F. Xaver

5fed, потому что я не вижу причин, почему это имеет 2 голоса 1Star..

Patrice T

Спасибо.
Жаль видеть, как не любят рекомендовать отладчик.

F. Xaver

debbuging означает, что вы должны сделать работу самостоятельно ;)

Рейтинг:
0

Alex Banu

чтобы прочитать входные данные попробуйте сделать вот так:

int op = 0;
string in = string.Empty;
do
{
  Console.WriteLine("enter choice");
  in = Console.ReadLine();
} while (!int.TryParse(in, out op));