You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修复C#控制台Hangman游戏重复字母显示异常问题?

C# Hangman游戏重复字母不显示问题修复

你的问题出在那串冗长的else if逻辑上——它是互斥的,每次用户猜字母时,只会检查目标单词的某一个索引位置,匹配到第一个符合的位置后就停止后续检查,导致重复字母只能更新第一个出现的位置,后面的相同字母永远不会被填充。

修复方案

把原来的else if分支替换成遍历整个目标单词字符数组的逻辑,逐个检查每个位置是否和用户输入的字母一致,只要匹配就更新进度数组对应的位置。同时可以加一个布尔变量标记是否命中,用来输出正确的提示。

修改后的完整代码

using System;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("主题是食物");
            string[] words = new string[5];
            words[0] = "potato";
            words[1] = "radish";
            words[2] = "raisin";
            words[3] = "almond";
            words[4] = "lychee";
            Random random = new Random();
            int randomNumber = random.Next(0, 5);
            char[] hangman = words[randomNumber].ToCharArray();

            // 初始化进度数组,适配目标单词长度
            char[] userinput = new char[hangman.Length];
            for (int i = 0; i < userinput.Length; i++)
            {
                userinput[i] = '_';
            }

            Console.WriteLine("游戏开始!你有10次机会猜出所有字母。输入一个你认为在单词里的字母。");
            Console.WriteLine($"提示:单词有{hangman.Length}个字母");

            for (int i = 0; i < 10; i++)
            {
                Console.Write($"第{i+1}次猜测:");
                char user = char.Parse(Console.ReadLine().ToLower()); // 统一转小写,支持不区分大小写猜测
                bool isHit = false;

                // 遍历整个目标单词,更新所有匹配的字母位置
                for (int j = 0; j < hangman.Length; j++)
                {
                    if (user == char.ToLower(hangman[j]))
                    {
                        userinput[j] = hangman[j];
                        isHit = true;
                    }
                }

                // 根据命中情况输出提示
                if (isHit)
                {
                    Console.WriteLine("猜对了!当前进度:");
                    foreach (char c in userinput)
                    {
                        Console.Write(c + " ");
                    }
                    Console.WriteLine("\n再试一个字母!");
                }
                else
                {
                    Console.WriteLine("哎呀,这个字母不在单词里,再试试!");
                }

                // 判断是否提前完成游戏
                if (new string(userinput) == new string(hangman))
                {
                    Console.WriteLine("恭喜你!猜对了所有字母,游戏胜利!");
                    break;
                }
            }

            // 10次机会用完后的提示
            if (new string(userinput) != new string(hangman))
            {
                Console.WriteLine($"游戏结束!正确单词是:{new string(hangman)}");
            }
        }
    }
}

关键改进点

  • 去掉硬编码的数组长度,用hangman.Length适配不同长度的单词
  • 遍历整个目标单词数组,一次性更新所有匹配的字母位置,彻底解决重复字母不显示的问题
  • 增加不区分大小写的猜测逻辑,提升用户体验
  • 加入游戏胜利的提前判断,不用等10次机会用完
  • 优化了提示信息的可读性和交互流程

内容的提问来源于stack exchange,提问作者Shayre Chakraborty

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 18:25:28