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
相关产品推荐
相关产品推荐

