因为疫情只能在家看网课,学了几天C语言之后,就打算找个项目来,今天是第二天,前面那篇是补发昨天的

项目:后宫选妃系统

六大模块:

1.下旨选妃 -完成输入一名新妃子的名字,新增加一位新的妃子,然后其他妃子的宠爱度减 10 点
2.翻牌宠幸-完成输入一名妃子的名字,翻牌宠幸其,增加其宠爱度10点,减少其他妃子宠爱度10点
3.打入冷宫-完成输入一名妃子的名字,删除一位妃子,然后其他所有的妃子宠爱度加 10 点,若无此人则显示虚惊一场
4.朕的爱妃呢-完成查找妃子,输入妃子的姓名并显示基本信息,被选中的妃子宠幸度加 10 点.其他妃子宠爱度减10点
5.巡视后宫-完成巡视后宫,显示所有在宫妃子信息
6.游戏规则判定-未

第二天,今天速度倒是比昨天快了很多,除了最后的游戏规则判定之外留到明天外其他都做完了

好了,废话少说,下面是过程中遇到的一些坑,已经全部解决了,完整代码放在最后面

1.用指定文字替代指定数字

在项目里面,每个妃子都有自己的等级,从御女,世妇,嫔,夫人到后,但是定义结构体时等级这块我是用的数字1-5来代替的,防止错别字和一些其他错误,但是在方法5要打印每个妃子的等级时我们不能还是打印数字,需要用文字代替,在这里,我想的方法是用switch判断来进行文字的替换,代码如下:

switch (ptca->level){case 1:printf("御女\t");break;case 2:printf("世妇\t");break;case 3:printf("嫔\t");break;case 4:printf("夫人\t");break;case 5:printf("后\t");break;default:printf("0");break;}

2.XX要人命

先来看2段代码,把我折磨了2个小时!

char a_name[10];
scanf("%s ", a_name);
scanf("%s", a_name);

看到了没,就多了一个空格,导致程序一执行到这就gg,我去查了一下,是这么说的:

在scanf语句的格式串中由于没有非格式字符在“%d%d%d”之间作输入时的间隔,因此在输入时要用一个以上的空格或回车键作为每两个输入数之间的间隔。

懂了没,就是你多个空格,你就要多输入一次,空格要人命!!!谨记谨记谨记!!!

3.判断字符串相等

使用strcmp(str1,str2)函数,若str1=str2,则返回零;若str1<str2,则返回负数;若str1>str2,则返回正数。
!记得写<string.h>的头文件哦!

if ((strcmp(a_name, (ptca->name)) == 0)) //判断名字是否相等,相等返回0{ptca->likability += 10;printf(" %s 翻牌成功!\n", ptca->name);}else{ptca->likability -= 10;printf("后宫徒生嫉妒, %s 宠爱度减少10点!\n", ptca->name);}

唔,没了,我今天遇到的坑就这么多,希望对你有帮助,如有问题欢迎交流,项目如果还能优化希望大神指教!

完整代码:

