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

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] действительны.
  • 0
    Вы можете получить доступ только к сумме [0], сумме [1] и сумме [2]
Показать ещё 1 комментарий
Теги:
arrays
memory
corrupt

2 ответа

2

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

Кроме того, никогда не используйте float для представления фактических денег. Вы будете точны до 7 значимых цифр. Использование double небезопасно, даже если точность (примерно на 15 значащих цифр) будет лучше. Лучше всего использовать тип валюты. Посмотрите на этот вопрос: лучший способ хранения значений валюты в 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
    Не обязательно использовать цикл.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню