2014-01-31 8 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

Нет необходимости использовать петлю. –

 Смежные вопросы

  • Нет связанных вопросов^_^