我必须扫描像#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)
}
答案 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 ++ ,请将printf
,scanf
和其他过时的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 bool
对std::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);
}