C scanf()问题

时间:2011-03-23 06:02:40

标签: 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<0 || x>(width-1) || y>(height-1) || grid[x][y] == 9) {
        printf("mine-error\n");
        return 0;
    }

2 个答案:

答案 0 :(得分:4)

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

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

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

以后

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

答案 1 :(得分:0)

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

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