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

C语言Hangman猜词游戏首次运行额外打印下划线问题求助

Hangman游戏首屏多显示下划线问题排查

问题根因

  • 核心原因1:fgets读取单词行时,会将行末的换行符\n一同读入字符串中,导致strlen(string)计算出的单词长度比实际多1,多出来的这一位字符是\n,首次打印下划线时就会多输出一个。
  • 核心原因2:scanf("%c", &c)读取用户输入时,只会读取输入的字母,用户按下的回车换行符会残留在输入缓冲区中,下一次进入输入逻辑时会直接读取这个残留换行符,导致后续逻辑异常。
  • 额外错误:srand((unsigned) time(NULL))放在了死循环内部,短时间内连续开新局会因为时间戳相同导致随机种子一致,选出的单词重复。

修复方案

1. 去除读取单词末尾的换行符

在fgets(part, sizeof part, file);之后添加代码,替换掉末尾的换行符:

fgets(part, sizeof part, file);
part[strcspn(part, "\n")] = '\0'; // 新增这行,去掉末尾换行符

2. 修复输入缓冲区残留问题

将读取字符的scanf代码修改为,在%c前加空格跳过空白字符:

scanf(" %c", &c); // %c前加空格,自动跳过残留的换行、空格等空白字符

3. 优化随机种子初始化

把srand((unsigned) time(NULL));移动到main函数最开头,死循环外部,全局只初始化一次即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 08:15:08