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

Я новичок в C и не могу из-за моей жизни выработать то, что я делаю неправильно здесь. Первый scanf отлично работает, переменные распечатываются, когда они считываются. Второй scanf, похоже, не читает вход правильно. Вход имеет формат «char int int», т.е. b 4 4
когда я печатаю opb x и y out, opb = “”, x = 13238272, y = 0. Любые идеи? ….. обратите внимание, что ive вырезает код ниже проблемы

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 на самом деле является символом новой строки (а не пространством, хотя он похож на один), а x и y вообще не читаются (т.е. они сохраняют значения, которые они инициализировали).

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

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

и позже

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

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

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