我正在尝试创建一个简单的菜单,您可以选择一个选项或另一个选项继续。这个菜单使用“读”或“写”作为两个选项,而不是“是”或“否”,但概念当然是相同的。代码看起来像这样......
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();
}
}
答案 0 :(得分:2)
selection != 'r' || selection != 'w'
永远是真的。如果selection
为r
,则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;
}
}