2013-10-25 102 views
2

我正在編寫一些編程作業,我正在嘗試使用for-loop以促進編碼過程。這裏是循環:輸出嵌套For循環(C++)無法正常工作

#ifndef DIVSALES_H 
#define DIVSALES_H 

class DivSales 
{ 
    public: 
     DivSales(){ quarterSales[4] = {0}; }; 
     double getTotalSales() { return totalSales;} 
     static void setTotalSales(double); 
     static void addTotalSales(double); 
     double getQuarterSales(int numQuarter) {return quarterSales[numQuarter];} 
     void setQuarterSales(int numQuarter, double numAmount) { quarterSales[numQuarter] = numAmount;} 
    private: 
     static double totalSales; 
     double quarterSales[]; 
}; 

double DivSales::totalSales = 0; 
void DivSales::setTotalSales(double totalAmount) {totalSales = totalAmount; } 
void DivSales::addTotalSales(double addAmount) {totalSales += addAmount; } 
#endif // DIVSALES_H 

#include <iostream> 
#include "DivSales.h" 

using namespace std; 

int main() 
{ 
    const int NUMDIVS = 6; 
    const int NUMQUARTERS = 4; 
    double amount = 0; 

    DivSales divs[NUMDIVS]; 

    for(int division = 0; division < NUMDIVS; division++) 
    { 
     cout << "Division " << (division + 1) << endl; 

     for(int quarter = 0; quarter < NUMQUARTERS; quarter++) 
     { 
      cout << "Quarter " << (quarter + 1) << ": "; 
      cin >> amount; 

      divs[division].setQuarterSales(quarter, amount); 
      DivSales::addTotalSales(amount); 
     } 
    } 


    return 0; 
} 

例子:

Division 1 
Quarter 1: 500 
Quarter 2: 500 
Quarter 3: 500 
Quarter 2: 500 
Quarter 3: 500 
Quarter 2: 500 
Quarter 3: 500 
Quarter 2: 500 
Quarter 3: 500 
Quarter 2: 

我所試圖做的是讓這個當我輸入了4個數字它將轉移到下一個部門。但是,在4個輸入之後,它不是遞增for-loop的分區變量,而是繼續詢問更多輸入。到底是怎麼回事?

+0

所以這是無限的循環? – clcto

+0

是的,非常。 – Mourneris

+0

輸入4個季度後,它會再次輸出「Division 1」? – clcto

回答

2

我發現什麼導致了這個問題,它是在文件DivSales.h:

改變這一行:

double quarterSales[]; 

對於此行:

double quarterSales[4]; 

的問題是您沒有爲4個元素的數組分配內存。要初始化它,你的構造函數改成這樣:

DivSales():quarterSales({0}){ }; 

你也應該將以下行DivSales.cpp,否則我得到一個多個定義錯誤:

double DivSales::totalSales = 0; 
+0

如果沒有這個改變,我甚至無法編譯它。 – Sarien

+0

您是否介意包含代碼以便如何爲陣列動態分配內存?我的教授無法解釋這些東西來拯救自己的生命。 – Mourneris

+0

@ user2920558不需要陣列是動態的。 memo1288詳細介紹瞭如何正確分配和初始化陣列。 –

0

這裏:

divs[division].setTotalSales(amount); 

你可能想:

divs[division].addTotalSales(amount); 

但是,這並不是什麼原因造成您的問題。我無法複製。

+0

謝謝你的建議。它已經完全飛過了我的頭,但我現在修好了。 – Mourneris