C# 允许用户仅输入字符串作为答案
我想让一个用户只被允许输入字母,这是我到目前为止尝试过的,但是当用户输入一个数字或其他任何东西时,控制台应用程序就会继续C# 允许用户仅输入字符串作为答案,c#,asp.net,.net,C#,Asp.net,.net,我想让一个用户只被允许输入字母,这是我到目前为止尝试过的,但是当用户输入一个数字或其他任何东西时,控制台应用程序就会继续 static public string Ask(string question) { do { Console.Write(question); return Console.ReadLine(); } while (Regex.IsMatch(Console.Rea
static public string Ask(string question)
{
do
{
Console.Write(question);
return Console.ReadLine();
} while (Regex.IsMatch(Console.ReadLine(), @"^[a-zA-Z]+$"));
}
提前感谢。问题是您返回的是第一个
控制台.ReadLine()
的结果,因此您的循环不会继续到while
子句
您需要做的是创建一个字符串变量并赋值,然后在while子句中检查它:
public static string Ask(string question)
{
string input;
do
{
Console.Write(question);
//Assigns the user input to the 'input' variable
input = Console.ReadLine();
} //Checks if any character is NOT a letter
while (input.Any(x => !char.IsLetter(x)));
//If we are here then 'input' has to be all letters
return input;
}
注意,我还使用Linq的Any()
代替了Regex。对我来说似乎更容易,而且可能更快(太懒了,无法进行基准测试)
Fiddle问题是您正在返回第一个
Console.ReadLine()
的结果,因此您的循环永远不会继续到while
子句
您需要做的是创建一个字符串变量并赋值,然后在while子句中检查它:
public static string Ask(string question)
{
string input;
do
{
Console.Write(question);
//Assigns the user input to the 'input' variable
input = Console.ReadLine();
} //Checks if any character is NOT a letter
while (input.Any(x => !char.IsLetter(x)));
//If we are here then 'input' has to be all letters
return input;
}
注意,我还使用Linq的Any()
代替了Regex。对我来说似乎更容易,而且可能更快(太懒了,无法进行基准测试)
Fiddle你不应该回到循环中。创建一个
字符串输入
变量并在循环中分配该变量,然后当循环退出时返回输入
变量。如果在循环中返回,则不应在循环内返回。创建一个字符串输入
变量,并在循环中分配该变量,然后当循环退出时返回输入
变量。你在循环中的返回哇,刚才Any()让我大吃一惊,我不知道有这么简单的解决方案。多谢各位。我还添加了Console.WriteLine(“只允许使用字母”);只是为了让用户更清楚。非常感谢。@Robertme开始看看Linq,它是C#/(英语)中的一个游戏改变者。你能给我推荐一些教程或网站吗?我真的很想学习C#:)@Robertme文档,这是一个很好的开始。@Robertmex=>
部分是一个很好的开始。基本上是一个“匿名函数”。本质上,这个表达式就像在问:如果input
(x=>
)中的任何字符不是字母(!char.isleter(x)
)。哇,刚才any()让我大吃一惊,我不知道有这么简单的解决方案。多谢各位。我还添加了Console.WriteLine(“只允许使用字母”);只是为了让用户更清楚。非常感谢。@Robertme开始看看Linq,它是C#/(英语)中的一个游戏改变者。你能给我推荐一些教程或网站吗?我真的很想学习C#:)@Robertme文档,这是一个很好的开始。@Robertmex=>
部分是一个很好的开始。基本上是一个“匿名函数”。本质上,这个表达式类似于询问:input
(x=>
)中的任何字符是否不是字母(!char.isleter(x)
)。