我正在尝试运行一个控制台应用程序,该应用程序允许用户选择他们想在PC上运行的作业类型,并且他们的响应将转换为程序运行的功能。现在它的编写方式将锁定,当用户输入除4之外的任何选项将成功关闭程序时不允许任何其他内容。
static void Main(string[] args)
{
int userInput = 0;
DisplayMenu();
do
{
if (userInput == 1)
{
QuickClean();
}
else if (userInput == 2)
{
DeepClean();
}
else if (userInput == 3)
{
SuperClean();
}
} while (userInput != 4);
}
static public int DisplayMenu()
{
Console.WriteLine("");
Console.WriteLine();
Console.WriteLine("1. Quick Clean");
Console.WriteLine("2. Deep Clean");
Console.WriteLine("3. Super Clean (admin needed)");
Console.WriteLine("4. exit");
var result = Console.ReadLine();
return Convert.ToInt32(result);
}
static void QuickClean()
{
Console.WriteLine("quickclean");
Console.ReadLine();
}
static void DeepClean()
{
Console.WriteLine("deepclean");
Console.ReadLine();
}
static void SuperClean()
{
Console.WriteLine("superclean");
Console.ReadLine();
}
答案 0 :(得分:2)
DisplayMenu方法会返回您的用户选择的内容,但您不会将此返回值分配给 usermenu 本地变量。
正如您现在所写的那样,您只需要输入一次,然后进入循环而不将本地变量 usermenu 设置为用户选择,因此当它到达时间时它仍为零测试退出条件,循环进入无限状态。
您需要将调用移动到循环内的 DisplayMenu 并将返回值分配给 usermenu ,这样您的用户就可以再次看到菜单并输入不同的选项,你可以执行所需的操作。
static void Main(string[] args)
{
int userInput = 0;
do
{
userInput = DisplayMenu();
if (userInput == 1)
{
QuickClean();
}
....
} while(userInput != 4)
}
我建议更改DisplayMenu中的代码,并避免使用Convert.ToInt32来解析用户输入。如果用户没有输入数字,Convert.ToInt32将使您的程序崩溃。而是使用Int32.TryParse
static public int DisplayMenu()
{
Console.Clear();
while(true)
{
Console.WriteLine("");
Console.WriteLine();
Console.WriteLine("1. Quick Clean");
Console.WriteLine("2. Deep Clean");
Console.WriteLine("3. Super Clean (admin needed)");
Console.WriteLine("4. exit");
int result;
if(Int32.TryParse(Console.ReadLine(), out result))
return result;
else
Console.WriteLine("Please enter a number");
}
}
答案 1 :(得分:0)
您没有将返回值存储在任何位置。调用userInput
后DisplayMenu()
仍为0,这就是您进入do-while
的infite循环的原因。
do{
int userInput = DisplayMenu();
[...]
} while (userInput != 4)