一个比较简单的程序设计,但是功能比较多,行数不少于250行,要在周末之前
4条回答 默认 最新
- qfl_sdu 2022-05-25 13:49关注
主要是输入输出和文件操作,运行截图如下:
查看记录
删除记录:
修改后的代码,去掉空行和注释,差不多能够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; }
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报 编辑记录
悬赏问题
- ¥15 请问我该如何添加自己的数据去运行蚁群算法代码
- ¥20 用HslCommunication 连接欧姆龙 plc有时会连接失败。报异常为“未知错误”
- ¥15 网络设备配置与管理这个该怎么弄
- ¥20 机器学习能否像多层线性模型一样处理嵌套数据
- ¥20 西门子S7-Graph,S7-300,梯形图
- ¥50 用易语言http 访问不了网页
- ¥50 safari浏览器fetch提交数据后数据丢失问题
- ¥15 matlab不知道怎么改,求解答!!
- ¥15 永磁直线电机的电流环pi调不出来
- ¥15 用stata实现聚类的代码