0

堆栈溢出社区。

我正在编写一个程序,将华氏温度转换为摄氏度,将摄氏度转换为华氏温度。该程序有一个简单的菜单,并让用户输入来选择一个选项。我实现了一个小的 do-while 循环,以防用户输入无效选项。如果用户选择 1、2 或 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 可以通过检查布尔类型的返回值来检查操作是否成功。错误的返回值表示解析不成功,在代码片段中将值 -1 分配给名为“option”的变量。

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

于 2013-02-18T17:12:09.893 回答