开发者

C scanf() problem

开发者 https://www.devze.com 2023-02-18 22:48 出处:网络
Im new to C and cant for the life of me work out what im doing wrong here. The first scanf works fine, variables are printed out as they are read in. The second scanf doesn\'t seem to be reading the i

Im new to C and cant for the life of me work out what im doing wrong here. The first scanf works fine, variables are printed out as they are read in. The second scanf doesn't seem to be reading the input correctly. Input is of the format "char int int" i.e. b 4 4

when i print opb x and y out, opb = " ", x = 13238272 , y=0. Any Ideas?.....note ive cut out code below the problem

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开发者_如何学Python (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;
    }


I suspect the problem is that you aren't dealing with newline characters in your input. The result is that the opb is actually a newline character (not a space, though it looks like one) and x and y aren't read at all (i.e. they retain the values they were initialised with).

To solve the problem, try adding the newline to both your scanfs. That is:

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

and later

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


I think the easiest would be to put space before %c in second scanf. If you use it without space, it will take first symbol. That means, newline. The space makes %c take first symbol that isn't space or tab. So:

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

精彩评论

暂无评论...
验证码 换一张
取 消