C++ 仅存储多个用户生成值中的第一个值的动态分配数组

C++ 仅存储多个用户生成值中的第一个值的动态分配数组,c++,arrays,pointers,dynamic-memory-allocation,C++,Arrays,Pointers,Dynamic Memory Allocation,这是我第一次在这里发帖。我正在为我的CS II班做一个实验室(它已经过期了,所以我现在不会得到任何分数,但我仍然很想了解我做错了什么,以便我可以改进。代码还远没有完成,但我遇到了一个阻碍我继续的问题。提前道歉,我对此非常生疏,在我生疏之前,我是一个非常新的人。而且,我已经起床了直到昨晚凌晨4点左右,我才开始尝试让它工作,所以我的代码目前看起来可能相当粗糙 好的,所以我的问题是:当单步执行代码时,第一个函数,getNoMonths,运行得非常好。它会提示用户希望处理数据的销售月数,并将该数字存储在

这是我第一次在这里发帖。我正在为我的CS II班做一个实验室(它已经过期了,所以我现在不会得到任何分数,但我仍然很想了解我做错了什么,以便我可以改进。代码还远没有完成,但我遇到了一个阻碍我继续的问题。提前道歉,我对此非常生疏,在我生疏之前,我是一个非常新的人。而且,我已经起床了直到昨晚凌晨4点左右,我才开始尝试让它工作,所以我的代码目前看起来可能相当粗糙

好的,所以我的问题是:当单步执行代码时,第一个函数,
getNoMonths
,运行得非常好。它会提示用户希望处理数据的销售月数,并将该数字存储在
no_months
中,返回到
main
。该值的验证需要介于3 a之间nd 6也可以正常工作

当我们进入
getSales
时,问题就出现了。该函数会提示用户输入之前定义的月份的销售值。它似乎工作得很好。但是,仔细检查后,似乎只有第一个值实际存储在
sales
中,该值应该是一个数组,大小为w根据用户在
getNoMonths
期间定义的月数动态分配

我确信,无论我做错了什么,都是非常简单的,我能感觉到。我再次翻阅了这篇文章,试图尽可能多地了解数组、动态内存分配和指针是如何工作的。我理解了它们背后的想法,但正如你可能看到的,我正在为实际实现而挣扎

我知道我需要做的是:

  • 设置阵列以保存每个月的销售数据
  • 让该数组的大小与用户输入的月数匹配
…我只是不知道该怎么做。我也知道我需要有一个指针才能让第二个项目发生,但同样,我不太清楚我到底需要做什么

TL;DR我需要一些帮助来获取这个
sales
数组来保存用户输入的所有值,而不仅仅是第一个值。为此,我可能需要帮助设置一个指针来动态分配
sales
数组的大小,最好是解释一下这到底是如何帮助我的,而不是如何帮助我的只是混乱和多余,哈哈。

源代码如下:

//Jesse Holland
//Lab1Out
//Processes Sales Data, Displays as a Bar Graph presentation

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

using namespace std;

//FUNCTION PROTOTYPES
int getNoMonths(int& no_months);    //prompts for number of months of sales data to be processed
void getSales(int* sales, int no_months);   //prompts for sales data, stores corresponding data in "sales"
int getMax(int* sales, int no_months, double & max);    //maximum value for "sales" array
int getMin(int* sales, int no_months, double & min);    //minimum value for "sales" array
double getAvg(int* sales, int no_months, double & avg); //computes avg of sales data stored in "sales" array
void displayResults(int* sales, int no_months, int max, int min, double avg);   //displays bar chart diagram

//MAIN FUNCTION START
int main()
{
    double max = 0;
    double min = 0;
    double avg = 0;
    int no_months = 0;

    //prompt for number of months
    getNoMonths(no_months);

    //variable declaration
    int * sales = new int[no_months];

    //prompt for sales data
    getSales(sales, no_months);

    //maximum value of "sales" array
    getMax(sales, no_months, max);

    //minimum value for "sales" array
    getMin(sales, no_months, min);

    //computes avg of sales data stored in "sales" array
    getAvg(sales, no_months, avg);

    //displays bar chart diagram in graphics window
    displayResults(sales, no_months, max, min, avg);

    return 0;
}

//FUNCTIONS IMPLEMENTATION START
int getNoMonths(int& no_months) // int* months) 
{
    do
    {
        cout << "Please enter the number of months you'd like to process: <must be at least 3, but no more than 6>:";
        cin >> no_months;
        //int* months = new int[no_months];
    }while ((no_months < 3) || (no_months > 6));

    return no_months;
}

void getSales(int* sales, int no_months)
{
    int count = 0;

    for (count = 0; count < no_months; count++)
    {
        cout << "Please enter sales for month #" << (count + 1) << ": ";
            cin >> sales[count];
    }
}

int getMax(int* sales, int no_months, double & max)
{
    //int max = 0;

    for(int count = 0; count < no_months, count++;)
    {
        if (sales[count] > max)
            max = sales[count];
    }

    return max;
}

int getMin(int* sales, int no_months, double & min)
{
    //int min = 0;
    int count = 0;

    for (count = 0; count < no_months; count++)
    {
        if (sales[count] < min)
            min = sales[count];
    }

    return min;
}

double getAvg(int* sales, int no_months, double & avg)
{
    int sum = 0;

    for(int count = 0; count < no_months; count++)
        sum += sales[count];

    return avg = (sum/no_months);
}

void displayResults(int* sales, int no_months, int max, int min, double avg)
{
    cout << "The maximum is " << max << ". \n";
    cout << "The minimum is " << min << ". \n";
    cout << "The average is " << avg << ". \n";
}
//Jesse Holland
//Lab1Out
//处理销售数据,以条形图显示
#包括
#包括“graph1.h”
使用名称空间std;
//功能原型
int getNoMonths(int&no_months);//提示要处理的销售数据的月数
void getSales(int*sales,int no_months);//提示输入销售数据,将相应数据存储在“sales”中
int getMax(int*sales,int no_months,double&max);//sales数组的最大值
int getMin(int*sales,int no_months,double&min);//sales数组的最小值
double-getAvg(int*sales,int no_months,double&avg);//计算存储在“sales”数组中的销售数据的平均值
void displayResults(int*销售额、int无月数、int最大值、int最小值、双平均值);//显示条形图
//主功能启动
int main()
{
双最大值=0;
双最小值=0;
双平均值=0;
整数个月=0;
//提示月数
getNoMonths(无月);
//变量声明
整数*销售额=新整数[无月];
//提示输入销售数据
getSales(销售额,无月);
//“sales”数组的最大值
getMax(销售额,无月数,最大值);
//“sales”数组的最小值
getMin(销售,无月,min);
//计算存储在“sales”数组中的销售数据的平均值
getAvg(销售额,无月平均值);
//在图形窗口中显示条形图
显示结果(销售额、无月数、最大值、最小值、平均值);
返回0;
}
//功能实现启动
int getNoMonths(int&no_月)//int*months)
{
做
{
不能超过10个月;
//整数*月份=新整数[无月份];
}而((无月<3)| |(无月>6));
返回不超过个月;
}
作废getSales(整数*销售额,整数无月)
{
整数计数=0;
对于(计数=0;计数<无月数;计数++)
{
库特(最大)
最大值=销售额[计数];
}
返回最大值;
}
int getMin(int*销售额、int无月数、双倍和最小值)
{
//int min=0;
整数计数=0;
对于(计数=0;计数<无月数;计数++)
{
如果(销售[计数]<分钟)
最小值=销售额[计数];
}
返回最小值;
}
双倍平均值(整数*销售额、整数无月数、双倍平均值和平均值)
{
整数和=0;
对于(整数计数=0;计数<无月数;计数++)
总和+=销售额[计数];
返回平均值=(总和/无月);
}
无效显示结果(整数*销售额、整数无月数、整数最大值、整数最小值、双平均值)
{

你的主要问题似乎是
int no_months=0;
后接
int*sales=new int[no_months];
基本上分配大小为0的数组。在分配数组和修复返回类型之前,尝试调用
getNoMonths

有两种方法从函数中检索值。返回值或通过引用(或指针)输出值参数。通常,不要同时执行这两项操作。选择一项。getMax不应依赖于恰好设置正确的max参数的值。max应是一个设置为0的局部变量。平均值函数不会通过引用更新avg参数,但您依赖于此来输出结果。如果您不强制求和或不求和,则不会o浮点类型,只执行整数除法。@NeilKirk感谢您的输入。快速提问,“局部变量”,您的意思是我需要将“int max=0;”放在getMax函数中,而不是main函数中吗?@NeilKirk还有,我如何更新a