控制台应用程序崩溃/没有响应
本文关键字:响应 应用程序 崩溃 控制台 | 更新日期: 2023-09-27 18:00:10
堆栈溢出社区。
我正在编写一个程序,将华氏温度转换为摄氏度,将摄氏度转换为华氏度。该程序有一个简单的菜单,并通过用户输入来选择一个选项。我实现了一个小的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");
}
}
}
如果输入的文本无法解析,那么您的行option = int.Parse(Console.ReadLine());
将引发异常。考虑使用TryParse方法:
if (!int.TryParse(Console.ReadLine(), out option) {
option = -1; // Set option to represent an invalid option.
}
Jameslat-正如FlsZen在上面的评论中所建议的那样
更换
option = int.Parse(Console.ReadLine()); // Original code
带有
if ( !int.TryParse(Console.ReadLine(), out option))
{
option = -1;
}
使用TryParse可以通过检查布尔类型的返回值来检查操作是否成功。返回值为false表示解析不成功,在代码片段中,解析会将值-1分配给名为"option"的变量。
http://msdn.microsoft.com/en-us/library/system.int32.tryparse.aspx