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

C语言入门:变量无法正常打印问题求助

住房贷款计算程序的问题修复

我编写的C语言程序用于获取用户输入的住房贷款详情并计算贷款周期内的总还款额。目前程序可正常接收所有输入,但for循环中的变量无法正常输出:Month变量值异常偏高,其余相关变量均显示为0。预期功能为:接收贷款余额、年利率、月还款额、贷款年限输入,计算每月偿还的利息与本金,逐月打印明细直至最后一期,最终输出总利息与剩余贷款余额。

代码中的错误点

  • scanf格式符错误:读取monthly_payment时使用了scanf("%.2lf", &monthly_payment);,scanf的格式字符串不支持指定精度,正确格式符应为%lf。错误写法会导致输入读取失败,monthly_payment值被初始化为0,引发后续所有计算错误。
  • 变量未初始化:total_interest未初始化,默认值为内存中的垃圾数据,累加后结果完全错误,需初始化为0.0。
  • printf语法错误:循环内的printf语句将格式字符串与输出参数用分号分隔,正确写法应将所有参数放在printf的括号内;同时格式字符串末尾的括号位置错误,(%.2lf\n\n)应改为(%.2lf)\n\n,否则格式匹配失败,输出随机垃圾值。
  • 整数除法隐患:monthly_interest_rate = annual_interest_rate/1200;属于整数除法,若annual_interest_rate为整数(比如5),计算结果会直接取整为0,需改为1200.0触发浮点数除法。

修正后的代码

#include <stdio.h>
#include <stdlib.h>

int main(void)
{
    int years, month, final_month, annual_interest_rate;
    
    // 初始化total_interest为0.0
    double loan_balance, interest_for_this_month, monthly_payment, total_interest = 0.0, leftover_payment, monthly_interest_rate;
    
    printf("\n\nLoan Amount = ");
    scanf("%lf", &loan_balance);
    printf("%.2lf\n", loan_balance);
    
    printf("\n\nNumber of Years = ");
    scanf("%i", &years);
    printf("%i\n", years);
    
    printf("\n\nAnnual Interest Rate Percent = ");
    scanf("%i", &annual_interest_rate);
    printf("%i\n", annual_interest_rate);
    
    printf("\nMonthly Payment = ");
    // 修正scanf格式符,去掉精度指定
    scanf("%lf", &monthly_payment);
    printf("%.2lf\n", monthly_payment);
    
    // 改为1200.0,使用浮点数除法
    monthly_interest_rate = annual_interest_rate / 1200.0;
    
    final_month = years * 12;
    
    for(month = 1; month <= final_month; month++)
    { 
        interest_for_this_month = monthly_interest_rate * loan_balance;
        total_interest += interest_for_this_month;
        leftover_payment = monthly_payment - interest_for_this_month;
        loan_balance -= leftover_payment;
        // 修正printf参数位置与格式字符串
        printf("Month = (%i),   This month's interest = (%.2lf)   leftover payment = (%.2lf)   Loan Balance = (%.2lf)\n\n", 
               month, interest_for_this_month, leftover_payment, loan_balance);
        
    }
    
    printf("\nTotal Interest = %.2lf\n", total_interest);
    printf("Final Loan Balance = %.2lf\n\n\n", loan_balance);

    return 0;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 01:48:26