关于公司销售的C ++结构

时间:2011-12-15 10:43:54

标签: c++ structure

该程序使用一种结构将以下数据存储在公司部门:

分部名称(例如东,西,北或南)

季度(1,2,3或4)

季度销售

应该要求用户提供东,西,北和南区四个季度的销售数据,并且数据应存储在结构中。到目前为止,这是我的代码,我不能理解这个概念:

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

using namespace std;

struct Data{

    char *name;
    int quarter[4];
    int sales;

};

int _tmain(int argc, _TCHAR* argv[])
{
    Data division[4];
    int count;

    division[0].name = "East";
    division[1].name = "West";
    division[2].name = "North";
    division[3].name = "South";

    for(count = 0; count < 4; count++){

        cout << "Please enter the sales for the " << division[count].name << " for: " << endl;
        cout << "Quarter: " << count + 1 << ": " << endl;
        cin >> division[count].quarter[count].sales;


    }

    cin.get();
    return 0;
}

似乎我的for循环根本不起作用,我的cin语句有问题,因为`除法显示红色下划线。

5 个答案:

答案 0 :(得分:2)

替换

cin >> division[count].quarter[count].sales;

cin >> division[count].sales;

但是你的应用程序结构至少是可疑的。 quarter数组有什么意义?

答案 1 :(得分:0)

在您的原始版本中,您将溢出您的quarter数组...这是危险且未定义的行为,可能会导致内存损坏,以后会出现并且混乱你的程序。 你怎么会溢出来的?好吧,当您的计数值变为“3”时,您将使用quarter[3+1] = quarter[4]来解决您的季度数组。这比 ONE 多了数组(从0 - > 3)并且这个内存地址将被写入。 那个地址是什么?我们不知道。

看起来你应该有一个嵌套的for循环:

for(int div_i = 0; div_i < 4; ++div_i)
{
    for(int qt_i; st_i < 4; ++qt_i)
    {
        cout << "Please enter the sales for the " << division[div_i].name << " for: " << endl;
        cout << "Quarter: " << qt_i << ": " << endl;
        cin >> division[div_i].quarter[qt_i].sales;
    }
}

这将为您留下每个部门的单独季度销售额。


您还应该为数组大小使用const uint8:

const unsigned char _DIVISION_COUNT = 4;
const unsigned char _QUARTER_COUNT = 4;

// and your loops become:
for( int count = 0; count < _DIVISION_COUNT; ++count)...

告诉那些在您正在做的事情之后使用/维护代码的人。

答案 2 :(得分:0)

您定义的结构存在一些问题。

首先,销售数据的类型是什么。你是指定整数,但销售额实际上是一个十进制数字(许多现金例子使用双倍金钱表示)?

其次,我对问题陈述有点怀疑。您的结构示例涉及一个数组,但问题陈述中途表明每个结构将只有一个指示它表示的四分之一。这会使结构更像数据库记录。

以下是两种可能的方法:

typedef double money_t;

struct sales_datum {
    std::string division; // North, East, South, West
    int quarter; // 1, 2, 3, 4
    money_t sales;
};

上述方法似乎更符合问题陈述。这些结构中的每一个都将包含一个销售数据 - 针对特定季度的特定部门。

或者,

struct sales_datum {
    std::string division; // North, East, South, West
    money_t sales_for_quarter[4]; 
};

这似乎更像你在原帖中所尝试的内容。该结构现在保存一个部门的销售数据一整年(四个季度)。

使用第二种类型会使您的代码朝某些方向发展 - 在转移到另一种结构之前更容易考虑填充整个结构,因此您需要收集一年的所有数据分裂然后继续下一个。

答案 3 :(得分:-1)

结构是一个非常简单的类定义。可以把它想象成一个没有任何方法的类,只需要实例变量。

你在那里做的是询问每个部门每个季度的销售额。

因此,在每个部门中,您有4个不同的销售额,与每个季度相关。这些都保存在你的结构中。

答案 4 :(得分:-1)

您正在使用相同的变量来遍历两个分区&amp;宿舍(两次count)。