我在c#中使用的方法遇到了一些问题。我试图阻止用户进入y和n之外的任何其他内容。这几乎是我想要的工作,但用户仍然可以输入多个标志,然后它不起作用!如何检查char是否多于一个char?我以为tryParse解决了这个问题?谢谢!
// Method to check if item is food or not
private void ReadIfFoodItem()
{
Console.Write("Enter if food item or not (y/n): ");
if (char.TryParse(Console.ReadLine(), out responseFoodItem))
{
if(Char.IsNumber(responseFoodItem))
{
Console.WriteLine(errorMessage);
ReadIfFoodItem();
}
else
{
// Set true or false to variable depending on the response
if ((responseFoodItem == 'y' || responseFoodItem == 'Y'))
{
foodItem = true;
selectedVATRate = 12; // Extra variable to store type of VAT
}
else if ((responseFoodItem == 'n' || responseFoodItem == 'N'))
{
foodItem = false;
selectedVATRate = 25; // Extra variable to store type of VAT
}
else
{
Console.WriteLine(errorMessage);
ReadIfFoodItem();
}
}
}
}
答案 0 :(得分:1)
char
表示单个字符,因此How can I do to also check if char is more than one char? I thought the tryParse solved that?
似乎有点荒谬...... TryParse
将尝试解析输入中的单个字符,如果值为{{},则会显式失败{1}}或者长度> 1 1。
不要检查字符,只需检查字符串,例如:
null
答案 1 :(得分:1)
以下代码“有效”,因为它产生了预期的结果。
char responseFoodItem;
Console.Write("Enter if food item or not (y/n): ");
if (char.TryParse(Console.ReadLine(), out responseFoodItem))
{
// Set true or false to variable depending on the response
if ((responseFoodItem == 'y' || responseFoodItem == 'Y'))
{
Console.WriteLine("foodItem = true");
}
else if ((responseFoodItem == 'n' || responseFoodItem == 'N'))
{
Console.WriteLine("foodItem = false");
}
else
{
Console.WriteLine("Unrecognised input");
}
}
else
{
Console.WriteLine("Invalid input");
}
但是,还有其他人指出,如果要将输入限制为单个密钥,使用ReadKey
是更好的解决方案。这也意味着用户无需按Return / Enter键即可接受输入。
答案 2 :(得分:0)
char.TryParse
只是尝试解析作为参数提供的字符串,它不会限制您可以使用Console.ReadLine
输入控制台的字符数。
当用户输入多个字符时,char.TryParse
将失败,因为Console.ReadLine
返回的字符串不包含单个字符。
您应该使用Console.Read
代替。
答案 3 :(得分:0)
如何检查char是否有多个char?
string line = Console.ReadLIne();
If(!string.IsNullOrEmpty(line) && line.Length > 1)
用于读取单个字符而是使用Console.ReadChar()
。
答案 4 :(得分:0)
Console.ReadLine允许用户键入任意长度的字符串并按Enter键。
如何检查char是否有多个char?我以为tryParse解决了这个问题?
将指定字符串的值转换为其等效的Unicode字符。返回码表示转换是成功还是失败....如果s参数为null 或s的长度不为1,则转换失败。
您是否尝试使用Console.ReadKey而不是ReadLine?
答案 5 :(得分:0)
要检查用户是否插入了多个字符,您可以检查字符串长度而不是使用Char.TryParse
......
private void ReadIfFoodItem()
{
string answer=string.empty;
Console.Write("Enter if food item or not (y/n): ");
answer=Console.ReadLine()
if (answer.lenght>=1))
{
//error
.......
}
...............
答案 6 :(得分:0)
使用Console.ReadKey()限制字符数。要测试您是否有Y或N,您可以比较ASCII代码或使用正则表达式。
答案 7 :(得分:0)
这个答案可以帮到你:How can I limit the number of characters for a console input? C#
控制台不限制用户输入(确实如此,但是限制为256个字符),char.TryParse
也没有做任何事情来限制输入长度。
答案 8 :(得分:0)
您可以尝试使用Console.ReadKey 这只是用户的一次击键,你知道不会有多个字符。
答案 9 :(得分:0)
为什么不与输入字符串进行比较?
为什么不简化比较?
using System.Linq;
private static string[] ValidAnswers = new string[]{ "y", "yes" };
// Method to check if item is food or not
private void ReadIfFoodItem() {
Console.Write("Enter if food item or not (y/n): ");
string ans = Console.ReadLine();
// Checks if the answer matches any of the valid ones, ignoring case.
if (PositiveAnswers.Any(a => string.Compare(a, ans, true) == 0)) {
foodItem = true;
selectedVATRate = 12; // Extra variable to store type of VAT
} else {
foodItem = false;
selectedVATRate = 25; // Extra variable to store type of VAT
}
}
或者,正如其他人所说,您可以使用Console.ReadKey()。