3

例如,当我的程序要求输入一个数字并且我输入一个字母时,程序退出。那么当输入一个字母时,我怎样才能让它什么都不做呢?我用'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);
        }
4

3 回答 3

4

Convert.ToDoubleFormatException如果输入不是有效的双精度,将抛出 a 。改为使用double.TryParse

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

double value1;

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

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

于 2013-03-02T22:38:32.670 回答
1

使用TryParse- 像这样的东西:

double value1;
while (!double.TryParse(Console.ReadLine(), out value1) {
  Console.WriteLine("Please enter a valid number");
}
于 2013-03-02T22:39:52.537 回答
0

您不能将字母转换为双精度数,即数字。这就像说把“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;
}
于 2013-03-02T23:16:40.960 回答