这是代码:
#include <stdio.h>
#include <stdlib.h>
void acceptMaze(char maze[ROW][COLOUMN], int nrows, int ncols)
{
int i,j;
for (i = 0; i < nrows; i++)
{
fprintf(stdout,"I = %d",i);
for (j = 0; j < ncols; j++)
{
fprintf(stdout,"J = %d",j);
scanf("%c",&maze[i][j]);
}
}
}
在输入数据时,它显示i =0 j=0j=1
。所以你看到j = 0不存在。我正在使用linux系统。任何人都可以解决这个问题。
答案 0 :(得分:3)
您的问题源于%c
转换说明符不会跳过空格的事实。如果来自先前输入操作的输入流中存在新行,则scanf
调用将读取该行并将其分配给maze[i][j]
。
这是一个解决方法:
#include <ctype.h>
...
for (i = 0; i < nrows; i++)
{
for (j = 0; i < nrows; j++)
{
int c;
do c = getchar(); while (isspace(c));
maze[i][j] = c;
}
}
行do c = getchar(); while (isspace(c))
将读取输入字符,直到您遇到非空白字符。
修改强>
呃,我刚刚意识到这个计划有一个丑陋的缺陷;如果你希望为你的迷宫分配一个像空白一样的空格字符,这将无法正常工作。当然,您只需添加条件表达式:do c = getchar(); while (isspace(c) && c != ' ');
答案 1 :(得分:0)
您需要输出一些换行符,以便用户更容易阅读。怎么样:
#include <stdio.h>
#include <stdlib.h>
void acceptMaze(char maze[][],int nrows,int ncols)
{
int i,j;
for(i=0;i<nrows;i++)
{
for(j=0;j<ncols;j++)
{
printf("\nenter %d,%d: ",i, j);
scanf("%c",&maze[i][j]);
}
}
}
答案 2 :(得分:0)
输入键被接受为半数查询的输入。假设您提示i = 0,j = 0,并且用户输入“5”,然后输入回车键。 Scanf将'5'插入迷宫[0] [0],并在循环的下一次迭代中,它看到回车键仍在缓冲区中,因此它将其插入迷宫[0] [1]。
每次scanf后都需要刷新输入。一种解决方案是#include <iostream>
,并在每次扫描后调用std::cin.ignore()
。