首页 > 解决方案 > 将数组反向复制到函数内的另一个数组的问题

问题描述

所以我的问题是为什么我的第四个功能没有按预期工作?它应该采用一个数组并将其转换为另一个数组的反向副本,我觉得逻辑是合理的,但最后它只是在我打印它时吐出垃圾数据。我是学生,这是为了上课,我已经给老师发了电子邮件,但她几乎没有回复,所以我想我会问你们。在有人说重复之前,我知道还有其他关于如何反向复制数组的事情,但我想知道我的逻辑有什么问题。是什么让这个不起作用。

#include <iostream>
#include <cstdlib>
#include <fstream>
#include <cmath>
using namespace std;

void inputData(ifstream& y, int x[], int a);

void printData(ofstream& y, const int x[], int a);

void copyArray(const int orig[], int dup[], int a);

void revCopy(const int orig[], int rev[], int a);


int main()
{
    const int size = 10;
    int arr1[size];
    int dup[size];
    int revdup[size];
    ifstream infile;
    ofstream outfile;

    inputData(infile, arr1, size);
    printData(outfile, arr1, size);
    copyArray(arr1, dup, size);
    revCopy(dup, revdup, size);
    printData(outfile, revdup, size);

    system("pause");
    return 0;
}

void inputData(ifstream& y, int x[], int a)
{

        y.open("infile.txt");
        for (int i = 0; i < a; i++)
        {
            y >> x[i];
        }
        y.close();

}

void printData(ofstream& y, const int x[], int a)
{
    y.open("outfile.txt");
    for (int i = 0; i < a; i++)
    {
        y << " " << x[i];
    }
    y.close();
}

void copyArray(const int orig[], int dup[], int a)
{
    for (int i = 0; i < a; i++)
    {
        dup[i] = orig[i];
        cout << dup[i] << endl;
    }

}

void revCopy(const int orig[], int rev[], int a)
{
    for (int i = a; i >= 0; i--)
    {
        int n = 0;
        rev[n] = orig[i];
        cout << rev[n] << " " <<orig[i] << endl;
        n++;
    }

}

任何帮助,将不胜感激。我使用输入文本文件创建第一个数组,然后输出一个数组,然后将最后一个数组输出到一个文本文件,以检查它是否有效。前 3 个函数工作得很好,但最后一个函数并没有给我我想的那样,我不知道为什么。

标签: c++arrays

解决方案


事实证明,这只是由于疲倦而犯的几个愚蠢的错误。在我的 revCopy 方法中,我将 int n = 0 放在我的 for 循环中,这使它每次(显然)都重置为零。我还尝试在 [10] 处开始索引我的反向数组副本。这是行不通的,因为数组中只有 10 个数据点 (0-9),因此逻辑上最后一个数据点是 [9] 而不是 10。一旦进行了这两个简单的更改,程序就可以完美运行。感谢@Blastfurnace、@stark 和@crack_iT 的帮助。

#include <iostream>
#include <cstdlib>
#include <fstream>
#include <cmath>
using namespace std;

void inputData(ifstream& y, int x[], int a);

void printData(ofstream& y, const int x[], int a);

void copyArray(const int orig[], int dup[], int a);

void revCopy(const int orig[], int rev[], int a);


int main()
{
    const int size = 10;
    int arr1[size];
    int dup[size];
    int revDup[size];
    ifstream infile;
    ofstream outfile;

    inputData(infile, arr1, size);
    printData(outfile, arr1, size);
    copyArray(arr1, dup, size);
    revCopy(dup, revDup, size);
    printData(outfile, revDup, size);

    system("pause");
    return 0;
}

void inputData(ifstream& y, int x[], int a)
{

    y.open("infile.txt");
    for (int i = 0; i < a; i++)
    {
        y >> x[i];
    }
    y.close();

}

void printData(ofstream& y, const int x[], int a)
{
    y.open("outfile.txt");
    for (int i = 0; i < a; i++)
    {
        y << " " << x[i];
    }
    y.close();
}

void copyArray(const int orig[], int dup[], int a)
{
    for (int i = 0; i < a; i++)
    {
        dup[i] = orig[i];
        cout << dup[i] << endl;
    }

}

void revCopy(const int orig[], int rev[], int a)
{   
    int n = 0;

    for (int i = (a-1); i >= 0; i--)
    {
        rev[n] = orig[i];
        cout << rev[n] << " " <<orig[i] << endl;
        n++;
    }

}

推荐阅读