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

C语言开发hangman游戏时scanf语句被直接跳过问题求助

问题根因
  • scanf使用%c格式符时不会自动跳过输入缓冲区中的空白字符(包括换行符\n、空格等),你之前调用fscanf读取单词、以及每次循环输出操作后,输入缓冲区残留的换行符会被下一次scanf("%c")直接读取,就会出现看起来跳过用户输入的现象。
  • 你当前用strstr判断字符是否存在于单词中的逻辑存在错误:strstr要求入参是\0结尾的字符串,你传入单个字符变量的地址&choice,该地址后续没有自动补的\0结束符,会导致strstr越界访问内存,判断结果完全不可预期。
  • 额外的小问题:你定义的GAME_OVER宏值为0,while(!GAME_OVER)等价于死循环,后续可以补充猜错计数逻辑来触发出局条件。
修复方案

按以下步骤修改即可解决输入跳过的问题:

  1. 给scanf的%c格式符前添加空格,用来自动跳过所有前置空白字符,修改前为scanf("%c", &choice),修改后为scanf(" %c", &choice),注意%c前的空格不能省略。
  2. 将字符匹配逻辑从strstr替换为专门用来匹配单个字符的strchr函数,无需传字符地址,直接传choice变量即可。
  3. 规范fscanf的写法:数组名本身就是首地址,无需加取地址符,将fscanf(file, "%s", &word)改为fscanf(file, "%s", word)。

修改后的核心宏定义参考:

#define choice() printf("Your Choice? "); scanf(" %c", &choice); if(strchr(word, choice) != NULL){printf("ok\n");}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 21:54:02