首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Console.ReadLine过早激活

Console.ReadLine过早激活
EN

Stack Overflow用户
提问于 2017-01-05 19:09:35
回答 4查看 136关注 0票数 3

我已经尝试过几十次了,但是我似乎不明白为什么执行这一行?

Console.WriteLine(“请输入一个数字”);

在输入任何字符之前,我就会在屏幕上看到它。任何帮助都是非常感谢的。

代码语言:javascript
运行
复制
int numberAsInt;
while (true) {
    try {
        numberAsInt = Convert.ToInt32(Console.ReadLine());
        break;
    }
    catch {
        Console.WriteLine("please enter a number.");
    }
}
EN

回答 4

Stack Overflow用户

发布于 2017-01-05 19:20:32

触发catch块的原因是,有一个异常是由以下原因引起的:

代码语言:javascript
运行
复制
Convert.ToInt32(Console.ReadLine())

ReadLine()方法将读取您已经输入的任何内容--即使没有任何内容。来自MSDN

从输入流返回下一行字符,如果没有更多行可用,则返回null。 如果标准输入设备是键盘,则ReadLine方法会阻塞,直到用户按下Enter键。

票数 3
EN

Stack Overflow用户

发布于 2017-01-05 19:30:46

您不应该使用try/catch检查您的输入。更好的方法:

代码语言:javascript
运行
复制
int numberAsInt;
while (true) {
    String str = Console.ReadLine();
    if (int.TryParse(str, out numberAsInt)) {
        break;
    }
    Console.WriteLine("please enter a number.");
}
票数 1
EN

Stack Overflow用户

发布于 2017-01-05 19:37:24

不需要一个无限while循环和一个try/catch块来验证用户是否输入了一个有效的数字,您可以使用int.TryParse()代替。

代码语言:javascript
运行
复制
int num;
string input = "";

while (!int.TryParse(input, out num))
{
    Console.Write("Enter a number:");
    input = Console.ReadLine();
}

Console.WriteLine("Number entered:" + num);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41492821

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档