/*
后宫选妃系统
六大模块:1.下旨选妃 -完成输入一名新妃子的名字,新增加一位新的妃子,然后其他妃子的宠爱度减 10 点2.翻牌宠幸-完成输入一名妃子的名字,翻牌宠幸其,增加其宠爱度10点,减少其他妃子宠爱度10点3.打入冷宫-完成输入一名妃子的名字,删除一位妃子,然后其他所有的妃子宠爱度加 10 点,若无此人则显示虚惊一场4.朕的爱妃呢-完成查找妃子,输入妃子的姓名并显示基本信息,被选中的妃子宠幸度加 10 点.其他妃子宠爱度减10点5.巡视后宫-完成巡视后宫,显示所有在宫妃子信息6.游戏规则判定-未
妃子等级制(始皇制):一后三夫人九嫔二十七世妇八十一御女
游戏规则:1.若有三名妃子宠爱度处于50以下则发生暴动,游戏结束2.若有人宠爱度达到100,镇压后宫,游戏结束3.每名妃子默认宠爱度70点
*/#include <stdio.h>
#include <string.h>
typedef struct concubine
{char name[10];  //名字,最多十个字符int level;      //后宫等级int likability; //宠爱度
} concu;
void addOne(concu *ptca, int *num);
void chooseOne(concu *ptca, int *num);
void forsakeOne(concu *ptca, int *num);
void findOne(concu *ptca, int *num);
void seeAll(concu *ptca, int *num);
int num = 0;int main(void)
{//存储conu的(X可变长)数组concu concus[31];int n = 0, *num = &n; //存储后宫妃子总数,使用指针方便更改!数字指针定义时需要&取地址concu *p;//后宫初始化,默认有三位妃子concu c1 = {"刘解忧", 1, 70};concu c2 = {"孙尚香", 1, 70};concu c3 = {"鱼幼薇", 1, 70};concus[0] = c1;concus[1] = c2;concus[2] = c3;*num = 3;//选妃系统界面控制int c; //控制控制界面while (1){p = concus; //初始化指针printf("-------后宫选妃系统-------\n\四大模块:\n\1.下旨选妃\n\2.翻牌宠幸\n\3.打入冷宫\n\4.朕的爱妃呢\n\5.后宫巡视\n\6.退出选妃系统\n\请输入序号选择功能:\n");scanf("%d", &c);switch (c){case 1:// printf("1\n");addOne(p, num); //函数1printf("输入任意键以继续.....\n");scanf("%d", &c);break;case 2:// printf("2");chooseOne(p, num); //函数2printf("输入任意键以继续.....\n");scanf("%d", &c);break;case 3:printf("3");forsakeOne(p, num); //函数3printf("输入任意键以继续.....\n");scanf("%d", &c);break;case 4:printf("4");findOne(p, num); //函数4printf("输入任意键以继续.....\n");scanf("%d", &c);break;case 5:printf("5");seeAll(p, num); //函数5printf("输入任意键以继续.....\n");scanf("%d", &c);break;case 6:printf("退出成功...\n");c = 0;break;default:printf("小主,查无此功能啊!\n");printf("输入任意键以继续.....");scanf("%d", &c);break;}}
}//1.下旨选妃-输入一名新妃子的名字,新增加一位新的妃子,然后其他妃子的宠爱度减 10 点
void addOne(concu *ptca, int *num)
{//根据输入初始化一位妃子的信息char ch[10];int lev, like;printf("请输入妃子姓名,等级(1-5)(空号间隔):\n");scanf("%s %d", ch, &lev);concu c;strcpy(c.name, ch);c.level = lev;c.likability = 70;int n = *num; //临时数量控制器,操纵循环//使用遍历完成下旨选妃中的操作for (int i = 0; i < n + 1; i++){if (i < *num){ptca->likability -= 10;ptca++;}else{*ptca = c;*num += 1; //总数加一printf("恭喜选妃成功;妃子信息:姓名:%s,等级:%d,宠爱度:%d\n", ptca->name, ptca->level, ptca->likability);printf("当前后宫总人数:%d\n", *num);}}
}//2.翻牌宠幸-输入一名妃子的名字,翻牌宠幸其,增加其宠爱度10点,减少其他妃子宠爱度10点
void chooseOne(concu *ptca, int *num)
{int n = *num; //临时变量,控制循环char a_name[10];//准备翻牌printf("皇上,可以翻牌了呢,输入想翻牌的妃子名字即可:\n");scanf("%s", a_name);// gets(name);// printf("1");int i = 0;printf("当前即将被翻牌的妃子名称是 %s ...", a_name);printf("\n");for (int i = 0; i < n; i++){if ((strcmp(a_name, (ptca->name)) == 0)) //判断名字是否相等,相等返回0{ptca->likability += 10;printf(" %s 翻牌成功!\n", ptca->name);}else{ptca->likability -= 10;printf("后宫徒生嫉妒, %s 宠爱度减少10点!\n", ptca->name);}ptca++; //指针指向下一个结构体}
};//3.打入冷宫-输入一名妃子的名字,删除一位妃子,然后其他所有的妃子宠爱度加 10 点,若无此人则显示虚惊一场
void forsakeOne(concu *ptca, int *num)
{int n = *num; //临时变量,控制循环char a_name[10];concu c;strcpy(c.name, "0");c.level = 0;c.likability = 0;//准备翻牌printf("皇上,您要抛弃哪位妃子呢,输入妃子名字即可:\n");scanf("%s", a_name);// gets(name);// printf("1");int i = 0;printf("当前即将被即将被打入冷宫的妃子名称是 %s ...", a_name);printf("\n");for (int i = 0; i < n; i++){if ((strcmp(a_name, (ptca->name)) == 0)) //判断名字是否相等,相等返回0{*ptca = c;}else{ptca->likability += 10;printf("因 %s 被打入冷宫, %s宠爱度增加10点!\n", a_name, ptca->name);}ptca++; //指针指向下一个结构体}
};
void findOne(concu *ptca, int *num)
{int n = *num; //临时变量,控制循环char a_name[10];printf("皇上您要查找哪一位妃子呢,输入名字即可:\n");scanf("%s",a_name);printf("当前要查找的妃子是%s....\n", a_name);//在遍历中寻找符合要求的妃子并打印信息for (int i = 0; i < n; i++){if ((strcmp(a_name, (ptca->name)) == 0)){printf("姓名\t等级\t宠爱度\t\n");printf("%s\t", ptca->name);//打印等级,并用中文替代switch (ptca->level){case 1:printf("御女\t");break;case 2:printf("世妇\t");break;case 3:printf("嫔\t");break;case 4:printf("夫人\t");break;case 5:printf("后\t");break;default:printf("0\t");break;}//打印宠爱度printf("%d\n", ptca->likability);}ptca++;}
};//5.巡视后宫,打印所有妃子信息,跳过被打入冷宫的妃子信息
void seeAll(concu *ptca, int *num)
{int n = *num; //临时变量控制循环printf("-----------------------------------------\n");printf("姓名\t等级\t宠爱度\t\n");for (int i = 0; i < n; i++){if (ptca->level != 0){//打印姓名printf("%s\t", ptca->name);//打印等级,并用中文替代switch (ptca->level){case 1:printf("御女\t");break;case 2:printf("世妇\t");break;case 3:printf("嫔\t");break;case 4:printf("夫人\t");break;case 5:printf("后\t");break;default:printf("0");break;}//打印宠爱度printf("%d\n", ptca->likability);}ptca++;}
};

