2013-10-25 70 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