+ -
当前位置:首页 → 问答吧 → C++读取文件的相关错误

C++读取文件的相关错误

时间:2011-12-18

来源:互联网

一下是我的代码,目的是把txt文件中的一个3*7的数组(元素间有空格)读入到p[i][j]这个二维数组中,但是运行的时候报错,不知道怎么回事
ifstream ifile;
char **p=new char*[3];
for(int i=0;i<3;i++)
p[i]=new char[7];
memset(p,0,21);
int k=0;
ifile.open ("D:\\b.txt",ios::in);
for(int i=0;i<3;i++)
for(int j=0;j<7;j++)
ifile>>p[i][j];
/////////下面是我用来测试数据的正确性的,
for(int i=0;i<3;i++)
for(int j=0;j<7;j++)
cout<<p[i][j];

return 0;

作者: lantingyaoyi   发布时间: 2011-12-18

我觉得可能是算法错误。我的设计是,读文件的时候,一行行的读,把每行读到一维数组里,读完后在分解数组到二维数组。

作者: herichcq   发布时间: 2011-12-18

我改成这样之后,程序输出不是地址就是全部是0,把我郁闷死了,不知道怎么回事啊!
{
  ifstream ifile;
int *q=new int[50];
memset(q,0,200);
int k=0;
ifile.open ("D:\\b.txt",ios::in);
{
for(int i=0;i<3;i++)
for(int j=0;j<7;j++)
{
ifile>>q[k++];
}
}
/////////下面是我用来测试数据的正确性的
for(int i=0;i<50;i++)
cout<<q[k]<<" ";
return 0;
}

作者: lantingyaoyi   发布时间: 2011-12-18

如果楼主的编译器支持变长数组,可以不用动态定义,觉得那好麻烦。。。不过c++ primer 建议不要那么用。

c语言来说,C99是支持变长数组的。(c primer plus)

作者: c87527124   发布时间: 2011-12-18

看看这个,模仿一下。
C/C++ code

#include <iostream>
#include <fstream>

using namespace std;

// read a array from a file
int ReadArrayFromFile(const char* filename, int** array)
{
    ifstream InputFileStr;
    int i = 0;
    InputFileStr.open(filename, ios::in);
    if (!InputFileStr) {
        cout << "Open File " << filename << " error" << endl;
        return 0;
    }
    for (int i = 0; i < sizeof(array)/sizeof(array[0]);) {
        while (InputFileStr >> array[i][0] >> array[i][1] >> array[i][2] >> 
            array[i][3] >> array[i][4] >> array[i][5] >> array[i][6])
            i++;
    }
    return 1;
}

#define COL 7
#define ROW 3

int main()
{
    int** array = new int*[ROW];
    for (int i = 0; i < ROW; i++)
        array[i] = new int[COL];
    if (ReadArrayFromFile("matric.txt", array)) {
        for (int i = 0; i < ROW; i++) {
            for (int j = 0; j < COL; j++)
                cout << array[i][j] << ' ';
            cout << endl;
        }
        system("pause");
        return 0;
    } else {
        cout << "can't read from file matric.txt" << endl;
        system("pause");
        return -1;
    }
}

matric.txt的内容是这样子的。
C/C++ code
1 2 3 4 5 6 7
2 3 4 5 6 7 8
3 4 5 6 7 8 9

作者: linwhwylb   发布时间: 2011-12-18