C scanf () проблема - PullRequest
       6

C scanf () проблема

3 голосов
/ 23 марта 2011

Я новичок в 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 ]

4 голосов
/ 23 марта 2011

Я подозреваю, что проблема в том, что вы не имеете дело с символами перевода строки в вашем вводе.В результате opb на самом деле является символом новой строки (не пробел, хотя выглядит как единое целое), а x и y вообще не читаются (т.е. они сохраняют значения, с которыми они были инициализированы).

Чтобы решить эту проблему, попробуйте добавить новую строку в оба файла scanfs.То есть:

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

и позже

scanf("%c %d %d\n", &opb, &x, &y);
0 голосов
/ 09 апреля 2016

Я думаю, что проще всего было бы поставить пробел перед% c во втором scanf. Если вы используете его без пробела, он займет первый символ. Это значит, новая строка. Пробел заставляет% c взять первый символ, который не является пробелом или табуляцией. Итак:

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