Console.ReadLine отсутствует вход при записи в цикле while - PullRequest
0 голосов
/ 06 апреля 2019

У меня есть две строки ввода, которые принимают пользовательский ввод, но при записи в цикле while первый пользовательский ввод игнорируется

Я пробовал это на C #, хотя цикл while и обе строки пользовательского ввода принимаются.

Первое консольное окно при выполнении кода ниже без цикла while Without While Loop

Второе консольное окно, когда оно заключено в цикл «В то время как» (n = оба пользовательских ввода находятся в одной строке, а число припоев пусто). enter image description here

    public static void Main(string[] args)
    {
        String numSoldiers; //number of soldiers
        String arms; // power
        int Q = 1;

        while (Q <= 4)
        {
            Console.Write("Enter Total Number of Soldiers: ");
            numSoldiers = Console.ReadLine();

            Console.Write("Enter number of arms: ");
            arms = Console.ReadLine();

            Console.WriteLine("There are " + numSoldiers + " soldiers and " + arms + " arms");

            Console.Read();

            Q++;
        }
    }
}

Ответы [ 2 ]

4 голосов
/ 06 апреля 2019

Полагаю, вы хотели позволить пользователю нажать клавишу ввода, прежде чем цикл продолжит свою следующую итерацию, верно?Вот почему вы вызвали Console.Read() в конце цикла.

Однако Console.Read читает только 1 символ, но когда вы нажимаете ввод, на самом деле вводятся 2 символа (по крайней мере, в Windows),и они \r и \n.Console.Read читает \r, оставляя \n непрочитанным.

В следующей итерации цикла первый вызов Console.ReadLine читает \n, который является пустой строкой, поэтомувозвращает пустую строку.Обратите внимание, что пользователь не дождался ввода чего-либо, потому что видит, что некоторые символы еще не прочитаны.

Чтобы исправить это, вы можете вызвать ReadKey вместо Read.

Console.ReadKey();
2 голосов
/ 06 апреля 2019

Попробуйте заменить:

Console.Read();

... на:

Console.WriteLine();
Console.ReadKey(true);
...