VS Code使用Code Runner运行C程序无输出无法接收用户输入问题
问题成因
- I/O缓冲区机制导致输出滞留:C语言标准库的
stdout默认采用行缓冲策略,仅当输出内容包含换行符\n、缓冲区被填满、程序正常退出时才会将缓冲区内容打印到终端。示例代码中所有printf语句末尾都没有添加换行符,输出内容暂存于缓冲区,后续scanf触发阻塞等待用户输入,程序未走到退出逻辑,缓冲区内容始终不会被刷出,因此看不到任何提示输出。 - Code Runner默认运行环境不支持交互:Code Runner扩展默认将程序运行在VS Code的只读「输出」面板,该面板不接收用户输入,程序执行到
scanf时直接进入永久阻塞状态,既没有输出也不会报错。
解决方法
- 修复缓冲区未刷新问题,二选一即可:
- 为所有
printf输出语句末尾添加换行符\n,触发行缓冲自动刷新,修改后的规范参考代码如下:
- 为所有
#include <stdio.h> int main() { float n1, n2; printf("Enter 1st number: \n"); scanf("%f", &n1); printf("Enter 2nd number: \n"); scanf("%f", &n2); printf("Sum of %f + %f = %0.2f\n", n1, n2, n1 + n2); return 0; }
- 在每句
printf之后添加fflush(stdout);语句,主动强制刷新标准输出缓冲区,不需要修改原有打印内容。
- 调整Code Runner运行环境支持交互:
打开VS Code设置界面,搜索配置项code-runner.runInTerminal,勾选该配置后,Code Runner会将程序运行在可交互的集成终端中,即可正常接收用户输入。 - 额外规范优化:将非标准的
void main写法替换为C标准规定的int main写法,程序结束返回0,避免不同编译器下的兼容问题。
内容的提问来源于stack exchange,提问作者Yash
相关产品推荐
相关产品推荐

