如何仅允许用户输入中的数字

时间:2017-06-04 16:15:51

标签: c#

我刚从C#开始,我制作了这个非常简单的计算器。首先,您如何看待我的代码,有什么我应该改进的吗?其次,当我要求用户输入2个数字时,如何制作它以便他只能输入数字?如果用户键入不同的字符,则循环卡住并且程序崩溃。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Threading;

namespace App1
{
    class Program
    {
        static void Main(string[] args)
        {
            bool retry = true;
            while (retry)
            {
                retry = true;
                double x1;
                double x2;
                double x3;
                string calc;
                Console.WriteLine("**** Hello, Welcome to Calculator ****");
                Console.WriteLine("Type a number please: ");

                x1 = Convert.ToDouble(Console.ReadLine());
                Console.WriteLine("\n Now type another number: ");
                x2 = Convert.ToDouble(Console.ReadLine());

                Console.WriteLine("\n Now please select a calculation:(/,*,+/-)");
                calc = Convert.ToString(Console.ReadLine());
                if (calc == "*")
                {
                    x3 = (x1 * x2);
                    Console.WriteLine("\n Your Numbers equal = " + x3);
                    retry = false;
                }
                else if (calc == "/")
                {
                    x3 = (x1 / x2); Console.WriteLine("\n Your Numbers equal = " + x3);
                    retry = false;
                }
                else if (calc == "+")
                {
                    x3 = (x1 + x2);
                    Console.WriteLine("\n Your Numbers equal = " + x3);
                    retry = false;
                }
                else if (calc == "-")
                {
                    x3 = (x1 - x2);
                    Console.WriteLine("\n Your Numbers equal = " + x3);
                    retry = false;
                }
                else
                {
                    Console.WriteLine("\n Error, please type one of the 4 calculations: ");
                    retry = true;
                }

                //Don't Exit:
                Console.ReadKey();
                //Don't Exit:
            }
        }
    }
}

1 个答案:

答案 0 :(得分:1)

您可以使用Double.TryParse确保用户的输入是有效的双倍。如果接收到无效输入,则此方法的好处是不会抛出异常。

用法如下:

double x1;
Console.WriteLine("Type a number please: ");
bool success = Double.TryParse(Console.ReadLine(), out x1);

我们在这里做的是告诉C#尝试将输入转换为double。如果此方法有效,则success为真,x1保留该值。如果没有,成功就是假的,不会抛出任何异常。

注意:如果此语法令人困惑,请快速阅读out关键字的文档。

success变量可让您知道用户是否输入了数字。你可以把它全部包装在一个循环中,这样只有当用户输入一个这样的数字时,程序才会进行:

bool success = false;
double x1;
while (!success)
{
    Console.WriteLine("Type a number please: ");
    success = Double.TryParse(Console.ReadLine(), out x1);
}

此循环将一次又一次地重复,直到用户输入一个数字,此时它将退出并且输入将存储在x1中。您可以为第二个数字以及操作输入(加法,乘法等)重复此操作。

如果可以,请提供额外的建议,请查看C#的switch关键字,这样可以避免链接这么多else if语句,以及{{{ 3}}关键字,这使得代码中的retry变量变得不必要。

编辑:为防止"使用未分配的本地变量",您必须为您的号码提供初始值。例如:

double x1 = 0.0;

这不会影响程序,因为假设您使用循环,执行不会进行,直到输入有效数字并且该值已更改。