scanf检测问题,谁能帮我改改

输入abcd,如果只布一个雷(1,2),输312进去是正常运行的,但是先输3 1 1然后输3 1 2,程序就会把a默认为1,然后进入first_is_1里面去运行了。
img
img
img


int main(void)
{
    int minefield[SIZE][SIZE];
    int number;
    printf("Welcome to minesweeper!\n");
    printf("How many mines? ");
    scanf("%d", &number);
 
    Point point[SIZE];
    printf("Enter pairs:\n");
    int i = 0;
    while (number > i)
    {
        scanf("%d%d", &point[i].y, &point[i].x);
        i++;
    }
 
    init_field(minefield, point, number);
 
    printf("Game Started\n");
    print_minefield(minefield);
    int a,b,c,d;
    while (scanf("%d %d %d %d",&a,&b,&c,&d) != EOF) {

        if (a == 1){
            first_is_1(b,c,d,point,number);
        }
        if (a == 2){
            first_is_2(b,c,d,point,number);
        }
        if (a == 3){
            first_is_3(b,c,point,number,minefield);
        }
        print_minefield(minefield);

    }
 
    return 0;
}
while (scanf("%d%d%d%d", &a, &b, &c, &d) != EOF) {
  ...
}

这里读的是 4 个变量,也就是读了 3、1、1、3,第二次读取的时候就自然读到 1、2 了。
可以试试这样

while (scanf("%d", &a) != EOF) {
  if (a == 1){
    scanf("%d%d%d", &b, &c, &d);
    first_is_1(b, c, d, point, number);
  }
  if (a == 2){
    scanf("%d%d%d", &b, &c, &d);
    first_is_2(b, c, d, point, number);
  }
  if (a == 3){
    scanf("%d%d", &b, &c);
    first_is_3(b, c, point, number, minefield);
  }
  print_minefield(minefield);
}