Hu_Guanglun 2023-08-13 23:41 采纳率: 0%
浏览 10

关于#c语言#的问题:这个C语言代码好像有点问题,执行时每一步操作都被执行两遍


#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define ROW 3
#define COL 3
//菜单函数
void menu();
//制作表格
void displayboard(int board[ROW][COL], int row, int col);
//游戏控制
void game();
//初始化函数
void zero(int board[ROW][COL], int row, int col);
//随机出数字
void casual(int board[ROW][COL], int row, int col);
//移动操作
void operate(int board[ROW][COL], int row, int col);
//查找0所在的列
int operate_j(int board[ROW][COL], int row, int col);
//查找0所在的行
int operate_i(int board[ROW][COL], int row, int col);
//检查是否结束
int check(int board[ROW][COL], int row, int col);



void zero(int board[ROW][COL], int row, int col)
{
    int i = 0;
    int j = 0;
    for (i = 0; i < row; i++)
    {
        for (j = 0; j < col; j++)
        {
            board[i][j] = 0;
        }
    }
}


//随机出数字制作原始表格
void casual(int board[ROW][COL], int row, int col)
{
    int i = 1;

    board[2][2] = 1;

    for (i = 1; i <= 8; i++)
    {
        for (;;)
        {
            int x = rand() % col;
            int y = rand() % row;
            //判断是否被占用

            if (board[x][y] == 0)
            {
                board[x][y] = i;
                break;
            }
        }
    }
    board[2][2] = 0;
    
}



int operate_j(int board[ROW][COL], int row, int col)
{
    int i = 0;
    int j = 0;

    for (i = 0; i < row; i++)
    {
        for (j = 0; j < col; j++)
        {
            if (board[i][j] == 0)
            {
                return j;
            }
        }
    }
}

int operate_i(int board[ROW][COL], int row, int col)
{
    int i = 0;
    int j = 0;

    for (i = 0; i < row; i++)
    {
        for (j = 0; j < col; j++)
        {
            if (board[i][j] == 0)
            {
                return i;
            }
        }
    }
}


//制作表格
void displayboard(int board[ROW][COL], int row, int col)
{
    int i = 0;
    int j = 0;
    int k = 0;
    for (i = 0; i < row; i++)
    {
        for (j = 0; j < col; j++)
        {
            printf(" %d ", board[i][j]);
            if (j < col - 1)
            {
                printf("|");//保证最后一列无|
            }
        }
        printf("\n");
        if (i < row - 1)
        {
            for (k = 0; k < col; k++)
            {
                printf("---");
                if (k < col - 1)
                {
                    printf("|");//保证最后一列无|
                }
            }
        }
        printf("\n");
    }
}


//判断是否获胜
int check(int board[ROW][COL], int row, int col)
{
    if (board[0][0]==1 && board[0][1] == 2 && board[0][2] == 3)
    {
        if (board[1][0] = 4 && board[1][1] == 5 && board[1][2] == 6 && board[2][0] == 7 && board[2][1] == 8)
        {
            return 1;
        }
    }
    else
    {
        return 0;
    }
}


//制作菜单
void menu()
{
    printf("******************************\n");
    printf("******************************\n");
    printf("******************************\n");
    printf("******************************\n");
    printf("******    1.play  ************\n");
    printf("******    2.exit  ************\n");
    printf("******************************\n");
    printf("******************************\n");
    printf("******************************\n");
    printf("******************************\n");
}


void game()
{
    int input = 0;
    int board[ROW][COL];
    zero(board, ROW, COL);
    displayboard(board, ROW, COL);
    while (1)
    {
        printf("开始请按1:>");
        scanf("%d", &input);
        if (input == 1)
        {
            casual(board, ROW, COL);
            displayboard(board, ROW, COL);
            break;
        }
        else
        {
            printf("出错了,请重新输入\n");
        }
    }
    
    while (1)
    {
        operate(board, ROW, COL);

        displayboard(board, ROW, COL);

        int ret = check(board, ROW, COL);
        if (ret == 1)
        {
            break;
        }
        
    }
    printf("恭喜,你赢了\n");
        
}
//玩家操作,控制数字移动
void operate(int board[ROW][COL], int row, int col)
{
    
    int i = operate_i(board, ROW, COL);
    int j = operate_j(board, ROW, COL);
    printf("请输入:>");
    
    while (1)
    {
        char ch = 0;
        scanf("%c", &ch);
        {
            if (ch == 'w')
            {
                if (i - 1 >= 0)
                {
                    board[i][j] = board[i - 1][j];
                    board[i - 1][j] = 0;
                    break;
                }
            }
            else if (ch == 'a')
            {
                if (j - 1 >= 0)
                {
                    board[i][j] = board[i][j - 1];
                    board[i][j - 1] = 0;
                    break;
                }
            }
            else if (ch == 's')
            {
                if (i + 1 < col)
                {
                    board[i][j] = board[i + 1][j];
                    board[i + 1][j] = 0;
                    break;
                }
            }
            else if (ch == 'd')
            {
                if (j + 1 < row)
                {
                    board[i][j] = board[i][j + 1];
                    board[i][j + 1] = 0;
                    break;
                }
            }
            else
            {
                printf("输入错误,重新输入\n");
            }
        }
    }
    

}





int main()
{
    srand((int)time(NULL));//时间戳,添加任意时间
    int    input;
    do
    {
        menu();//打印菜单
        printf("请选择:>");
        scanf("%d", &input);
        switch (input)
        {
        case 1:
            game();
            break;
        case 2:
            printf("退出游戏\n");
            break;
        default:
            printf("选择错误\n");
            break;

        }
    } while (1);
    return 0;
}

这个C语言代码好像有点问题,执行时每一步操作都被执行两遍,请问谁能能帮忙解决一下,不胜感激

  • 写回答

1条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2023-08-14 08:31
    关注

    【以下回答由 GPT 生成】

    问题分析: 在给出的代码中,并没有明确的说明每一步操作被执行两遍的具体表现,需要进一步了解问题的具体情况。然而,在代码中,并没有执行的代码,只是提供了一些函数的声明和定义。因此,无法准确判断问题所在。

    解决方案: 1. 确认问题:请提供更完整的代码或详细的问题描述来帮助解决问题。提供代码中的执行部分以及操作的入口函数,这样可以更好地理解问题所在。

    如果您能提供代码的执行部分,我将能帮助您识别和解决问题。但在现有情况下,无法给出具体的解决方案。请提供更多信息。



    【相关推荐】



    如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^
    评论

报告相同问题?

问题事件

  • 创建了问题 8月13日

悬赏问题

  • ¥15 关于logstash转发日志时发生的部分内容丢失问题
  • ¥17 pro*C预编译“闪回查询”报错SCN不能识别
  • ¥15 微信会员卡接入微信支付商户号收款
  • ¥15 如何获取烟草零售终端数据
  • ¥15 数学建模招标中位数问题
  • ¥15 phython路径名过长报错 不知道什么问题
  • ¥15 深度学习中模型转换该怎么实现
  • ¥15 Stata外部命令安装问题求帮助!
  • ¥15 从键盘随机输入A-H中的一串字符串,用七段数码管方法进行绘制。提交代码及运行截图。
  • ¥15 如何用python向钉钉机器人发送可以放大的图片?