1

我无法将文件中的数字读取到 C++ 中的二维数组中。它可以很好地读取第一行,但其余行填充为 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();
    } 
4

2 回答 2

3

如果您的文件中只有数字,您可以使用>>操作员读取它们。将您的内部循环更改为:

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

问题file.get()是,它不会超出 newline \n。见:std::basic_istream::get

于 2012-10-25T19:53:50.337 回答
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()即使在您读取了所有有意义的数据之后(例如,如果有一个换行符),流仍然可以存在,在这种情况下,您将第二次进入循环。那是一个错误。

于 2012-10-25T19:55:17.310 回答