C scanf()问题

我是C的新手,不能为我的生活解决我在这里做错了什么。 第一个scanf工作正常,变量在读入时打印出来。第二个scanf似乎没有正确读取输入。 输入格式为“char int int”,即b 4 4
当我打印opb x和y out时,opb =“”,x = 13238272,y = 0。 任何想法?…..注意我已经删除了问题下面的代码

int main(void) { /*initialize variables*/ int width, height; char op; /*grid input*/ scanf("%c %d %d", &op, &width, &height); /*check conditions*/ if (op != 'g' || width>100 || height>100 || width*height<10 || width<1 || height<1) { printf("grid-error\n"); return 0; } /*initialize grid elements*/ int grid[width][height]; char printGrid[width][height]; /*create grid elements*/ int i, j; for (i=0; i<height; i++) { for (j=0; j<width; j++) { grid[j][i] = 0; printGrid[j][i] = '*'; } } /*print successful creation*/ printf("%c %d %d \n", op, width, height); int k; for (k = 0; k<10; k++) { /*initialize variables*/ int x, y; char opb; /*mine input*/ scanf("%c %d %d", &opb, &x, &y); /*check conditions*/ if (opb != 'b' || x<0 || y(width-1) || y>(height-1) || grid[x][y] == 9) { printf("mine-error\n"); return 0; } 

我怀疑问题是你没有处理输入中的换行符。 结果是opb实际上是一个换行符(不是空格,虽然它看起来像一个),而xy根本就没有被读取(即它们保留了它们初始化的值)。

要解决此问题,请尝试将新行添加到您的scanfs。 那是:

 scanf("%c %d %d\n", &op, &width, &height); 

然后

 scanf("%c %d %d\n", &opb, &x, &y); 

我认为最简单的方法是在第二个scanf中将%c放在%c之前。 如果你没有空间使用它,它将采用第一个符号。 这意味着,换行。 空格使%c取第一个不是空格或制表符号。 所以:

 scanf(" %c %d %d", &op, &x, &y);