Char tryParse不像我想的那样工作?

时间:2012-01-27 09:57:12

标签: c#

我在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();
                }
            }
        }
    }

10 个答案:

答案 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解决了这个问题?

来自the manual page

  

将指定字符串的值转换为其等效的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()