C语言项目-后宫选妃系统-第二天相关推荐

  1. 小项目1——后宫选妃

    import java.util.Date; import java.util.Scanner;import javax.swing.JOptionPane; import javax.swing.J ...

  2. 你想体验后宫选妃吗?js带你体验后宫选妃

    你想体验后宫选妃吗?js带你体验后宫选妃 1.点击开始,启动定时器,获取当前时间置于文本框中,每隔10秒记录下来选中的妃子,点击去重,可以去除重复的妃子名 2.点击停止,停止选妃 效果实现: 代码实现 ...

  3. java后宫选妃文字版

    package ImperialHaremOrSeraglio; import java.util.Scanner; /** 后宫选妃 @author 大杨 *@date 2019年8月17日 上午1 ...

  4. 5.9 Go语言项目实战:驾考系统

    项目需求 考场签到,名字丢入管道: 只有5个车道,最多供5个人同时考试: 考生按签到顺序依次考试,给予考生10%的违规几率: 每3秒钟巡视一次,发现违规的清出考场,否则输出考场时序良好: 所有考试者考 ...

  5. 老九C语言41课项目实战-皇帝的后宫

    Tips: 1.二维数组里面高维可以不要,低维需要保留. 2.if(strcmp(tempName,names[i]) == 0) 需要引入头文件 #include <string.h> ...

  6. C语言写一个很好玩的皇帝的后宫小游戏

    C语言写一个很好玩的皇帝的后宫小游戏 前言 先演示一下 上源码 总结 前言 只是单纯喜欢C语言,闲着无事把以前学习的时候的案例编了一下,都是很基础的代码,for,swich,if这些,基础好的看完后完 ...

  7. C语言小游戏(皇帝和他的后宫)

    小游戏(皇帝和他的后宫) 今天我们来玩一个C语言的小游戏,皇帝和他的后宫.(所有代码我放在github上了,在文章末尾) 这个游戏是仿照着老九学堂的C语言课程写得.这里面运用了二维数组的相关知识. 游 ...

  8. Linux系统中编译大型C语言项目必备技能之:Makefile文件的编写

    文章目录 Makefile的介绍 Makefile的编写规范--简单举例 Makefile的编写规范--复杂举例 项目描述 编译需求 编译思路 Makefile的介绍 我们在阅读一些大型的C语言项目时 ...

  9. android 系统语言改变广播,关于android语言切换后通知栏显示的问题

    之前在移动UIUE项目中发现一个问题: 改变android语言设置,但是状态栏的快捷功能显示文字不会立即发生改变. 同样,下拉通知栏的文字显示在切换语言后也不会同步更新. 于是在项目中引入: @Sdk ...

  10. 小学数学考试系统java_C语言项目小学生数学考试系统参考

    [项目3-小学生数学考试系统] 1.做一个小学生考试系统,功能包括: (1)利用随机数出10道加法题: (2)小学生用户答题给出每道题的答案: (3)对小学生的答题进行评判: (4)计算出小学生答题正 ...

最新文章

  1. 个人学习某个系统或平台的3问式的整理和细化指引
  2. 丁磊建议将少儿编程纳入学业水平考试,是少儿编程太热,还是起跑线焦虑
  3. python3模块文档_Python3模块-Python入门到精通
  4. rsa.FromXmlString 系统找不到指定的文件
  5. 架构和产品的制衡——说说竞价拍卖那点事
  6. 瑞银、太平洋投资、T. Rowe Price对加密货币投资持谨慎态度
  7. 基础SQL第无课---数据修改
  8. 高中计算机兴趣班一般学什么内容,高中主要学什么课程 有哪些科目
  9. 攻防世界 reverse reverse-for-the-holy-grail-350
  10. 自然语言处理(NLP)的一般处理流程!
  11. Java工程师是做什么的?学习java能干什么?
  12. 涨知识 | 电机的十万个为什么?
  13. 测试管理之--文档管理
  14. Python中的self用法
  15. KAZE与SIFT算法比较
  16. Keychron Q1:客制化机械键盘|体验
  17. 《实用多媒体技术》课程习题及解答
  18. html div 居中心,CSS实现DIV居中的三种方法
  19. 四轴飞行器入门——飞行器的硬件结构
  20. FPGA初探(五)之两位数码管显示

热门文章

  1. 部分图像压缩技术的优缺点以及应用
  2. 实例(C++解一元二次方程)
  3. Hive存储格式之RCFile详解,RCFile的过去现在和未来
  4. Pycharm下载及安装保姆级教学(Mac)
  5. python抓取汇率_09 使用Python爬取中国银行网站选择汇率最坑的一天
  6. NAR | 董波/王师/李语丽合作建立首个横跨动物界的进化发育组学数据库平台
  7. 高效能人士七个习惯(三)
  8. 用js超简单判断图片地址是否存在(404问题)
  9. oracle数据投毒,Oracle Database Server 'TNS Listener'远程数据投毒漏洞
  10. 很短,很文艺,很唯美的英语美句