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

C语言代码使用scanf()运行无响应无法正常执行如何解决

问题原因
  • 标准输出缓冲区未刷新
    C语言中stdout(标准输出流)默认采用行缓冲机制,仅当遇到换行符\n、缓冲区被填满、程序正常退出时,才会将缓冲区中的内容输出到控制台。你编写的printf("Enter your age: ");末尾没有加换行符,提示语会暂存在缓冲区中不会立刻显示,程序直接进入scanf的输入等待阶段,看起来就像没有提示、程序无响应。
  • 运行环境不支持交互输入
    你使用的是类似VS Code Code Runner的运行插件时,默认在只读的输出面板运行程序,不支持用户输入内容,scanf无法拿到输入就会一直阻塞,强制终止后就会返回错误码1。
解决方案
  • 调整代码主动刷新输出缓冲区
    两种实现方式二选一即可:
  1. 给printf的提示语末尾添加换行符\n,触发自动刷新
  2. 在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插件:
  1. 打开VS Code设置,搜索code-runner.runInTerminal
  2. 勾选该配置项,后续运行代码会自动调用支持输入的终端面板
  • 手动在系统终端运行程序
    打开系统自带的cmd或PowerShell,进入代码所在目录,依次执行gcc test.c -o test和.\test.exe,即可正常完成交互流程。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 02:24:03