在VSCode中使用GCC编译C代码时scanf无法正常工作的问题求助
问题原因与解决办法
你的问题出在标准输出的缓冲机制上。
默认情况下,C语言的stdout是行缓冲模式:只有当输出内容包含换行符\n,或者缓冲区被填满、程序结束时,才会把缓冲区里的内容真正输出到终端。你的printf语句结尾没有换行,VSCode的集成终端在缓冲处理上和普通终端有差异,导致提示内容一直留在缓冲区里没显示出来——程序其实卡在scanf等待输入,但你看不到任何提示,误以为程序没正常运行。
给你几个直接的解决办法:
- 给
printf加上换行符,触发行缓冲自动刷新:
printf("What is your guess?\n--> "); int guess; scanf("%d", &guess);
- 手动强制刷新输出缓冲区,不管有没有换行都能立刻显示内容:
printf("What is your guess?\n--> "); fflush(stdout); // 强制刷新缓冲区 int guess; scanf("%d", &guess);
- 修改VSCode运行配置:在
.vscode/launch.json里添加或设置"externalConsole": true,让程序弹出独立的外部终端运行,和直接在终端执行的行为完全一致。
内容的提问来源于stack exchange,提问作者Victor De coole
相关产品推荐
相关产品推荐

