2014-01-31 12 views
0
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. 

任何帮助将非常感谢

+0

C++数组从零开始。金额[0],金额[1],金额[2]有效。 – Roddy

+0

您只能访问金额[0],金额[1]和金额[2] – Hamza

+0

关于使用浮点类型的金钱,即使是'double'(或'long double')也无济于事。任何算术计算(甚至微不足道)都会增加复合舍入误差,迟早(最可能更快)将导致严重问题。你可能想阅读[每个计算机科学家应该知道的关于浮点运算的知识](http://docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg.html)。 –

回答

2

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

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

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; 
} 

尽管实际上并不需要使用该数组。您可以在一个常规变量中输入数据。

+0

没有必要使用循环。 –

相关问题