bite815 2022-12-21 08:44 采纳率: 85.7%
浏览 17
已结题

为什么二维数组的界面会一直重复2次,然后二维数组的界面会出现2次

为什么二维数组的界面会一直重复2次,每次输入一个w,s,a或d,让他移动,然后二维数组的界面会出现2次。如何实现二维数组只让他出现一次。代码如下:

#include <stdio.h>
#define ROW 11                 //游戏区行数
#define COL 11                 //游戏区列数     

char map[ROW][COL] = {
    {'F', 'x', 'x', 'x', 'x', 'x', 'x', 'x', 'x', 'x'},   //x为草坪
    {'~', '~', '~', '~', '~', '~', '~', '~', '~', '~'},   //~为水流
    {'~', '~', '~', '~', '~', '~', '~', 't', '~', '~'},   //o为终点
    {'~', '~', '~', '~', '~', '~', '~', '~', '~', '~'},      //T为乌龟的位置
    {'~', 't', '~', '~', '~', '~', 't', '~', '~', '~'},
    {'~', '~', '~', '~', '~', '~', '~', '~', '~', '~'},
    {'~', '~', '~', '~', '~', '~', '~', '~', '~', '~'},
    {'~', '~', '~', 't', '~', 't', '~', '~', 't', '~'},
    {'~', '~', '~', '~', '~', '~', '~', 't', '~', '~'},
    {'~', '~', '~', '~', '~', '~', '~', '~', '~', '~'},
    {'x', 'x', 'x', 'x', 'x', 'x', 'x', 'x', 'o', 'x'}
};

int main() {
    int i, j;
    int x = 0, y = 0;
    char c, q;
    while (1) {
        for (i = 0; i < ROW; i++) {
            for (j = 0; j < COL; j++) {
                printf("%c ", map[i][j]);     //生成游戏界面
            }
            printf("\n");
        }
        printf("请输入操作:\n");
        scanf("%c", &c);                     //w s a d

        if (c == 'w') {
            q = map[x - 1][y];
            map[x - 1][y] = map[x][y];
            map[x][y] = q;
            x = x - 1;

        }

        else if (c == 's') {
            q = map[x + 1][y];
            map[x + 1][y] = map[x][y];
            map[x][y] = q;
            x = x + 1;

        }

        else if (c == 'a') {

            q = map[x][y - 1];
            map[x][y - 1] = map[x][y];
            map[x][y] = q;
            y = y - 1;

        }

        else if (c == 'd') {

            q = map[x][y + 1];
            map[x][y + 1] = map[x][y];
            map[x][y] = q;
            y = y + 1;

        }

        else if (c == 'l') {
            int a, b;
            printf("添加浮木:请输入浮木放置的横坐标和纵坐标\n");//添加浮木
            scanf("%d%d", &a, &b);
            map[a][b] = 'L';

        }

        else if (c == 'k') {
            int a, b;
            printf("清除浮木:请输入需要清除浮木的横坐标和纵坐标\n");//清除浮木
            scanf("%d%d", &a, &b);
            if (map[a][b] == 'L') {
                map[a][b] = '~';
            } else if (map[a][b] == '~' || map[a][b] == 'F' || map[a][b] == 't' || map[a][b] == 'x') {
                printf("该位置没有浮木");
            }
        }



        else if (c == 'b') {
            int a, b;
            printf("请输入臭虫放置的横坐标和纵坐标\n");           //添加臭虫
            scanf("%d%d", &a, &b);
            if (map[a][b] == 'L') {
                map[a][b] = 'B';
            } else if (map[a][b] == '~' || map[a][b] == 'F' || map[a][b] == 't' || map[a][b] == 'x')
                printf("臭虫没有放在浮木上\n");
        }


    }
    return 0;
}

问题如图:

img

请问解决的方案

  • 写回答

2条回答 默认 最新

  • 於黾 2022-12-21 08:58
    关注

    因为scanf("%c", &c);接收到了一个换行符,每次输入过后你需要一个getchar把多余的换行吸收掉
    此外,你可以调用清屏指令,在每次打印之前先清屏,这样就不会一遍又一遍的打印相同的东西,而是永远只有一个数组

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 12月29日
  • 已采纳回答 12月21日
  • 创建了问题 12月21日

悬赏问题

  • ¥15 装 pytorch 的时候出了好多问题,遇到这种情况怎么处理?
  • ¥20 IOS游览器某宝手机网页版自动立即购买JavaScript脚本
  • ¥15 手机接入宽带网线,如何释放宽带全部速度
  • ¥30 关于#r语言#的问题:如何对R语言中mfgarch包中构建的garch-midas模型进行样本内长期波动率预测和样本外长期波动率预测
  • ¥15 ETLCloud 处理json多层级问题
  • ¥15 matlab中使用gurobi时报错
  • ¥15 这个主板怎么能扩出一两个sata口
  • ¥15 不是,这到底错哪儿了😭
  • ¥15 2020长安杯与连接网探
  • ¥15 关于#matlab#的问题:在模糊控制器中选出线路信息,在simulink中根据线路信息生成速度时间目标曲线(初速度为20m/s,15秒后减为0的速度时间图像)我想问线路信息是什么