C语言代码使用scanf()运行无响应无法正常执行如何解决
问题原因
- 标准输出缓冲区未刷新
C语言中stdout(标准输出流)默认采用行缓冲机制,仅当遇到换行符\n、缓冲区被填满、程序正常退出时,才会将缓冲区中的内容输出到控制台。你编写的printf("Enter your age: ");末尾没有加换行符,提示语会暂存在缓冲区中不会立刻显示,程序直接进入scanf的输入等待阶段,看起来就像没有提示、程序无响应。 - 运行环境不支持交互输入
你使用的是类似VS Code Code Runner的运行插件时,默认在只读的输出面板运行程序,不支持用户输入内容,scanf无法拿到输入就会一直阻塞,强制终止后就会返回错误码1。
解决方案
- 调整代码主动刷新输出缓冲区
两种实现方式二选一即可:
- 给printf的提示语末尾添加换行符
\n,触发自动刷新 - 在printf之后手动调用
fflush(stdout);强制刷新缓冲区
修改后的参考代码:
#include <stdio.h> #include <stdlib.h> int main() { int age; printf("Enter your age: \n"); // 若不想加换行,可替换为下面这行代码刷新缓冲区 // fflush(stdout); scanf("%d",&age); printf("You are %d years old!",age); return 0; }
- 配置运行环境开启交互终端
如果你使用的是VS Code的Code Runner插件:
- 打开VS Code设置,搜索
code-runner.runInTerminal - 勾选该配置项,后续运行代码会自动调用支持输入的终端面板
- 手动在系统终端运行程序
打开系统自带的cmd或PowerShell,进入代码所在目录,依次执行gcc test.c -o test和.\test.exe,即可正常完成交互流程。
内容的提问来源于stack exchange,提问作者Hextav
相关产品推荐
相关产品推荐

