二维阵列加法问题

时间:2010-12-12 20:45:02

标签: c++

问题是要求员工编号1到10(他们给我输入阵列中的数组编号)通过将3个月组合在一起来给出每个员工的总销售额。在我的附加功能中,它可以正确地完成所有操作......对于第一部分......它完美地显示了数组中的数字,但是当它添加数组并在此处抛出一个元素时导致不正确的总数。在我的代码中,我添加了它应该输出它在第一组数字后加在一起的数组,它不遵循数组这里是代码:

我跟踪了你们给我们展示的内容(谢谢顺便说一句),我现在将员工#1的总数添加到其余部分,我不想这样做。我想进入员工#1到彼此停止显示它然后从3个月阵列停止显示中的3个数字中添加员工#2的总数(继续直到每个部分显示1~10)我已输入我的新修订代码。我是C ++编程的新手,我还没有学过类,所以老实说我不能使用它们。

#include <iostream>
#include <iomanip>
#include <cstdlib>

using namespace std;

void displaySales(int sales[10][3]);
void displayTotalSales(int total[10][3]);

int main () 
   {

    //declare array       Jan    Feb   Mar
    int employ[10][3] = {{2400, 3500, 2000},
                         {1500, 7000, 1000},
                         {600,   450, 2100},
                         {790,   240,  500},
                         {1000, 1000, 1000},
                         {6300, 7000, 8000},
                         {1300,  450,  700},
                         {2700, 5500, 6000},
                         {4700, 4800, 4900},
                         {1200, 1300,  400}};
    //displays the sales for the month
    displaySales(employ);
    displayTotalSales(employ);
    system("pause");
    return 0;
   }

//******Functions*******

void displaySales(int sales[10][3])
{


    for(int emp = 0; emp < 10; emp++)
    {
        cout << "Employee # " << emp + 1
             << ": " << endl;
        for (int month = 0; month < 3; month++)
        {

            cout << " Month " << month + 1
                 << ": ";
            cout << sales[emp][month] << endl;

        } //end for
    } //end for
} //end function

void displayTotalSales(int total[10][3])
{
    int employ = 1; //employee number 
    int totalSales = 0; // total sales for the employee


        for (int i = 0; i < 10; i++)
        {
            for (int j = 0; j < 3; j++)
            {
                totalSales += total[i][j];
            cout << "Employee # " << employ << ": " << endl;
            cout << endl;
            cout << "Total sales for the month: " << "$" << total[i][j];
            cout << endl;
            }
            cout << " Total Sales for the three months is: $" << totalSales << endl;
            cout << endl;
            employ++;
        }
}

4 个答案:

答案 0 :(得分:3)

do {
  ...
  totalSales = (total[i][j] + total[i][j+1] + total[i][j+2]);
  j++;
} while (j < 3);

j在第一次迭代后超出范围。

但严重的是:使用classes!并使用containers

哦,你的花括号完全搞砸了。

答案 1 :(得分:1)

首先请更好地编写代码!缩进会使这更容易理解和帮助你。

我强烈认为这是编程课的一个功课问题,但无论如何我都会尽力帮助你。

基本上你的问题是你在数组的末尾运行,因为当j == 2时,例如当你使用语句时:

totalSales = (total[i][j] + total[i][j+1] + total[i][j+2]); 

你试图引用j + 2,它实际上是数组的第5个元素,它不存在。

我对你的addFunk进行了10秒的重写(请更好地命名函数)

您可以尝试这样的事情:

void addFunk(int total[10][3]) 
{ 
     int employ = 1; //employee number 
     int totalSales = 0; // total sales for the employee 


     for (int i = 0; i < 10; i++) 
     { 
            for ( int j = 0; j < 3; j ++)
            {
                totalSales += total[i][j];         
            }

            cout << "employee num " << employ << "earned " 
            << "$" << totalSales << endl;
            totalSales = 0; 

            employ++;
            totalSales = 0;
     }
}

答案 2 :(得分:1)

我可能不适合添加这个答案,但由于新手没有办法评论,我只想在这里说。

我同意卡尔关于对象的学习。当我们在大学时学习c和c ++时,我们开始使用结构,然后转到课程,如果你认真对待编程,那么学习这些东西真的很重要。

类只是描述现实世界中对象的一种方式。它有属性和行为。例如,您可以拥有一个可以存储每月所有收入的员工类,并且可以在其中包含一个允许您计算最近收入的功能。对代码的这些小增加将使其更易于阅读,组织和重用。

我认真地建议您花几个小时来搜索面向对象的概念并尝试一些c ++示例。他们很容易。

答案 3 :(得分:0)

关于您对代码的更新,请说:

  

我现在将员工#1的总数添加到其余部分,我不想这样做。

问题在于这一行:

int totalSales = 0; // total sales for the employee

看看你放在那里的评论:它是每个员工。因此,它应该进入“每个员工循环”:

for (int i = 0; i < 10; i++)
{
    int totalSales = 0;
    // Proceed as before with the per-month work.

请阅读C ++中变量的“范围”。

此外,对C ++不熟悉,或者对编程不熟悉,并不是真正避免类的借口。 本身没有什么特别先进的本身;代码只是像你做的那样复杂 - 并且存在类,因为正确使用它们有助于组织(阅读:简化)你的代码。