将数组反向复制到函数内部的另一个数组的问题

时间:2018-10-24 00:46:34

标签: c++ arrays

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

#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++;
    }

}

任何帮助将不胜感激。我使用输入文本文件制作第一个数组,然后输出一个数组,然后将最后一个数组输出到文本文件,以检查它是否有效。前三个功能可以正常工作,但最后一个功能并没有给我以我所希望的那样,我对原因感到困惑。

1 个答案:

答案 0 :(得分:0)

事实证明,由于累了,这只是几个愚蠢的错误。在我的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++;
    }

}