#c# #loops #console-application
#c# #циклы #консоль-приложение
Вопрос:
У меня есть две строки ввода, которые принимают пользовательский ввод, но при записи в цикле While первый пользовательский ввод игнорируется
Я пробовал это на C # без цикла 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);