为什么我总是为阵列收垃圾?

时间:2015-02-05 17:46:58

标签: c++ multidimensional-array

我将数组初始化为0' s。当我走过调试器时,我在[5] [4]元素中得到了垃圾。存储值的变量是emp4tot。我得到每个员工销售的总额。每个产品由一行代表有五种不同的产品。列代表四名员工。我总结了 通过汇总每一列来销售所有员工。

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

void printtot(float[5][4], int, int);

int main()
{
using namespace std;
float sales[5][4] = { 0.0 };
int prodnum, empnum;
float prodtot=0;
const int numemp = 4;
const int numprod = 5;

/*do{

    cout << "Enter Employee Number" << endl;
    cin >> empnum;
    cout << endl;
    cout << "Enter Product Number" << endl;
    cin >> prodnum;
    cout<< endl;
    cout << " Enter Product Sales" << endl;
    cin >> prodtot;
    cout << endl;

    if ((empnum > 0) && (empnum < 5)){
        --prodnum;
        sales[prodnum][empnum] = prodtot;
    }

    }while ((empnum > 0) && (empnum < 5));

*/      
    printtot(sales, numemp, numprod);



    cin.clear();
    cin.ignore(255, '/n');
    cin.get();

    return 0;
}

  void  printtot(float salesarry[5][4],int numberempl, int numberprod){
    using namespace std;
    float product_tot;
    float employee_tot;
    float emp1tot, emp2tot, emp3tot, emp4tot;
    int i, j;

employee_tot = product_tot = emp1tot = emp2tot = emp3tot = emp4tot = 0.0;

cout << "\t"<<"\t"<<"\tEmp 1" << "\tEmp 2" << "\tEmp 3" << "\tEmp 4"<< endl;

        for (i = 0; i < numberprod; ++i){
        product_tot = 0;
        cout << "\t" << "Product " << i + 1;
        for (j = 1; j < numberempl; j++){
            cout <<"\t"<<salesarry[i][j];
            product_tot += salesarry[i][j];
        }
        cout << "\t" << product_tot << endl;
        emp1tot += salesarry[i][1];
        emp2tot += salesarry[i][2];
        emp3tot += salesarry[i][3];
        emp4tot += salesarry[i][4];
    }

cout <<"\tEmployee Totals"<<"\t"<<emp1tot<<"\t"<<emp2tot<<"\t"<<emp3tot <<
       "\t" << emp4tot << endl;
}

3 个答案:

答案 0 :(得分:3)

数组从零开始索引。因此:

float sales[5][4];

没有索引[5][4]。销售中第一个数组的第一个元素是sales[0][0]。 &#34;最后&#34;元素是sales[4][3]

答案 1 :(得分:2)

您声明了float sales[5][4]

该数组中没有[5][4]个元素。最大值为sales[4][3]。元素从零开始,因此最后一个元素的索引小于数组的大小。第一个元素是sales[0][0]

答案 2 :(得分:2)

您在printtot中使用了基于1的数组索引,此处为:

emp1tot += salesarry[i][1];
emp2tot += salesarry[i][2];
emp3tot += salesarry[i][3];
emp4tot += salesarry[i][4];

那些应该是:

emp1tot += salesarry[i][0];
emp2tot += salesarry[i][1];
emp3tot += salesarry[i][2];
emp4tot += salesarry[i][3];