1

C++ でファイルから 2 次元配列に数値を読み取るのに問題があります。最初の行は問題なく読み取れますが、残りの行には 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()意味のあるデータをすべて読み取った後でもストリームが続く可能性があることに注意してください (たとえば、改行文字が含まれている場合)。その場合、2 回目のループに入る必要があります。それはバグです。

于 2012-10-25T19:55:17.310 に答える