遇到我的while循环问题

时间:2012-11-04 15:46:57

标签: c#

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

现在它的意思是如果输入的数字是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();

            }



        }
    }
}

}

3 个答案:

答案 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为零,而不是使应用程序崩溃。