试图设置一个数组,将最后三笔存款存入银行账户系统

时间:2014-01-31 11:04:58

标签: c++ arrays memory corrupt bank

float deposit (float balance)
{
    float amount[3]; 
    system("cls");
    cout<<"Enter the amount you wish to deposit"<<endl; 
    cin>>amount[3]; 
        balance = balance + amount[3]; 
    writeBalance(balance); 
    return balance;  
}
//This is a function to allow the user to increase their balance 

但是当我在程序的存款部分输入金额时,会出现一个弹出框并说:

Run-Time Check Failure #2 - Stack around the variable 'amount' was corrupted.

任何帮助都会非常感谢

2 个答案:

答案 0 :(得分:2)

由于您有float amount[3];,因此您只能访问amount[0]amount[1]amount[2]。任何其他索引都会为您提供未定义的行为,这是导致程序崩溃的原因。

此外,从不使用float来代表实际金额。你只能精确到7个有效数字。使用double也是不安全的,即使准确度(大约15个有效数字)会更好。您最好的选择是使用货币类型。看看这个问题:Best way to store currency values in C++

答案 1 :(得分:1)

您必须在循环中输入数组的每个元素。按以下方式更改代码

float deposit (float balance)
{
    const size_t N = 3; 
    float amount[N]; 
    system("cls");
    cout<<"Enter the amount you wish to deposit"<<endl;

    for ( size_t i = 0; i < N; i++ )
    { 
        cin>>amount[i]; 
        balance = balance + amount[i];
    }

    writeBalance(balance); 
    return balance;  
}

虽然实际上没有必要使用该阵列。您可以在一个常规变量中输入数据。