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

为什么getchar()函数无法读取输入?

问题原因

当你用scanf("%lf", &balance)读取账户余额时,用户输入完余额后按下的回车键会转化为换行符(\n),并留在输入缓冲区中。后续调用getchar()时,它会直接读取这个残留的换行符,而非你输入的交易类型(w/d),这就导致getchar()拿到的不是预期字符,程序逻辑无法正常执行。

解决办法
  • 在scanf之后额外调用一次getchar(),手动吃掉缓冲区里的换行符:
    scanf("%lf",&balance);
    getchar(); // 清除残留的换行符
    
  • 或者在scanf的格式字符串末尾加一个空格,让scanf自动忽略输入后的所有空白字符(包括换行、空格、制表符):
    scanf("%lf ",&balance); // %lf后添加空格
    
  • 更稳妥的方式是用fgets读取整行输入,再通过sscanf解析出余额,彻底避免缓冲区残留问题:
    char input_buf[100];
    printf("Enter the balance: ");
    fgets(input_buf, sizeof(input_buf), stdin);
    sscanf(input_buf, "%lf", &balance);
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 01:50:20