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入力が有効な double でない場合は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

文字を数値である double に変換することはできません。「e」を 10 進数の 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 に答える