xlzt 2022-05-25 12:29 采纳率: 20%
浏览 127
已结题

c语言程序设计,求文件压缩包

img


一个比较简单的程序设计,但是功能比较多,行数不少于250行,要在周末之前

  • 写回答

4条回答 默认 最新

  • qfl_sdu 2022-05-25 13:49
    关注

    主要是输入输出和文件操作,运行截图如下:

    img

    img

    查看记录

    img

    删除记录:

    img

    修改后的代码,去掉空行和注释,差不多能够250行了

    #define _CRT_SECURE_NO_WARNINGS 1
    #include <stdio.h>
    #include <stdlib.h>
    #include <time.h>
    int readFile(int *pwin , int *plose , int *pev);
    void startgame(int *win , int *lose , int *ev );
    void showRecord(int win, int lose, int ev);
    void DeleteRord(int* win, int* lose, int* ev);
    void saveRecord(int win, int lose, int ev);
    int main()
    {
        int flag=1;
        int i = 0;
        char choise;
        int win = 0, lose = 0, ev = 0; //记录胜利局数、失败局数、平手局数
        srand((unsigned int)time(NULL)); //生成随机数种子
        readFile(&win,&lose,&ev); //读取文件
        //显示菜单
        while (flag)
        {
            system("cls"); //清屏
            printf("------------------------\n");
            printf("|----------------------|\n");
            printf("|石头剪刀布游戏        |\n");
            printf("|                      |\n");
            printf("|a.进入比赛            |\n");
            printf("|b.查看比赛记录        |\n");
            printf("|c.删除比赛记录        |\n");
            printf("|d.比赛退出            |\n");
            printf("|----------------------|\n");
            rewind(stdin); //清空输入缓存 
            //fflush(stdin); //清空输入缓存,如果rewind报错,就使用fflush
            scanf("%c", &choise);
            getchar();
            switch (choise)
            {
            case 'a':
                startgame(&win, &lose, &ev);
                break;
            case 'b':
                showRecord(win, lose, ev);
                break;
            case 'c':
                DeleteRord(&win, &lose, &ev);
                break;
            case 'd':
                saveRecord(win, lose, ev);
                printf("游戏正在退出,感谢使用,下次再见!\n");
                flag = 0;
                break;
            }
        }
        return 0;    
    }
    
    //读文件,获取文件中的数据信息
    int readFile(int *pwin , int *plose , int *pev)
    {
        int i=0;
        int win=0,lose=0,ev=0;
        char buf[100];
        //读文件,获取历史记录
        FILE* fp =0;
        fp = fopen("record.txt", "r");
        if (fp == 0)
        {
            printf("文件打开失败!\n");
            return 0;
        }
        else
        {
            fgets(buf,100,fp); //读取第一行
            //解析出胜利局数
            while (buf[i])
            {
                if (buf[i] >= '0' && buf[i] <= '9')
                    win = win * 10 + buf[i] - '0';
                i++;
            }
            fgets(buf, 100, fp); //读取第二行
            //解析出输的局数
            i = 0;
            while (buf[i])
            {
                if (buf[i] >= '0' && buf[i] <= '9')
                    lose = lose * 10 + buf[i] - '0';
                i++;
            }
            fgets(buf, 100, fp); //读取第三行
            //解析出平局的局数
            i = 0;
            while (buf[i])
            {
                if (buf[i] >= '0' && buf[i] <= '9')
                    ev = ev * 10 + buf[i] - '0';
                i++;
            }
            //关闭文件
            fclose(fp);
            *pwin = win;
            *plose = lose;
            *pev = ev;
            return 1;
        }
    }
    
    //开始比赛
    void startgame(int *win , int *lose , int *ev )
    {
        int op; //用户的选择
        int jq; //机器的随机数
        system("cls"); //清屏
        printf("------------------------\n");
        printf("|----------------------|\n");
        printf("|石头剪刀布游戏        |\n");
        printf("|                      |\n");
        printf("|用户操作:            |\n");
        printf("|0表示石头             |\n");
        printf("|1表示剪刀             |\n");
        printf("|2表示布               |\n");
        printf("|3回到主界面           |\n");
        printf("|----------------------|\n");
        printf("请输入:");
        while (1)
        {
            scanf("%d", &op);
            if (op >= 0 && op <= 3)
                break;
            else
                printf("请输入0-3之间的数字:");
        }
        if (op == 3)
            return;
        else
        {
            jq = rand() % 3; //产生0到2的随机数
            if (op == 0) //用户出石头
            {
                printf("用户出石头,");
                if (jq == 0) //机器出石头
                {
                    printf("机器出石头,平局\n");
                    *ev += 1; //平局
                }            
                else if (jq == 1) //机器出剪刀
                {
                    printf("机器出剪刀,胜利\n");
                    *win += 1; //胜利
                }                
                else
                {
                    printf("机器出布,输\n");
                    *lose += 1; //输
                }
            }
            else if (op == 1) //用户出剪刀
            {
                printf("用户出剪刀,");
                if (jq == 0) //机器出石头
                {
                    printf("机器出石头,输\n");
                    *lose += 1; //输
                }                
                else if (jq == 1) //机器出剪刀
                {
                    printf("机器出剪刀,平局\n");
                    *ev += 1; //平局
                }
                else //机器出布
                {
                    printf("机器出布,胜利\n");
                    *win += 1; //胜利
                }
            }
            else //用户出布
            {
                printf("用户出布,");
                if (jq == 0) //机器出石头
                {
                    printf("机器出石头,胜利\n");
                    *win += 1; //胜利
                }
                else if (jq == 1) //机器出剪刀
                {
                    printf("机器出剪刀,输\n");
                    *lose += 1; //输
                }
                else //机器出布
                {
                    printf("机器出布,平局\n");
                    *ev += 1; //平局
                }
            }
        }
        system("pause");
    }
    //查看比赛记录
    void showRecord(int win, int lose, int ev)
    {
        system("cls"); //清屏
        printf("------------------------\n");
        printf("|----------------------|\n");
        printf("|石头剪刀布游戏        |\n");
        printf("|                      |\n");
        if (win == 0 && lose == 0 && ev == 0)
            printf("|目前尚无记录          |\n");
        else
        {
            printf("|胜利:%d            |\n", win);
            printf("|  输:%d            |\n", lose);
            printf("|平局:%d            |\n", ev);
            printf("|----------------------|\n");
        }
        system("pause");
    }
    //删除记录
    void DeleteRord(int* win, int* lose, int* ev)
    {
        char ch;
        FILE* fp = 0;
        system("cls");
        printf("确定要删除吗(Y/N)?");
        rewind(stdin);
        ch = getchar();
        getchar(); //吸收回车符
        if(ch != 'Y' || ch != 'y')
            return;
        //将记录清零
        *win = 0;
        *lose = 0;
        *ev = 0;
        //更新文件中的记录
        fp = fopen("record.txt", "w");
        fprintf(fp,"胜利:%d\n", *win);
        fprintf(fp,"  输:%d\n", *lose);
        fprintf(fp,"平局:%d\n", *ev);
        fclose(fp);
        system("cls");
        printf("------------------------\n");
        printf("|----------------------|\n");
        printf("|石头剪刀布游戏        |\n");
        printf("|                      |\n");
        printf("|记录删除成功!        |\n");
        printf("|----------------------|\n");
        system("pause");
    }
    
    //保存记录
    void saveRecord(int win, int lose, int ev)
    {
        FILE* fp = 0;
        //打开记录文件,并将记录写入文件中
        fp = fopen("record.txt", "w");
        if(fp == 0)
        {
            printf("文件未能打开,数据保存失败\n");
            return;
        }
        fprintf(fp, "胜利:%d\n", win);
        fprintf(fp, "  输:%d\n", lose);
        fprintf(fp, "平局:%d\n", ev);
        printf("记录已保存到record.txt文件\n");
        fclose(fp);
        fp = 0;
    }
    
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(3条)

报告相同问题?

问题事件

  • 系统已结题 6月5日
  • 已采纳回答 5月28日
  • 修改了问题 5月25日
  • 创建了问题 5月25日

悬赏问题

  • ¥15 请问我该如何添加自己的数据去运行蚁群算法代码
  • ¥20 用HslCommunication 连接欧姆龙 plc有时会连接失败。报异常为“未知错误”
  • ¥15 网络设备配置与管理这个该怎么弄
  • ¥20 机器学习能否像多层线性模型一样处理嵌套数据
  • ¥20 西门子S7-Graph,S7-300,梯形图
  • ¥50 用易语言http 访问不了网页
  • ¥50 safari浏览器fetch提交数据后数据丢失问题
  • ¥15 matlab不知道怎么改,求解答!!
  • ¥15 永磁直线电机的电流环pi调不出来
  • ¥15 用stata实现聚类的代码