1

C++を使用してテキストファイルからいくつかのデータを読み取ろうとしています。ただし、コンソールに奇妙な数字が出力されます。

私の入力ファイルは:とまったく同じです。

3 6
0 1 0 0 0 0
0 0 1 0 0 0 
0 0 0 0 1 0

次に、次のような非常に単純なコードを記述しました。

#include <iostream>
#include <fstream>
using namespace std;

int main(int argc , char* argv[]) {

ifstream fin(argv[1]);

int grid_i;
int grid_j;

fin>>grid_i;
fin>>grid_j;

cout <<grid_i<<endl;
cout <<grid_j<<endl;
return 0;
}

次に、出力は次のとおりです。

8
1875681984

どこに間違いがあるのか​​わかりませんでした。手伝って頂けますか?

4

1 に答える 1

0

ファイルが正常に開かれたかどうか、および読み取りの準備ができているかどうかを確認します。

ifstream fin(argv[1]);
if (!fin.good()) {
    cout << "Couldn't open the file.\n";
    return 1;
}

また、読み取り操作が成功するかどうかを常に確認することもお勧めします。operator>>bool に変換可能なストリームへの参照を返すため、次のように使用できます。

if (fin >> grid_i) {
    // read succeeded, use grid_i
}

プログラムは、実際には未定義の動作を引き起こす可能性があります。ストリームを開くとき (およびその後、ストリームから読み取るとき) が失敗し、初期化/割り当てが行われませんgrid_igrid_j不確定な値を持つオブジェクトの読み取りは、定義上未定義の動作です。オブジェクトを常に初期化することをお勧めします

int grid_i = 0;

于 2012-12-15T14:15:41.880 に答える