0

スタック オーバーフロー コミュニティ。

華氏温度を摂氏に、摂氏を華氏に変換するプログラムを書いています。プログラムにはシンプルなメニューがあり、オプションを選択するためのユーザー入力を取得します。ユーザーが無効なオプションを入力した場合に備えて、少し do-while ループを実装しました。ユーザーが 1、2、または 3 (有効な 3 つのオプション) を選択すると、プログラムは if ステートメントを実行し、その中のブロック コードを実行して、ループを中断します。ただし、ユーザーが他のもの (無効なオプション) を入力すると、プログラムはブロック コードを else で実行し、ループの先頭に戻り (オプションを選択)、プロセスでフリーズまたはクラッシュします。

コードは次のとおりです。

// James Archbold
// Convert.cs
// A program to convert fahrenheit to celsius or celsius to fahrenheit
//16 February 2013

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

namespace Convert_Temperature
{
class Convert
{
    static void Main(string[] args)
    {
        float F, C;
        string option;

        do
        {
            Console.WriteLine("\nWelcome to 'Convert' program!");
            Console.WriteLine("***********************Menu**********************************");
            Console.WriteLine("1. Fahrenheit to Celsius");
            Console.WriteLine("2. Celsius to Fahrenheit");
            Console.WriteLine("3. Goodbye");

            Console.Write("\nPlease enter an option: ");
            option = Console.ReadLine();

            switch (option)
            {
                case "1":
                    Console.Write("Please enter your Fahrenheit temperature: ");
                    F = int.Parse(Console.ReadLine());
                    C = (5f / 9f) * (F - 32);
                    Console.WriteLine("The temperature is {0} degrees Celsius.", C);
                    Console.ReadKey();
                    break;


                case "2":
                    Console.Write("Please enter your Celsius temperature: ");
                    C = int.Parse(Console.ReadLine());

                    F = 5f / 9f * C - 32;

                    Console.WriteLine("The temperature is {0} degrees Fahrenheit.", F);

                    Console.ReadKey();
                    break;


                case "3":
                    Console.WriteLine("Goodbye!");
                    Console.ReadKey();
                    break;


                default:
                    Console.WriteLine("That is not a valid option!");
                    break;
            }

            Console.WriteLine("Please press Enter to continue...");
            Console.ReadLine();
            Console.WriteLine();

        } while (option != "3");

    }

}

}

4

2 に答える 2

3

option = int.Parse(Console.ReadLine());入力したテキストを解析できない場合、行は例外をスローします。代わりに、 TryParseメソッドの使用を検討してください。

if (!int.TryParse(Console.ReadLine(), out option) {
    option = -1; // Set option to represent an invalid option.
}
于 2013-02-18T16:12:16.203 に答える
1

Jameslat - 上記のコメントで FlsZen が示唆したように

交換

option = int.Parse(Console.ReadLine()); // Original code

if ( !int.TryParse(Console.ReadLine(), out option))
{
    option = -1;
}

TryParse を使用すると、ブール型の戻り値を調べることで、操作が成功したかどうかを確認できます。false の戻り値は、コード スニペットで "option" という名前の変数に値 -1 を割り当てる解析が失敗したことを示します。

http://msdn.microsoft.com/en-us/library/system.int32.tryparse.aspx

于 2013-02-18T17:12:09.893 に答える