我想就这里我出错的地方提出一些建议。控制台应用程序显示菜单选项并要求用户输入有效的菜单选项。
现在它的意思是如果输入的数字是1,2或3,它会显示'你选择了选项x'然后'按任意键关闭',但程序没有显示'你已选择选项x'然后'按任意键关闭'。如果数字小于1或大于3,则表示“菜单选择不在1-3之间”,然后“请重新输入”。我哪里错了?
我没有进行很长时间的编程,如果我这次可以纠正错误,我知道将来。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace _4._6
{
class Program
{
static void Main(string[] args)
{
int iChoice = 0;
Console.WriteLine("1: Add two numbers");
Console.WriteLine("2: Multiply two numbers");
Console.WriteLine("3: Exit the program");
Console.WriteLine("Enter your choice: ");
iChoice = Convert.ToInt32(Console.ReadLine());
while (iChoice < 1 || iChoice > 3)
{
Console.WriteLine("Menu choice not between 1-3: ");
Console.Write("Please re-enter: ");
iChoice = Convert.ToInt32(Console.ReadLine());
Console.ReadKey();
if (iChoice > 1 || iChoice < 3)
{
Console.WriteLine("You have chosen option " + iChoice);
iChoice = Convert.ToInt32(Console.ReadLine());
Console.ReadKey();
}
}
}
}
}
答案 0 :(得分:2)
你的内心如果永远不能被输入,因为它与外部的条件相矛盾:
像这样改变
while (iChoice < 1 || iChoice > 3)
{
Console.WriteLine("Menu choice not between 1-3: ");
Console.Write("Please re-enter: ");
iChoice = Convert.ToInt32(Console.ReadLine());
Console.ReadKey();
}
Console.WriteLine("You have chosen option " + iChoice);
另请注意,代码中第二个if的条件是错误的
答案 1 :(得分:0)
如果阻止应该在阻止之外。因为如果条件为假,你的while块不会运行if块。这意味着你不允许你的if块检查它的状况
答案 2 :(得分:0)
您在代码中的两个位置分配给iChoice
。也许说起来不那么令人困惑:
Console.WriteLine("1: Add two numbers");
Console.WriteLine("2: Multiply two numbers");
Console.WriteLine("3: Exit the program");
Console.WriteLine("Enter your choice:");
int iChoice;
while (true)
{
int.TryParse(Console.ReadLine(), out iChoice);
if (iChoice >= 1 && iChoice <=3)
break; // choice is OK
Console.WriteLine("Menu choice not between 1-3.");
Console.Write("Please re-enter:");
}
Console.WriteLine("You have chosen option " + iChoice);
// ...
注意:我刚刚将Convert.ToInt32
更改为int.TryParse
。优点是,如果用户键入的内容不是数字,例如“sdfih”,则只会使iChoice
为零,而不是使应用程序崩溃。