如何扫描txt文件并输入到矩阵c ++

时间:2015-05-15 18:04:59

标签: c++

我必须扫描像#34; 6 6 2 3 5 5 1"表示(r,c,x,y,a,b,o)其中r和c是矩阵的维数,(x,y)是玩家的位置,(a,b)是目标的位置,o是数字障碍。如何从txt文件中扫描此信息?我是c ++的新手,我知道如何在java中这样做,所以我试着基本上把它转换成c ++

这是我到目前为止所做的:

Board(int r, int c, int x, int y, int a, int b, int o) {
rows = r;
cols = c;
player_x = x;
player_y = y;
goal_x = a;
goal_y = b;
obstacles = o;
}

read_board (board *b, r, c, x, y, a, b, o){
scanf("%d %d", &(b->rows),  &(b->cols), &(b->player_x), &(b->player_y), &(b->goal_x), &(b->goal_y), &(b->obstacles)
}

2 个答案:

答案 0 :(得分:3)

您已完全省略了参数类型和函数的返回值。你需要参考。您还忘记了%d格式参数中的一些scanf说明符。

void read_board(board *b, int &r, int &c, int &x, int &y, int &a, int &b, int &o)
{
    scanf("%d %d %d %d %d %d %d", &b->rows, &b->cols, &b->player_x, &b->player_y, &b->goal_x, &b->goal_y, &b->obstacles);
}

好吧,这仍然是无处不在的垃圾,BTW的文件在哪里? 由于您使用的是c ++ read_board也应该是Board的成员函数,并且不带参数,只对成员变量进行操作。
由于您使用的是c ++ ,请将printfscanf和其他过时的c ++函数留下并使用流:

bool Board::read_board()
{
    std::ifstream ifs("file.txt");
    return ifs >> rows >> cols >> player_x >> player_y >> goal_x >> goal_y >> obstacles;
}

该函数将返回文件是否已成功读取。我希望你能从中找到一些东西。如果您不知道要包含哪个文件才能使用std::ifstream,请将其谷歌。如果您不知道operator>>operator boolstd::ifstream的作用以及为什么它处于if条件,请将其谷歌。另外,在构造函数中使用initializer list而不是赋值。

答案 1 :(得分:1)

既然你提到了scanf,这里有一个(非常难看的)C替代方案:

FILE *fp = NULL;
if ((fp = fopen("your file name", "r")) != NULL) {
    fscanf(fp, "%d %d %d %d %d %d %d", &(b->rows),  &(b->cols), &(b->player_x), &(b->player_y), &(b->goal_x), &(b->goal_y), &(b->obstacles));
    fclose(fp);
}