是/否菜单使用字符无法正常工作

时间:2016-03-15 23:10:37

标签: c# io console-application

我正在尝试创建一个简单的菜单,您可以选择一个选项或另一个选项继续。这个菜单使用“读”或“写”作为两个选项,而不是“是”或“否”,但概念当然是相同的。代码看起来像这样......

public void Start()
    {
        char selection;
        do
        {
            Console.WriteLine("Would you like to read (r) or write (w) to a file?");
            selection = (char) Console.Read();
        } while (selection != 'r' || selection != 'w');
    }

现在,当您输入“r”或“w”时,这不仅不会停止循环,而且在您之后的任何时间按Enter键后它会输出3行WriteLine文本。

任何人都可以解释如何解决这个问题吗?我假设我不正确地使用Read()方法,但作为我的新手,我发现很难简单地试验和错误通过一些事情。任何帮助都会很棒。提前谢谢。

修改

public void Start()
    {
        char selection = 'y';
        while(selection == 'y')
        {
            Console.Write("Would you like to continue...");
            selection = (char)Console.Read();
            Flush();
        }
    }

public void Flush()
    {
        while(Console.In.Peek() != -1)
        {
            Console.In.Read();
        }
    }

3 个答案:

答案 0 :(得分:2)

selection != 'r' || selection != 'w'永远是真的。如果selectionr,则selection != 'w'部分为真,如果selection不是r,则selection != 'r'部分为真,所以你要么false || true(这是真的),要么true || ...(后一个操作数并不重要),这也是正确的。

您可能想要while (selection != 'r' && selection != 'w')

答案 1 :(得分:0)

Console.Read()将为您输入键入的字符。一旦他们输入了' r'停了。不是你想要的吗? 点击ENTER实际上会生成2个字符,因此它会再次打印出提示2次。 也许你只想要这个:

public void Start()
{
    char selection;
    Console.WriteLine("Would you like to read (r) or write (w) to a file?");
    do
    {
        selection = (char) Console.Read();
    } while (selection != 'r' && selection != 'w');
}

答案 2 :(得分:0)

解决问题的另一种方法是使用中断调用中断循环,然后返回插入的值。 例如:

class Program
{
    static void Main(string[] args)
    {
        char selection = read_or_write();
        Console.WriteLine("char in main function: "+selection);
        Console.WriteLine("press enter to close");
        Console.ReadLine(); //clean with enter keyboard
    }
    public static char read_or_write()
    {
        char selection;
        Console.WriteLine("Would you like to read (r) or write (w) to a file?");
        do
        {
            selection = (char)Console.Read();
            Console.ReadLine();//clean with enter keyboard
            if (selection == 'r')
            {
                Console.WriteLine("You pressed r");
                break;
            }
            else if (selection == 'w')
            {
                Console.WriteLine("You pressed w");
                break;
            }
            else
            {
                Console.WriteLine("You pressed a wrong key!");
            }
        } while (selection != 'r' || selection != 'w');
        return selection;
    }
}