在c ++中将文件的元素加载到2D数组中

时间:2014-09-10 21:28:54

标签: c++ arrays file

我对C ++非常陌生(这实际上是我曾经做过的第一个程序),而且在编写这个程序时我几乎要学习它,而且我已经陷入困境。

程序应该读入文本文件,将其加载到数组中并为数组中的每个数字指定一个字符(因此,我认为我将创建2个数组, int数组,其中包含从文件中读入的数字,以及带有分配给数字的字符的char数组。然后它将打印这两个数组。然后它应该通过初始int数组并搜索其值与其相邻值不同的任何数字,如果找到这样的值,它应该给数字赋值它的邻近值的平均值。它应该进行所有这些修正,然后为这些修正的数字分配字符并打印出两个数组。

我真的不知道如何做到这一点,但我会尝试将我的问题缩小到我最初的问题。我不知道如何从文件中加载数组。我的教科书似乎很好地涵盖了数组和文件,但它并没有真正将它们结合在一起并讨论如何从文件构建数组。

这是文件的样子,第一个数字是数组的大小。

10
7 6 9 4 5 4 3 2 1 0
6 5 5 5 6 5 4 3 2 1
6 5 6 6 7 6 8 4 3 2
1 5 6 7 7 7 6 5 4 3
5 5 6 7 6 7 7 6 5 9
5 6 7 6 5 6 6 5 4 3
5 6 7 9 5 5 6 5 4 3
5 5 6 7 6 6 7 6 5 4
5 9 5 6 7 6 5 0 3 2
5 5 5 5 6 5 4 3 2 7

这是我到目前为止所使用的代码,尽管其中绝大部分都涉及打开文件。我假设它至少正确地这样做,因为当我运行它时,我没有得到"无法打开文件错误"。

#include <iostream>
#include <fstream>
#include <array>

int main() { // Main will be in prog1_test
    //Open file
    ifstream prog1File("prog1.dat", ios::in);

    //If file can't be opened, exit
    if (!prog1File) {
        cerr << "File could not be opened" << end;
        exit(EXIT_FAILURE);
    }
        int size;
        int numArray[][];
 }

虽然我确实声明了大小和数组变量,但我不知道这是否正确完成,就像我说的那样,我还是很陌生。我知道一些基本的Java,但我很难弄清楚事情如何转化为c ++。任何建议都非常感谢。

2 个答案:

答案 0 :(得分:3)

用ifos替换ofstream,用ios :: in

替换ios :: out
#include <iostream>
#include <fstream>
#include <array>

int main() { // Main will be in prog1_test
    //Open file
    ifstream prog1File("prog1.dat", ios::in);

    //If file can't be opened, exit
    if (!prog1File) {
        cerr << "File could not be opened" << end;
        exit(EXIT_FAILURE);
    }
        int size;
        int numArray[][];
 }

ofstream用于写入而不是从文件读取,ios :: out是输出打开模式而不是输入打开模式。

我希望这会有所帮助。

答案 1 :(得分:2)

我没有真正解决漏洞问题。我假设您在创建2D阵列和从文件中读取它时遇到了麻烦。所以这里有一些代码,展示了如何从我的角度来完成它:

#include <iostream>
#include <fstream>
#include <vector>


int main() { // Main will be in prog1_test
    //Open file
    ifstream prog1File("prog1.dat");

    //If file can't be opened, exit
    if (!prog1File) {
        cerr << "File could not be opened" << end;
        exit(EXIT_FAILURE);
    }
    int size;

    prog1File >> size;

    int[][] matrix = new int[size][];
    for (int i = 0; i < size; ++i)
    {
        matrix[i] = new int[size];
        for (int j = 0; j < size; ++j)
        {
            prog1File >> matrix[i][j];
        }
    }

    /* do your stuff */

    for (int i = 0; i < size; ++i)
    {
        delete matrix[i];
    }
    delete matrix;

    return 0;
 }