簡體   English   中英

為什么我會溢出?

[英]Why i'm getting overflow?

我是 c++ 的新手,仍在學習中。 我被指派創建一個簡單的銀行模擬器,只是偶然發現了一個我似乎無法弄清楚的問題。 每當我嘗試檢查余額時,它都會顯示一些數字和字母,我的第一個想法是它顯示 memory 地址或溢出。 我可以先存入一些東西,它會被添加到 balance 變量中並顯示在程序中,而不會出現一些笨拙的數字和字母。 我的目標是確保余額始終顯示為 0,直到用戶存款或取款。

我以某種方式設法通過使用 float 而不是 double 來解決這個問題,我不太確定為什么它在這一點上起作用,因為我已經厭倦了甚至考慮它,但我寧願使用 double 因為這個程序可能會使用更多數據。

如果對我要說的內容有任何不清楚的地方,我會盡快嘗試回答您的問題。 我還在這里添加了一張圖片向您展示我在說什么。

#include <iostream>

using namespace std;

int main()
{
    while(true){
    cout << "[D]eposit\n";
    cout << "[W]ithdrawal\n";
    cout << "[B]alance\n";
    cout << "[I]nterest payment\n";
    cout << "[E]xit\n";
    char menu;
    double balance, deposit, withdraw;
    cin >> menu;
    switch(menu)
    {
    case'D':
        cout << "[DEPOSIT]\n" << "Deposit: ";
        cin >> deposit;
        balance += deposit;
        continue;
    case'W':
        cout <<"[WITHDRAWAL]\n" << "Withdraw: ";
        cin >> withdraw;
        balance -= withdraw;
        continue;
    case'B':
        cout << "[BALANCE]\n" << "Amount: " << balance;
        continue;
    case'I':
        cout << "[INTEREST PAYMENT]\n";
        continue;
    case 'E':
        cout << "Program is closing...";
        break;
    default:
        cout << "Please use uppercase letters";
        continue;

    }
    break;
    }
    return 0;
}

余額未初始化,因此當您添加/減去金額時,由於余額的隨機初始值,結果是奇數。

那么獲取亂碼數據的主要原因是因為您的balance變量未初始化,並且訪問它是未定義的行為

您可以通過這樣做來修復它:

double balance = 0;
double deposit, withdraw;

此外,您的程序不會按預期運行,因為您在 while 循環內聲明了balance變量。 只需在循環外聲明變量即可使其按預期工作。

double balance = 0;
double deposit, withdraw;
while(true){
    ...
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM