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

C语言编写文字冒险游戏使用scanf后程序无输出无限运行是什么原因?

问题原因及解决方案

核心问题:scanf传参不合法

你问题中提到的scanf("%d", playerInput)写法存在根本性错误:

  • scanf的%d格式控制符要求接收int类型变量的内存地址,用来存储读取到的用户输入
  • 你直接传入playerInput变量本身,相当于把这个变量未初始化的随机值当作内存地址传递,scanf会尝试将输入写入这个非法的随机地址,属于C语言的未定义行为,会触发程序无响应、无输出、崩溃等各种异常现象。
  • 你贴出的代码里scanf("%d", &playerInput)加了取地址符&的写法是正确的,如果你实际运行的代码是带&的版本还出问题,往下看第二个原因。

次要问题:输出缓冲区未刷新

你最后一行提示输入的代码printf("--> ")末尾没有换行符:

  • C语言标准库的stdout默认是行缓冲模式,只有遇到换行符、缓冲区存满、或者手动刷新时,才会把缓冲区的内容输出到控制台
  • 虽然多数交互终端环境下调用scanf前会自动刷新stdout缓冲区,但部分特殊环境(比如部分IDE的内置控制台、旧版Windows cmd)不会,导致你看不到-->的提示,程序直接卡在输入等待状态,看起来像是没有任何输出就卡住了。
  • 解决方法是在这行printf后加一句fflush(stdout);手动刷新缓冲区,或者把提示语改成printf("--> \n");加换行符。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 13:45:06