c# - C# 如何检查用户输入是否不是数字,然后显示一条消息?

标签 c#

所以这是我自学的第二天,我确信这是一个非常初学者的问题,但是查找我使用 typeof 或 tryparse 找到的东西,但我似乎不知道如何使用它们。我可能不应该在这个学习阶段尝试这个,但我想无论如何我都会问,因为我真的想知道如何去做。我正在关注一个教程,但它不涵盖用户输入是否不是数字。这是我的基本计算器:

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 和 else 语句对我来说很有意义,因为我知道正在使用的运算符。当涉及到用户输入时,可以是任何东西。这就是我对如何去做这件事感到困惑的地方。我读过有关 typeof 和 tryparse 的内容,但我不太明白如何在这段代码中使用它。我用 tryparse 尝试过,但是一旦我输入了一个数字,它就不会执行任何操作,所以我假设我需要一个 if 语句,而我一开始仍然不知道如何做到这一点。使用我的代码执行此操作的最佳方法是什么?我看到有更好的方法来完成这个计算器,我已经看过一些例子,但我正在尝试用我目前的方式来理解它。

最佳答案

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

double num1 = 0;
do {
    Console.WriteLine("Enter a number:");
} while(!double.TryParse(Console.ReadLine(), out num1));

这告诉计算机不断提示用户输入,直到解析成功,即您得到一个有效的数字。

此方法的问题之一是它不会告诉用户出了什么问题,而只是继续输入数字。但它相对简单,最后你总会得到一个数字。


另一种使用方式double.TryParse循环将是:

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

关于c# - C# 如何检查用户输入是否不是数字,然后显示一条消息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65728519/

相关文章:

c# - 缺少程序集时,.NET 应用程序静默无法启动

c# - 与更传统的语言相比,用 F# 编写什么样的应用程序会受益?

c# - 如何记住登录表单的用户名或密码

c# - NRules:匹配集合

c# - 您如何知道 Visual Studio 中的哪个项目最后构建?

windows-10 - 检查是否授予位置权限

c# - 记录为 guid 时无效的转换

c# - 从一个 Entity Framework ExecuteStoreQuery 请求读取多个表。

c# - Repeater 在 PostBacks 上丢失了它的数据

c# - 异常代码,或检测到 "file already exists"类型的异常