C++在void函数中填充空数组

C++ Filling empty arrays in void function

本文关键字:填充 数组 函数 void C++      更新时间:2023-10-16

对于课堂,我必须编写一个程序来计算12个不同的"等级"。我使用了两个不同的数组——"分子[]"answers"分母[]",每个数组的大小都是12(12个不同的整数)。对于这项任务,我必须将分母中的3的值设为0,这表明这些分母对应的分子等于"加分"(例如,5/0级等于5个加分)。然而,现在我必须创建一个"数据清理"函数,它获取所有具有非零分母的分数,并将它们移动到一个新的空数组中(只剩下"真实"分数,我将其作为newNumerator[]和newDenominator[],以及每个数组的新大小"newSize"。数据清理函数需要有这些参数-

dataClean(int numerator[], int denominator[], int size, int newNumerator[], int newDenominator[], int &newSize)

我需要填充新的数组,并在cleanData函数中定义这些数组的newSize,并通过参数将它们的新值返回到main()。然而,我在这个问题上已经坚持了很长一段时间。我不确定我是否需要使用指针,即使如此,我也不清楚如何使用它们。如果不清楚的话,很抱歉,这项任务让我很困惑。如果有任何帮助,我们将不胜感激。如果你需要任何进一步的澄清,请告诉我。

分子和分母的数据文件(data.txt)

72 49 23 5 9 10 6 16 26 54 4 55//numerator[]
75 50 25 0 10 0 0 20 30 55 5 60//denominator[]

程序-

#include <iostream>
#include <fstream>
#include <cstdlib>
#include <string>
#include <cmath>
#include <iomanip>
using namespace std;
typedef int arrayType[];
void readData(int numerator[], int denominator[], int size);
void reportData(arrayType, arrayType, int);
void reportOverall(int numerator[], int denominator[], int size);
void cleanData(int numerator[], int denominator[], int size, int newNumerator[], int newDenominator[], int &newSize);
int main()
{
    const int size = 12;
    int numerator[size];
    int denominator[size];
    int newSize = 12;
    int newNumerator[newSize];
    int newDenominator[newSize];

    cout << fixed << showpoint << setprecision(1);
    readData(numerator, denominator, size);
    reportData(numerator, denominator, size);
    reportOverall(numerator, denominator, size);
    cout << "n******************************n";
    cleanData(numerator, denominator, size, newNumerator, newDenominator, &newSize);
    reportData(newNumerator, newDenominator, newSize);
    system("pause");
    return 0;
}
void readData(int numerator[], int denominator[], int size)
{
    ifstream dataIn;
    dataIn.open("data.txt");
    if(!dataIn)
    {
        cout << "File not foundn";
        system("pause");
        exit(1);
    }
    int count;
    for(count = 0; count < size; count++)
    {
        dataIn >> numerator[count];
    }
    for (count = 0; count < size; count++)
    {
        dataIn >> denominator[count];
    }
    dataIn.close();
}
void reportData(arrayType numerator, arrayType denominator, int size)
{
    int count;
    for (count = 0; count < size; count++)
    {
        if (denominator[count] == 0)
        {
            cout << "Score " << (count + 1) << " is " << numerator[count] << "/" << denominator[count] << " = " << "Bonus points!n";
        }
        else
        {
            double percent = 100.0 * static_cast<double>(numerator[count]) / denominator[count];
            cout << "Score " << (count + 1) << " is " << numerator[count] << "/" << denominator[count] << " = " << (percent) << "%n";
        }
    }
}
void reportOverall(int numerator[], int denominator[], int size)
{
    int count;
    int totalNumerator = 0.0;
    int totalDenominator = 0.0;
    for (count = 0; count < size; count++)
    {
        totalNumerator += numerator[count];
    }
    for (count = 0; count < size; count++)
    {
        totalDenominator += denominator[count];
    }
    double overallPercent = 100.0 * static_cast<double>(totalNumerator) / (totalDenominator);
    cout << "Total Points Earned (numerators): " << totalNumerator << endl;
    cout << "Total Points Possible (denominators): " << totalDenominator << endl;
    cout << "Overall Grade: " << overallPercent << "%n";
}
void cleanData(int numerator[], int denominator[], int size, int *newNumerator[], int *newDenominator[], int &newSize)
{
    int count;
    for(count = 0; count < size; count++)
    {
        int count2 = 0;
        if(denominator[count] != 0)
        {
            *newNumerator[count2] = numerator[count];
            *newDenominator[count2] = denominator[count];
            newSize--;
            count2++;
        }
    }
}

您需要通过正确引用参数来修复函数调用和cleanData定义

within main:
cleanData(numerator, denominator, size, newNumerator, newDenominator, newSize);

void cleanData(int* numerator, int* denominator, const int size, int *newNumerator, int *newDenominator, int newSize)
{
int count;
    for(count = 0; count < size; count++)
    {
        int count2 = 0;
        if(denominator[count] != 0)
        {
            newNumerator[count2] = numerator[count];
            newDenominator[count2] = denominator[count];
            newSize--;
            count2++;
        }
    }
}