【发布时间】:2017-09-24 11:42:35
【问题描述】:
对于学校,我必须使用一个分成不同行的数组来构建“汽车导航”,如下所示:
S#####
.....#
#.####
#.####
...#.D
##...#
我们的想法是找到一条通向目的地的清晰路径(“.”字符)并将其替换为“+”字符。 我在填充数组时遇到问题。练习是:
编写一个函数void inputMaze(char maze[], int maxX, int maxY),要求用户
输入maxY 字符串,每个字符串包含maxX 个字符。这些字符串应该存储在数组maze 和字符串中
应由以下字符组成:
• 'S' - 起始位置。
• 'D' - 目的地。
• '.' - 允许汽车行驶的位置。
• '#' - 不允许汽车行驶的位置(障碍物)。
您的程序的输出应如下所示:
Number of rows? 6
Number of columns? 6
Input row 0: S#####
Input row 1: .....#
Input row 2: #.####
Input row 3: #.####
Input row 4: ...#.D
Input row 5: ##...#
我试过这样写函数:
void inputMaze(char maze[], int maxX, int maxY)
{
int i, j;
for (j = 0; j <= (maxX-1); j++)
{
printf("Input row %d: ",j);
for (i = 0; i <= (maxY-1); i++)
{
maze[(j * maxY) + i] = getchar();
}
}
}
但是,当我执行该函数并到达 j == (maxX-1) 时,会显示打印行,但它会跳过行 maxX - 1 的输入(完全忽略 for 循环)并继续下一步。
我的代码哪里出错了?
编辑:答案是换行符。这段代码似乎确实有效:
void inputMaze(char maze[], int maxX, int maxY)
{
int i, j;
char c;
for (j = 0; j < maxX; j++)
{
printf("Input row %d: ",j);
for (i = 0; i < maxY; i++)
{
scanf(" %c", c);
if (c == '\n')
continue;
else
maze[(j * maxY) + i] = getchar();
}
}
}
【问题讨论】:
-
跳过换行符....
-
<= (maxY-1)==>< maxY(编译器无论如何都会优化它,但尽量避免不必要的操作)'int maxX, int maxY==>size_t maxX, size_t maxY -
你的 char 数组是如何实例化的?它是否以正确大小的 maxX * maxY 实例化?我可能会使用二维数组。迷宫[j][i] = getchar();
-
@RobbieChiha 我认为 OP 使用一维数组,模拟二维数组。因此,您的方法将行不通。