0

我想就我在这里出错的地方提出一些建议。控制台应用程序显示菜单选项并要求用户输入有效的菜单选项。

现在它可以工作了,如果输入的数字是 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();

            }



        }
    }
}

}

4

3 回答 3

2

您的内部 if 永远无法输入,因为它与外部 if 的条件相矛盾:

改成这样

    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 的条件是错误的

于 2012-11-04T15:50:49.937 回答
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应用程序变为零,而不是使应用程序崩溃。

于 2012-11-04T16:15:01.163 回答
0

if 块应该在 while 块之外。因为如果条件为假,您的 while 块将不会运行您的 if 块。这意味着你不允许你的 if 块检查它的条件

于 2012-11-04T15:51:49.697 回答