Sta*_*s D 0 c# loops console-application do-while
我在C#的控制台应用程序中编写了这个do-while循环:
do
{
ThisHelp.ShowMenu();
userChoice = (char) Console.Read();
ThisHelp.Helpon(userChoice);
}while(ThisHelp.IsValid(userChoice) == false);
Run Code Online (Sandbox Code Playgroud)
该方法ThisHelp.ShowMenu()只有一堆Write + WriteLine方法,它们要求用户输入1到8的数字.该方法ThisHelp.Helpon()有一个开关,根据传递的用户输入,显示不同的文本.该方法ThisHelp.IsValid只检查用户输入是1到8之间的数字.
这是问题:在用户写入数字并按下ENTER后,循环的第一个语句在第二个语句至少执行一次之前执行3次.为什么会这样?
编辑:这是ThisHelp.IsValid方法的代码,如下所示:
public bool IsValid(char ch)
{
if (ch < '1' | ch > 8 & ch != 'q') return false;
else return true;
}
Run Code Online (Sandbox Code Playgroud)
Console.Read()通常只有在用户按下返回时才返回 - 此时回车和换行也将通过后续调用返回Console.Read().您可以通过记录(或在调试器中检查)userChoice每次迭代的值来验证.
调用Console.ReadLine()哪个将消耗整行,然后将该值转换为整数可能更简单.
问题是Console.Read()返回用户输入的每个字符.所以,如果他进入8并然后按回车,你得到三个大字:
8\r (回车)和\n (新队)你可能宁愿用这个:
char userChoice = Console.ReadLine().Trim()[0];
Run Code Online (Sandbox Code Playgroud)
但一定要为空输入添加一些错误处理.