Попытка настроить массив для хранения трех последних депозитов в системе банковских счетов

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

Решение

Так как у вас есть float amount[3];, вы можете получить доступ только amount[0], amount[1], а также amount[2], Любой другой индекс с дать вам неопределенное поведение что является причиной сбоя вашей программы.

Также, никогда использовать float представлять реальные деньги. Вы будете точны только до 7 значащих цифр. Используя double тоже небезопасно, хотя точность (около 15 значащих цифр) будет лучше. Лучше всего использовать валюту. Посмотрите на этот вопрос: Лучший способ хранить значения валют в C ++

2

Другие решения

Вы должны ввести каждый элемент массива в цикле. Измените код следующим образом

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

Хотя на самом деле нет необходимости использовать массив. Вы можете ввести данные в одну обычную переменную.

1

По вопросам рекламы [email protected]