在C ++中从文件中读取网格

时间:2012-12-15 14:10:40

标签: c++ ifstream

我正在尝试使用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

我无法找到错误的位置。你能救我吗?

1 个答案:

答案 0 :(得分: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;