Консоль.В строке чтения отсутствуют входные данные при записи в цикле While

#c# #loops #console-application

#c# #циклы #консоль-приложение

Вопрос:

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

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

Первое окно консоли при выполнении приведенного ниже кода без цикла While Без цикла While

Второе окно консоли, заключенное в цикл While (n = оба пользовательских ввода находятся в одной строке, и количество припоев пустое. введите описание изображения здесь

     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  ;
        }
    }
}
  

Ответ №1:

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

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

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

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

 Console.ReadKey();
  

Ответ №2:

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

 Console.Read();
  

…с:

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