忘川睡着了zZ 2023-01-18 20:44 采纳率: 66.7%
浏览 22
已结题

for循环遍历二维数组,循环会打印两遍结果

#include <stdio.h>

void w(char ch[][5],int x,int y){
    ch[x][y]=' ';
}
void tart(char ch[][5],int x,int y){
    ch[x][y]='0';
}
int main()
{
    char cs[6][5] = {
        {'#','#','#','#','#'},
        {'#','0','#',' ','#'},
        {'#',' ','#',' ','#'},
        {'#',' ','#',' ','#'},
        {'#','#',' ',' ','#'},
        {'#','#','#',' ','#'}};
    do{
    int x,y;
    x=1;
    y=1;
    char a;
    scanf("%c",&a);
    if(a=='w'){
    
        w(cs,x,y);
        tart(cs,x-1,y);
        x--;
        
        }
    else if(a=='s'){
        w(cs,x,y);
        tart(cs,x+1,y);
        
        y=y;
        }
    else if(a=='a'){
        w(cs,x,y);
        tart(cs,x,y-1);
        
        y--;
        }
    else if(a=='d')
    {
        w(cs,x,y);
        tart(cs,x,y+1);
        y++;
    }
 
    for(int i=0;i<6;i++)
    {
        for(int j=0;j<5;j++)
        {
            printf("%c",cs[i][j]);
        }
        printf("\n");
    }
                    }while(1);
}


初学者求大牛解惑,感谢!
  • 写回答

4条回答 默认 最新

  • 忆亦何为 2023-01-18 21:19
    关注

    缓冲区问题,你输入一个字符会回车,这时候缓冲区有两个字符,一个是你输入的,一个是回车,由于你do while循环把scanf括住了,所以会循环两次,输出两次

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

报告相同问题?

问题事件

  • 系统已结题 1月27日
  • 已采纳回答 1月19日
  • 修改了问题 1月18日
  • 创建了问题 1月18日

悬赏问题

  • ¥15 (标签-matlab)
  • ¥15 Marscode IDE 如何预览新建的 HTML 文件
  • ¥15 K8S部署二进制集群过程中calico一直报错
  • ¥15 java python或者任何一种编程语言复刻一个网页
  • ¥20 如何通过代码传输视频到亚马逊平台
  • ¥15 php查询mysql数据库并显示至下拉列表中
  • ¥15 freertos下使用外部中断失效
  • ¥15 输入的char字符转为int类型,不是对应的ascall码,如何才能使之转换为对应ascall码?或者使输入的char字符可以正常与其他字符比较?
  • ¥15 devserver配置完 启动服务 无法访问static上的资源
  • ¥15 解决websocket跟c#客户端通信