我一直试图弄清楚这几次尝试,但我似乎无法理解为什么这条线会执行?
Console.WriteLine("请输入一个数字。");
我甚至在输入任何字符作为输入之前就在屏幕上显示它。 任何帮助表示赞赏
int numberAsInt;
while (true) {
try {
numberAsInt = Convert.ToInt32(Console.ReadLine());
break;
}
catch {
Console.WriteLine("please enter a number.");
}
}
答案 0 :(得分:3)
catch块被触发的原因是由以下原因引起的异常:
Convert.ToInt32(Console.ReadLine())
ReadLine()
方法将读取您已输入的内容 - 即使没有任何内容。来自MSDN:
[返回]输入流中的下一行字符,如果没有更多行可用,则返回null。
如果标准输入设备是键盘,则ReadLine方法将阻塞,直到用户按下Enter键。
答案 1 :(得分:1)
您不应该使用try / catch来检查您的输入。更好的方式:
int numberAsInt;
while (true) {
String str = Console.ReadLine();
if (int.TryParse(str, out numberAsInt)) {
break;
}
Console.WriteLine("please enter a number.");
}
答案 2 :(得分:1)
无需使用无限while
循环和try/catch
块来验证用户是否输入了有效号码,您可以使用int.TryParse()
代替。
int num;
string input = "";
while (!int.TryParse(input, out num))
{
Console.Write("Enter a number:");
input = Console.ReadLine();
}
Console.WriteLine("Number entered:" + num);
答案 3 :(得分:1)
要搭载Emerson Chen's answer,原因是因为Console.Readline将从控制台中提取信息...它在代码逻辑之外运行。
这意味着它不会等到您输入Console.Readline()
才能获得输入。声音不应该发生在代码的同步位中吗?好吧,想一想:无论你是否告诉它,控制台都会继续工作。
这是一个可能出错的快速示例。您向控制台写了一条消息,告诉用户将手远离键盘:
Console.WriteLine("Please don't type anything for 2 seconds.");
好。现在用户不会弄乱任何东西,你可以做你的工作2秒,期望没有用户输入:
var startTime = DateTime.Now;
while (DateTime.Now < startTime.AddSeconds(2)) ;
好的,现在我们已准备好接受一些输入:
Console.WriteLine("Please enter a value.");
var inputVal = Console.ReadLine();
Console.WriteLine("The value entered was: " + inputVal);
效果很好。但是等一下,如果Johnny用户忽略了警告,并键入&#34; 100&#34;然后点击&#34;输入&#34;密钥在2秒之前过去了吗?在这种情况下,它全部由控制台记录,并在到达该行代码时尽职地传递给Console.ReadLine()
... 在用户输入后。