首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何检查用户输入是否为数字,然后在C#中显示消息?

如何检查用户输入是否为数字,然后在C#中显示消息?
EN

Stack Overflow用户
提问于 2021-01-14 23:46:32
回答 4查看 2K关注 0票数 2

所以这是我自己学习的第二天,我确信这是一个非常初级的问题,但是我用类型或尝试解析来查找我发现的东西,但我似乎不知道如何使用它们。我可能不应该在这个学习阶段尝试这个,但我想无论如何我还是会问,因为我真的想知道如何去做。我正在学习一个教程,但是如果用户输入不是数字的话,它就不包括在内了。这是我的基本计算器:

代码语言:javascript
运行
复制
using System;

namespace Tutorials
{
    class Program
    {
        static void Main(string[] args)
        {
            string opError = "Invalid Operator";
            string numError = "Enter a valid number";

            Console.Write("Enter a number: ");
            double num1 = Convert.ToDouble(Console.ReadLine());

            Console.Write("Enter Operator: ");
            string op = Console.ReadLine();

            Console.Write("Enter a number: ");
            double num2 = Convert.ToDouble(Console.ReadLine());


            if (op == "+")
            {
                Console.WriteLine(num1 + num2);
            }
            else if (op == "-")
            {
                Console.WriteLine(num1 - num2);
            }
            else if (op == "/")
            {
                Console.WriteLine(num1 / num2);
            }

            else if (op == "*")
            {
                Console.WriteLine(num1 * num2);
            }
            else
            {
                Console.WriteLine(opError);
            }

            Console.ReadLine();
        }


    }
}

我希望能够检查num1和num2的用户输入是否是一个数字,如果不是,我希望它显示我为numError设置的消息。现在if和the语句对我来说是有意义的,因为我知道正在使用的操作符。当涉及到用户输入时,这可能是任何东西。这就是我不知道该怎么做的地方。我读过关于类型和尝试解析的文章,但我不太明白如何在这段代码中使用它。我尝试过尝试解析,但是一旦输入了一个数字,它就什么也不做了,所以我假设我需要一个if语句,而我在开始的时候还知道如何去做。用我的代码做这件事最好的方法是什么?我看到有更好的方法来做这个计算器,我看过一些例子,但是我正在尝试用我现在的方式来理解它。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2021-01-14 23:57:29

一种解决方案是使用double.TryParse,它返回输入是否是一个有效数字,并且可以在do...while循环中使用,如下所示:

代码语言:javascript
运行
复制
double num1 = 0;
do {
    Console.WriteLine("Enter a number:");
} while(!double.TryParse(Console.ReadLine(), out num1));

它告诉计算机继续提示用户输入,直到解析成功,即您得到了一个有效的号码。

这种方法的一个问题是,它不会告诉用户出了什么问题,只是不断地输入数字。但这是相对简单的,你总是会得到一个数字在最后。

使用double.TryParse和循环的另一种方法是:

代码语言:javascript
运行
复制
double num1 = 0;
while (true) {
    Console.WriteLine("Enter a number:");
    if (double.TryParse(Console.ReadLine(), out num1) {
        // if the parse was successful, we can break out of the loop
        break;
    } else {
        // if the parse was unsuccessful, display an error message and try again
        Console.WriteLine("Invalid number. Try again.");
    }
}

这个版本更复杂,但它告诉用户出了什么问题,IMO更易读,而且在最后总是会得到一个数字。

编辑:添加了第二个版本-谢谢@Tomek

票数 2
EN

Stack Overflow用户

发布于 2021-01-14 23:52:45

不要使用用于在数字类型之间进行转换的Convert.ToDouble(),而是应该使用double.TryParse()将字符串解析为一个数字,比如"1.234"1.234

见下面的示例

代码语言:javascript
运行
复制
class Program
{
    static void Main(string[] args)
    {
        var input = Console.ReadLine();
        if (double.TryParse(input, out double value))
        {
            // use 'value'
        }
        else
        {
            Console.WriteLine("Please enter a valid number.");
        }
    }
}
票数 1
EN

Stack Overflow用户

发布于 2021-01-15 00:23:15

只需用这个代替:

代码语言:javascript
运行
复制
string c = Console.ReadLine();
int value;
if (int.TryParse(c, out value)) 
{ /* some code here */ }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65728519

复制
相关文章

相似问题

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