m0_59696689 2021-07-07 21:09 采纳率: 70.6%
浏览 23
已采纳

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;
}
  • 写回答

1条回答 默认 最新

  • OkayPJ 2021-07-07 21:44
    关注
    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);
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 关于无人驾驶的航向角
  • ¥15 keil的map文件中Image component sizes各项意思
  • ¥30 BC260Y用MQTT向阿里云发布主题消息一直错误
  • ¥20 求个正点原子stm32f407开发版的贪吃蛇游戏
  • ¥15 划分vlan后,链路不通了?
  • ¥20 求各位懂行的人,注册表能不能看到usb使用得具体信息,干了什么,传输了什么数据
  • ¥15 Vue3 大型图片数据拖动排序
  • ¥15 Centos / PETGEM
  • ¥15 划分vlan后不通了
  • ¥20 用雷电模拟器安装百达屋apk一直闪退