в то время как цикл не работает? - PullRequest
0 голосов
/ 04 августа 2011

Может кто-нибудь узнать, почему этот цикл не работает? Я новичок в C #.

while (move == "r" || move == "s" || move == "f")
            {
                Console.Write("\nEnter your move: ");
                move = Console.ReadLine();


                switch (move)
                {
                    case "r":
                        Console.Write("\nYou have reloaded, press enter for Genius");
                        Console.ReadLine();
                        break;
                    case "s":
                        Console.Write("\nYou have shielded, press enter for Genius");
                        Console.ReadLine();
                        break;
                    case "f":
                        Console.Write("\nYou have fired, press enter for Genius");
                        Console.ReadLine();
                        break;
                    default:
                        Console.Write("\nInvalid move, try again\n\n");
                        break;
                }


            }

Ответы [ 2 ]

3 голосов
/ 04 августа 2011

Возможно, потому что перемещение инициализируется внутри цикла и, вероятно, является нулевой или пустой строкой, так как я не вижу код перед циклом, я предполагаю, что он не инициализирован.

Мое предложение заключается в использованиилогический флаг, который установлен как таковой

bool done = false;
while (!done)
{
    // do work
    if (move == finalMove) // or whatever your finish condition is
        done = true; // you could also put this as a case inside your switch
}
1 голос
/ 04 августа 2011

Иисус прав, предлагаю принять его ответ. Вот как вы можете переписать код.

do
            {
                Console.Write("\nEnter your move: ");
                move = Console.ReadLine();


                switch (move)
                {
                    case "r":
                        Console.Write("\nYou have reloaded, press enter for Genius");
                        Console.ReadLine();
                        break;
                    case "s":
                        Console.Write("\nYou have shielded, press enter for Genius");
                        Console.ReadLine();
                        break;
                    case "f":
                        Console.Write("\nYou have fired, press enter for Genius");
                        Console.ReadLine();
                        break;
                    default:
                        Console.Write("\nInvalid move, try again\n\n");
                        break;
                }


            }
 while (move == "r" || move == "s" || move == "f");

Обратите внимание, что если вы получите что-то, кроме "r", "s" или "f", вы напечатаете Invalid move, try again и затем выйдете из цикла (они не смогут повторить попытку). Вместо этого вы можете захотеть назначить ключ (может быть, «q» для выхода), который завершает цикл и меняет ваше условие while на что-то вроде

while (move != "q");
...