函数未返回正确的结果

Function not returning correct result

本文关键字:结果 返回 函数      更新时间:2023-10-16
const int CHECK_MAX = 50;
void balanceAccount(double account)
{
    double start = 0;
    double interest = 0;
    double check[CHECK_MAX];
    account = (start - check[CHECK_MAX]) * (1 + interest);
    cout << account;
}
int main()
{
    int sub;
    double start = 0;
    double interest = 0;
    double total = 0;
    double check[CHECK_MAX];
    void balanceAccount(double);
    cin >> start;
   for (sub = 0; sub < CHECK_MAX; sub++)
    {
        cin >> check[sub];
        if (check[sub] == 0)
        {
            cout << "Thank you." << endl;
            break;
        }
    }
   cin >> interest;
    if (interest == 0)
    {
        balanceAccount(total);
    }
        else
    {
            balanceAccount(total);
    }
    return 0;
}

该程序的目的是提示用户输入银行帐户的起始余额,然后使用数组输入支票的单个金额(最多 50)并从初始余额中减去它们。然后,如果存在利息值,则将其乘以总计。最终结果是使用 balanceAccount() 函数计算的。我相信在最终计算之前一切都在正常进行。我不断得到错误的计算。我最终将包含货币格式,但现在我只希望它正确计算。谢谢你的时间。

double check[CHECK_MAX];
account = (start - check[CHECK_MAX]) * (1 + interest);

访问check[CHECK_MAX]无效 - 它从数组的末尾运行。C++数组的索引为 0-n-1,因此数组中的最后一项是 check[CHECK_MAX-1]

balanceAccount()中的所有变量都初始化为零,因此main()中的其他变量不起作用。要解决此问题,请将变量传递给balanceAccount()

void balanceAccount(double localAccount, double localStart, double localInterest, double localCheck[])
{
    account = (start - check[CHECK_MAX]) * (1 + interest);
    cout << account;
}

您可能还想返回account

这一行:

account = (start - check[CHECK_MAX]) * (1 + interest);

超过数组的末尾,它应该是:

account = (start - check[CHECK_MAX-1]) * (1 + interest);

我也不知道你在main()结束时用if...else做什么.

基于您的语句的工作代码 试试这个,

  #include<iostream>
using namespace std;
const int CHECK_MAX = 50;
void balanceAccount(double total,double interest)
{
    double account = (total) * (interest);
    cout << account;
}
int main()
{
    int sub;
    double start = 0;
    double interest = 0;
    double total = 0;
    double check[CHECK_MAX];
    void balanceAccount(double,double);
    cout << "Enter the beginning balance of the account at the beginning of the month." << endl;
    cin >> start;
    total = start;
    cout << "Enter the individual dollar amount of checks written this month." << endl;
    cout << "A maximum number of 50 checks is enforced." << endl;
    cout << "Enter a zero when you are finished entering check values." << endl;
    for (sub = 0; sub < CHECK_MAX; sub++)
    {
        cout << "Enter the dollar amount for the checks written, but one at a time." << endl;
            cin >> check[sub];
        total = total - check[sub];
        if (check[sub] == 0)
        {
            cout << "Thank you." << endl;
            break;
        }
    }
    cout << "If applicable, enter an interest rate." << endl;
    cout << "If there is no interest rate, enter a 0." << endl;
    cin >> interest;
    if(interest != 0)
    {
        cout << "Thank you." << endl;
        balanceAccount(total,interest);
    }
    else
    {
        cout << "Thank you." << endl;
        cout << total << endl;
    }
    return 0;
}

更改balanceAccount()方法如下。

double balanceAccount(char account[])
{
    double start = 0;
    double interest = 0;
    double check[CHECK_MAX];
    double account = (start - check[CHECK_MAX-1]) * (1 + interest);
    cout << account;
}

对于主要balanceAccount()

total = balanceAccount(check);

balanceAccount()传递check的原因;您在main()balanceAccount()中创建了不同的check,并且两者都不一样...

此外check[CHECK_MAX]操作无效... 0 to CHECK_MAX-1是有效的内存位置,最多可计数CHECK_MAX...根据上面的代码更改

相关文章: