输入abcd,如果只布一个雷(1,2),输312进去是正常运行的,但是先输3 1 1然后输3 1 2,程序就会把a默认为1,然后进入first_is_1里面去运行了。
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);
}