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

scanf函数使用异常求助:多输入读取失败及终端显示不符预期

问题排查与修正方案

核心问题分析

  • scanf格式串误用:你把输入提示写在了scanf的格式字符串里,这会要求用户必须手动输入100s:、200s;、500s:这些内容才能继续读取数值,而非自动输出提示。同时d/e/f是int类型,你错误使用了%lf(对应double类型的格式符),第二个scanf里的分号;也和预期的冒号:不匹配,导致输入匹配失败。
  • 缺少主动提示输出:要显示100s:这类引导文本,必须用printf主动输出,不能依赖scanf的格式串。
  • 冗余类型转换:计算总金额时,a*d等表达式会自动从int提升为double,无需额外强制转换。

修正后的代码

#include<stdio.h>
int main () {
    // 硬币面值
    double a=100, b=200, c=500;
    // 硬币数量(整数类型)
    int d, e, f;

    printf("Please enter the number of coins you have for each denomination below\n");
    printf("If you have no coins in that denomination input zero.\n");

    // 先输出提示,再读取输入
    printf("100s: ");
    scanf("%d", &d);
    printf("200s: ");
    scanf("%d", &e);
    printf("500s: ");
    scanf("%d", &f);

    // 计算总金额,自动完成类型提升
    double g = a*d + b*e + c*f;

    // 格式化输出金额(保留两位小数更贴合货币展示)
    printf("Change is shs:%.2lf\n", g);
}

修改说明

  1. 用printf单独输出每个硬币的输入提示,确保终端显示完全符合预期;
  2. 将scanf格式符改为%d,匹配int类型变量;
  3. 统一输入提示的分隔符为冒号,避免匹配错误;
  4. 移除冗余的强制类型转换,简化计算逻辑;
  5. 输出时使用%.2lf让金额保留两位小数,更符合货币的展示习惯。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 16:03:12