【问题标题】:I am having issues with my simple calculator program breaking in C# when I enter a letter rather than a variable [closed]当我输入字母而不是变量时,我的简单计算器程序在 C# 中出现问题[关闭]
【发布时间】:2013-02-17 06:48:18
【问题描述】:

例如,当我的程序要求输入一个数字并且我输入一个字母时,程序退出。那么当输入一个字母时,我怎样才能让它什么都不做呢? 我用 'int' 或 'strings' 看到了这个,但没有看到 'doubles' 这真的让我很困惑,我不太明白这些是如何修复的

 static void Main(string[] args)
    {
        Console.WriteLine("type 'Exit' to leave this program.");
        Console.ReadLine();
        Console.Clear(); 
    Valuechoice: Console.WriteLine("Please choose a number.");
        double value1 = Convert.ToDouble(Console.ReadLine());     
        Console.WriteLine("Please choose a second Number.");
        double value2 = Convert.ToDouble(Console.ReadLine());
        Console.WriteLine("What would you like to do to these numbeers?");
        Console.WriteLine("Multiply");
        Console.WriteLine("Divide");
        Console.WriteLine("Add");
        Console.WriteLine("subtract");
        string operation = Console.ReadLine();
        Console.WriteLine();
        Console.Clear();
        if (operation == "Multiply")
        {
            double total1;
            total1 = (value1 * value2);
            Console.WriteLine(total1);
            Console.ReadLine();
            Console.Clear();
            goto Valuechoice;
        }
        if (operation == "Divide")
        {
            double total2;
            total2 = (value1 / value2);
            Console.WriteLine(total2);
            Console.ReadLine();
            Console.Clear();
            goto Valuechoice;
        }
        if (operation == "Add")
        {
            double total3;
            total3 = (value1 + value2);
            Console.WriteLine(total3);
            Console.ReadLine();
            Console.Clear();
            goto Valuechoice;

        }
        if (operation == "Subtract")
        {
            double total4;
            total4 = (value1 - value2);
            Console.WriteLine(total4);
            Console.ReadLine();
            Console.Clear();
            goto Valuechoice;

        }
        if (Console.ReadLine() == "Exit")
        {
            Environment.Exit(0);
        }

【问题讨论】:

  • 只需将用户的输入读取为String,然后在尝试将其转换为Double之前确定它是否是字母
  • 这个问题实在是太本地化了。你最好用更一般的形式来表述你的问题。
  • 您还可以捕获 Convert.ToDouble 引发的异常。

标签: c# calculator letters-and-numbers


【解决方案1】:

Convert.ToDouble 将抛出 FormatException 如果输入不是有效的双精度。请改用double.TryParse

例如,您可以执行以下操作来不断向用户询问有效号码:

double value1;

while(!double.TryParse(Console.ReadLine(), out value1)) 
{
    Console.WriteLine("Please choose a valid number");
}

而且这里真的没有理由使用goto。我建议重组你的程序以使用循环。

【讨论】:

  • 感谢它就像一个魅力。你能解释一下如何使用循环吗?我只是在学习如何编程。
  • @TheMightyQuin: MSDN's documentation on the while loop 很好——基本上它只是重复块内的代码,直到括号内的条件为假。
【解决方案2】:

使用TryParse - 类似这样:

double value1;
while (!double.TryParse(Console.ReadLine(), out value1) {
  Console.WriteLine("Please enter a valid number");
}

【讨论】:

    【解决方案3】:

    您不能将字母转换为双精度数,即数字。这就像说把“e”变成十进制的 34.72。这是不可能的。

    试试这样的:

    bool valid = true; // locally declared variable, this is important!
    
    string value = Console.ReadLine();
    valid = validateInput(value);
    
    if (valid == true) {
    double value1 = Convert.ToDouble(value);
    // Proceed with calculations, etc
    }
    
    private bool validateInput(string value) {
    bool valid = true;
    foreach (char c in value)
        {
            if (char.IsLetter(c))
                valid = false;
            Console.WriteLine("Input is invalid!");
        }
    return valid;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-09-29
      • 2017-04-18
      • 1970-01-01
      • 2011-11-15
      • 1970-01-01
      • 2021-04-01
      • 1970-01-01
      相关资源
      最近更新 更多