我在这里使用什么而不是int? C#CMD

时间:2017-03-16 11:07:37

标签: c# string int

所以我只是试着开始编码一般而且我试图在C#中制作一个计算器并且它确实有效但我不能输入0.4问题或高于9个数字否则我的计算器给了我这个错误:值对于Int32来说太大或太小。

我搜索了问题并被引导到这个网站,这里的人们正在讨论使用字符串代替。我尝试过,但它告诉我,我不能使用 - 运算符或*运算符。

对不起,我甚至问这个问题有可能是一个非常简单的解决方案,但我希望有人能回答这个问题。

class Program
{
    //Ints
    public static int value1;
    public static int value2;
    public static int result;
    public string input = Console.ReadLine();

    static void Main(string[] args)
    {
        while (true)
        {
            Console.ForegroundColor = ConsoleColor.Green;
            Console.WriteLine($"Choose your mathmetical operator:  (A)dd  (S)ubtract  (M)ultiply");
            if (Console.ReadLine() == "A")
            {
                Console.WriteLine("Enter 2 values.");
                value1 = Convert.ToInt32(Console.ReadLine());
                value2 = Convert.ToInt32(Console.ReadLine());
                Add(value1, value2);
            }
        }
    }

    static void Add(int value1, int value2)
    {
        result = value1 + value2;
        Console.WriteLine($"{result}");
        Console.ReadLine();
        Console.Clear();
        result = 0;
        value1 = 0;
        value2 = 0;
    }

    static void Subtract(int value1, int value2)
    {
        result = value1 - value2;
        Console.WriteLine($"{result}");
        Console.ReadLine();
        Console.Clear();
        result = 0;
        value1 = 0;
        value2 = 0;
    }

    static void Multiply(int value1, int value2)
    {
        result = value1 * value2;
        Console.WriteLine($"{result}");
        Console.ReadLine();
        Console.Clear();
        result = 0;
        value1 = 0;
        value2 = 0;
    }
}

}

3 个答案:

答案 0 :(得分:2)

您的问题是您要将输入分配给Int32,这是一个INTEGER编号,这意味着0.4无效,整数也有这些限制:

   Type      Capacity

   Int16 -- (-32,768 to +32,767)

   Int32 -- (-2,147,483,648 to +2,147,483,647)

   Int64 -- (-9,223,372,036,854,775,808 to +9,223,372,036,854,775,807)

取自this answer

如果您想继续使用整数,可以考虑改用Int64。否则你应该使用Double

编辑似乎decimal更适合计算器。

答案 1 :(得分:2)

在分析了你的代码后,所有的逻辑似乎都没问题,但看起来你并不了解数据类型。这是你应该开始的,on this page你可以阅读有关C#的内置数据类型。

您应该知道的另一件事是如何更改(或转换)数据类型。在您的代码中,您希望该用户将遵循您的规则并正确输入所有内容。你必须将你的最终用户(甚至是你自己)视为一个完全愚蠢的人,它会在字段中插入"#6; ,特别是对于数字类型。将要求用户输入generic输入类型的简单示例如下所示:

public static TResult AskForInput<TResult>(string message)
{
    bool isValid = false;
    while(!isValid)
    {
        Console.WriteLine(message);
        string value = Console.ReadLine();
        try
        {   
            TResult result = (TResult)Convert.ChangeType(value, typeof(TResult));
            return result;
        }
        catch
        {
            Console.WriteLine("Input does not match requested type");
        }
    }
}

最后但我想说最重要的是你希望用户输入带有预定义小数点(.)的值,例如。 0.4。此十进制标记取决于当前的文化信息,该信息在以下位置定义: System.Globalization.CultureInfo.CurrentCulture.NumberFormat.NumberDecimalSeparator

因此,例如,您希望将此应用程序发送给不同国家/地区的朋友,并且在他们的文化中,他们使用逗号(,)小数点。如果您想自己解析,那么您的应用程序可能会失败。请务必检查此设置或将其包含在转换方法中。

对于您的示例,我建议使用double数据类型,因为它在数学运算中常用。将它与您的代码结合起来可能看起来有点类似:

public static void Main(string[] args)
{
    //Your code goes here
    //while (true)
    {
        Console.WriteLine("Choose your mathmetical operator:  (A)dd  (S)ubtract  (M)ultiply");
        if (Console.ReadLine() == "A")
        {
            Console.WriteLine("Enter 2 values.");
            double value1 = AskForInput<double>("Enter left value :");
            double value2 = AskForInput<double>("Enter right value :");
            Add(value1, value2);
        }
    }
}

public static TResult AskForInput<TResult>(string message)
{
    bool isValid = false;
    TResult result = default(TResult);
    while(!isValid)
    {
        Console.WriteLine(message);
        string value = Console.ReadLine();
        try
        {   
            result = (TResult)Convert.ChangeType(value, typeof(TResult));
            isValid = true;
        }
        catch(Exception ex)
        {
            Console.WriteLine("Input does not match requested type");
        }
    }
    return result;
}

static void Add(double value1, double value2)
{
    double result = value1 + value2;
    Console.WriteLine(result);
}

static void Subtract(double value1, double value2)
{
    double result = value1 - value2;
    Console.WriteLine(result);
}

static void Multiply(double value1, double value2)
{
    double result = value1 * value2;
    Console.WriteLine(result);
}

Check this online

答案 2 :(得分:1)

如前所述,您应该使用Int64,Double或甚至Decimal。除此之外,还有其他一些问题。也许这些可以成为学习点:

  • 你没有使用变量输入,非常奇怪的是你正在将它初始化为Console.ReadLine(),摆脱它。
  • 虽然(true)不是一个好的循环条件。您打算如何关闭该应用程序?。
  • 您正在混合业务逻辑和演示文稿。 Add,Multiply和Subtract应该只进行计算(业务逻辑)并让主循环进行演示(Console.WriteLine())。
  • value1和value2是值参数,它们在业务逻辑函数之外没有任何意义,因此在返回之前不需要将它们设置为0。
  • +1使用$&#34; {result}&#34;格式字符串。