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

C# 使用字符的是/否菜单无法正常工作,c#,io,console-application,C#,Io,Console Application,我正在尝试制作一个简单的菜单,您可以选择其中一个选项继续。此菜单使用“读”或“写”作为两个选项,而不是“是”或“否”,但概念当然是相同的。代码看起来像这样 public void Start() { char selection; do { Console.WriteLine("Would you like to read (r) or write (w) to a file?"); sele

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

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方法,但作为一个新手,我发现很难简单地在一些事情上反复尝试。任何帮助都将是惊人的。先谢谢你

编辑


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');
}

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');
}
选择!='r'| |选择!='w’永远是真的。如果选择是r,则选择!='w'部分为真,如果选择不是r,则选择!='r’部分是真的,所以要么是真的假| |真,要么是真的| |。。。后一个操作数不重要,哪一个也是真的

您可能希望在选择时使用它!='r'&选择!='w.

选择!='r'| |选择!='w’永远是真的。如果选择是r,则选择!='w'部分为真,如果选择不是r,则选择!='r’部分是真的,所以要么是真的假| |真,要么是真的| |。。。后一个操作数不重要,哪一个也是真的


您可能希望在选择时使用它!='r'&选择!='另一种解决问题的方法是使用中断调用中断循环,然后返回插入的值。 例如:


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


我对此进行了测试,它确实阻止了文本多次出现,但它的效果似乎并不比另一个好。当敲击不正确的键时,仍然无法结束程序。通常,当while循环没有理由继续时,它会中断,并且没有更多代码来运行应用程序停止,它只允许我继续键入。。。然而,我似乎已经找到了一个解决办法,请看我的编辑。这个很好用。。。但我不太明白,为什么你能给我一些关于为什么这样做的见解?我不得不对代码进行一些修改以使其正常工作,但是……您从未说过希望在键入不正确的字符时结束它。这是不寻常的行为。我测试了这个,它确实阻止了文本多次出现,但它似乎并不比另一个更好。当敲击不正确的键时,仍然无法结束程序。通常,当while循环没有理由继续时,它会中断,并且没有更多代码来运行应用程序停止,它只允许我继续键入。。。然而,我似乎已经找到了一个解决办法,请看我的编辑。这个很好用。。。但我不太明白,为什么你能给我一些关于为什么这样做的见解?我不得不对代码进行一些修改以使其正常工作,但是……您从未说过希望在键入不正确的字符时结束它。那是不寻常的行为。
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;
    }
}