C# loop 在移动到第二个语句之前循环第一个语句三次
C# loop loops the first statement three times before moving to the second statement
我在 C# 的控制台应用程序中编写了这个 do-while 循环:
do
{
ThisHelp.ShowMenu();
userChoice = (char) Console.Read();
ThisHelp.Helpon(userChoice);
}while(ThisHelp.IsValid(userChoice) == false);
方法 ThisHelp.ShowMenu()
只有一堆 Write + WriteLine 方法,它们要求用户键入 1 到 8 之间的数字。
ThisHelp.Helpon()
方法有一个开关,根据传递的用户输入,显示不同的文本。
方法 ThisHelp.IsValid
只是检查用户输入的是从 1 到 8 的数字。
问题来了:用户输入一个数字并按下回车后,循环的第一条语句执行了3次,第二条语句至少执行了一次。为什么会这样?
编辑:这是 ThisHelp.IsValid
方法的代码,应要求:
public bool IsValid(char ch)
{
if (ch < '1' | ch > 8 & ch != 'q') return false;
else return true;
}
Console.Read()
通常只有 returns 当用户按下 return - 此时回车 return 和换行也会 由对 Console.Read()
的后续调用 return 编辑。您可以通过在每次迭代中记录(或在调试器中检查)userChoice
的值来验证这一点。
只调用 Console.ReadLine()
可能会更简单,它将消耗整行,然后将该值转换为整数。
问题是 Console.Read()
returns 用户输入的每个字符。所以如果他输入 8
和 然后按 ENTER 你会得到三个字符:
8
\r
(回车return)和
\n
(换行)
你可能更愿意使用这个:
char userChoice = Console.ReadLine().Trim()[0];
但一定要为空输入添加一些错误处理。
您可以尝试将循环的后两行合二为一。尝试这样的事情:
ThisHelp.Helpon(Char.Parse(Console.Readline()));
我在 C# 的控制台应用程序中编写了这个 do-while 循环:
do
{
ThisHelp.ShowMenu();
userChoice = (char) Console.Read();
ThisHelp.Helpon(userChoice);
}while(ThisHelp.IsValid(userChoice) == false);
方法 ThisHelp.ShowMenu()
只有一堆 Write + WriteLine 方法,它们要求用户键入 1 到 8 之间的数字。
ThisHelp.Helpon()
方法有一个开关,根据传递的用户输入,显示不同的文本。
方法 ThisHelp.IsValid
只是检查用户输入的是从 1 到 8 的数字。
问题来了:用户输入一个数字并按下回车后,循环的第一条语句执行了3次,第二条语句至少执行了一次。为什么会这样?
编辑:这是 ThisHelp.IsValid
方法的代码,应要求:
public bool IsValid(char ch)
{
if (ch < '1' | ch > 8 & ch != 'q') return false;
else return true;
}
Console.Read()
通常只有 returns 当用户按下 return - 此时回车 return 和换行也会 由对 Console.Read()
的后续调用 return 编辑。您可以通过在每次迭代中记录(或在调试器中检查)userChoice
的值来验证这一点。
只调用 Console.ReadLine()
可能会更简单,它将消耗整行,然后将该值转换为整数。
问题是 Console.Read()
returns 用户输入的每个字符。所以如果他输入 8
和 然后按 ENTER 你会得到三个字符:
8
\r
(回车return)和\n
(换行)
你可能更愿意使用这个:
char userChoice = Console.ReadLine().Trim()[0];
但一定要为空输入添加一些错误处理。
您可以尝试将循环的后两行合二为一。尝试这样的事情:
ThisHelp.Helpon(Char.Parse(Console.Readline()));