在c ++中从文件加载到2d数组

时间:2012-10-25 19:49:29

标签: c++

我无法在c ++中将文件中的数字读入2d数组。它读取第一行就好了,但其余的行都填充了0。我不知道我做错了什么。

#include <iostream>
#include <fstream>

using namespace std;

int main()
{
    int myarray[20][20];

    int totRow = 20, totCol = 20, number, product, topProduct = 0, row, col, count;
    char element[4];

    ifstream file;

    file.open( "c:\\2020.txt" );

    if( !file )
    {
        cout << "problem";
        cin.clear();
        cin.ignore(255, '\n');
        cin.get();

        return 0;
    }

    while( file.good())
    {
        for( row = 0; row < totRow; row++ )
        {
            for( col = 0; col < totCol; col++ )
            {
                file.get( element, 4 );
                number = atoi( element );
                myarray[row][col] = number;
                cout << myarray[row][col] << " ";
            }
            cout << endl;

        }
        file.close();
    } 

2 个答案:

答案 0 :(得分:3)

如果您的文件中只有数字,则只需使用>>运算符即可阅读。将内循环更改为:

for( col = 0; col < totCol; col++ )
{
    file >> myarray[row][col];
    cout << myarray[row][col] << " ";
}

file.get()的问题是,它不会超出换行符\n。请参阅:std::basic_istream::get

答案 1 :(得分:2)

你正在关闭while循环中的文件:

while( file.good())
    {
        for( row = 0; row < totRow; row++ )
        {
            for( col = 0; col < totCol; col++ )
            {
                file.get( element, 4 );
                number = atoi( element );
                myarray[row][col] = number;
                cout << myarray[row][col] << " ";
            }
            cout << endl;

        }
        file.close();   // <------ HERE
    } // end of while loop is here

你显然无法从封闭的流中读取。现在,因为您试图在while循环的第一次迭代中读取所有数据,这似乎不是您的直接问题。但是请注意,即使您已经读取了所有有意义的数据(例如,如果有一个拖尾的换行符),流仍然可以是good(),在这种情况下,您将进入第二个循环时间。这是一个错误。