【问题标题】:Comparing a string and a char c#比较字符串和char c#
【发布时间】:2018-03-14 22:24:22
【问题描述】:

我正在使用 c# 开发控制台 Hangman 游戏。我正在尝试将用户输入的字母与我生成的随机单词中的字母进行比较。我得到的错误是“运算符”== 不能应用于“字符串”和“字符”类型的操作数。我还有什么其他方法可以做到这一点?我搜索了很多,但我没有找到任何想法。

public static void LetterChecker(string word)
    {
        int userGuesses = 6;
        string userInputGuess;

        while(userGuesses > 0)
        {
            Console.WriteLine("Please guess a letter");
            userInputGuess = Console.ReadLine();
            foreach(var letter in word)
            {
                if(userInputGuess == letter)
                {
                    Console.WriteLine("this letter is in word, guess again");
                }
                else
                {
                    Console.WriteLine("Incorrect guess");
                    userGuesses--;
                }
            }
        }
    }

【问题讨论】:

  • 您可以使用Console.ReadKey().KeyChar 而不是Console.ReadLine(),因为您只需要来自用户的单个字符。
  • if(userInputGuess[0] == letter)

标签: c# string char operands


【解决方案1】:

不要使用读取整行的Console.ReadLine,而是使用Console.ReadKey

获取用户按下的下一个字符或功能键。
按下的键显示在控制台窗口中。

char userInputGuess;
...
Console.WriteLine("Please guess a letter");
userInputGuess = Console.ReadKey().KeyChar;

【讨论】:

    【解决方案2】:

    Console.ReadLine() 的返回类型是一个字符串。这样,您的 userInputGuess 是字符串类型,这就是您收到错误的原因。稍作修改,您的代码就可以工作。而不是:

    if(userInputGuess == letter)
    

    使用:

    if(userInputGuess[0] == letter)
    

    这将读取您的行的第一个字母。但正如您可能猜到的那样,这不是这种情况下的最佳解决方案。

    更好的方法是只从控制台读取一个字母。像这样:

    var userInputGuess = Console.ReadKey().KeyChar; (and get rid of the previous declaration)
    

    这样的结果是char类型,比较不会有问题。

    【讨论】:

    • 这里有两件事:userInputGuess[0] 如果用户刚刚按下回车键(生成一个空字符串),则会抛出 IndexOutOfRangeException;并且 userInputGuess 必须声明为 char 才能使用第二种方法
    • 同意。我错过了 char 声明。
    猜你喜欢
    • 2021-12-06
    • 1970-01-01
    • 2013-03-23
    • 1970-01-01
    • 1970-01-01
    • 2017-06-12
    相关资源
    最近更新 更多