因为疫情只能在家看网课,学了几天C语言之后,就打算找个项目来做

项目来源:老九君

项目概述(自己增加修改了一些东西)

/*
后宫选妃系统
六大功能:
1.下旨选妃
输入一名新妃子的名字,新增加一位新的妃子,然后其他妃子的宠爱度减 10 点
2.翻牌宠幸
输入一名妃子的名字,翻牌宠幸其,增加其宠爱度10点,减少其他妃子宠爱度10点
3.打入冷宫
输入一名妃子的名字,删除一位妃子,然后其他所有的妃子宠爱度加 10 点,若无此人则显示虚惊一场
4.朕的爱妃呢
查找妃子,输入妃子的姓名并显示基本信息,被选中的妃子宠幸度加 10 点.其他妃子宠爱度减10点
5.巡视后宫
巡视后宫,显示所有在宫妃子信息
6.游戏规则判断是否结束游戏
妃子等级制(始皇制):
一后
三夫人
九嫔
二十七世妇
八十一御女
游戏规则:1.若有三名妃子宠爱度处于60以下则发生暴动,游戏结束
2.若有人上位皇后,镇压后宫,游戏结束
*/

第一天:

从上可见,这个项目大约分为6个子函数和1个主函数,本来今天早上9点开始做的时候想除了主函数外再做起码两个子函数,结果到11点时只完成了一个最简单的子函数…果然是应了那句别xx,你行你上…(想的永远比做的容易)

好了,下面是项目中遇到的一些问题,第一天所有的代码会放在最后面:

1.存储妃子结构体的的可变长数组-未解决

妃子结构体:

typedef struct concubine
{char name[10];  //名字,最多十个字符int level;      //后宫等级int likability; //宠爱度
} concu;

因为这个项目里面有后宫人员变动,因此数组最好是可变长的,但是查了好久,还是没怎么看懂,最后先用一个定长数组暂时顶替一下,明天再更

concu concus[31];

参考资料:
c语言变长数组data[0]【总结】|https://www.cnblogs.com/Anker/p/3744127.html
char data[0]用法总结|https://blog.csdn.net/maopig/article/details/7243646

2.根据输入选择对应函数/功能

其实这个蛮简单的,把输入结果放进switch进行判断就可以了,下面是代码

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;}

3.将输入的字符串赋值给新创建的结构体中一个的元素,就是输入一个名字,然后把这个名字赋值给妃子结构体中的名字字段

一开始我是这么写的:

concu c={"%s",name};`//name是我输入的一个字符串变量

然后发现不行,因为C语言只有在定义字符数组的时候才能用“=”来初始化变量,其它情况下是不能直接用“=”来为字符数组赋值的,要为字符数组赋值可以用string.h头文件中的strcpy函数来完成。
例如:

char a[10] = "123"; /*正确,在定义的时候初始化*/
char a[10];
a = "123"; /*错误,不能用“=”直接为字符数组赋值*/
strcpy(a, "123"); /*正确,使用strcpy函数复制字符串*/

所以我们要将字符串赋值给结构体中的结构体中字符数组时只有这两种写法:
1.直接写出字符串

concu c={"西施""}

2.用strcpy函数
strcpy是一种C语言的标准库函数,strcpy把含有’\0’结束符的字符串复制到另一个地址空间,返回值的类型为char*。

strcpy(c.name, ch);

就此,这一问题完美解决

4.输出数组中结构体里每一个值

一开始我是这么写的:

printf("恭喜选妃成功;妃子信息:姓名:%s,等级:%d,宠爱度:%d\n",*(ptca->name), ptca->level, ptca->likability);

后来我改成了这样:

printf("恭喜选妃成功;妃子信息:姓名:%s,等级:%d,宠爱度:%d\n", ptca->name, ptca->level, ptca->likability);

看出来什么不同没:我从 *(ptca->name) 改成了 ptca->name
因为我觉得name是个数组,数组实际上是个指向第一个元素指针,或者说是个地址,要打印就要取值,但是实际上不需要取值,看下面的语句:

char a_name[10];scanf("%s", a_name);printf("1\n");printf("当前即将被翻牌的妃子名称是 %s ...", a_name);

在C里面,如果要打印数组,使用&s占位的话,直接将数组变量名放进去就好了,不需要再取值.

以上是我做项目时遇到的一些坑,希望对你们有用,有任何问题欢迎交流,如果还能优化的话希望大神能指出来.谢啦!

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. Debugging Tools for Windows__from WDK7
  2. android资源目录---assets与res/raw区别
  3. CentOS服务器上的 git 包版本控制
  4. 使用scanf()函数接收带空格的字符串
  5. CentOS系统提示用户名不在sudoers文件中
  6. (十)HTML5本地存储——SQLLite实现web留言本
  7. PLM中BOM核心技术的研究[转]
  8. careercup-递归和动态规划 9.10
  9. 简单工厂模式初步尝试
  10. kafka之生产者---总结自Kafka权威指南
  11. linux桌面下雪,一个让桌面下雪的ruby 小程序 snow
  12. Groovy - Groovy ambiguous method overload
  13. html怎么添加banner图,如何在wordpress首页中添加banner图片?
  14. 什么是机器学习?机器学习与AI的关系?
  15. ISIS—ISIS中LSP(数据库)同步如何保证LSDB可靠性—04
  16. 电销人必须 ,好用稳定的外呼系统,具备这8个共同点
  17. 松鼠Ai辅助公校教育,开启智慧教育3.0
  18. 热插拔机制之udev和mdev
  19. 谷歌卫星地图下载器bigemap的优势
  20. 技嘉B360M Aorus Pro小主板配置简介

热门文章

  1. springboot通过date_histogram 按时间统计数据
  2. 星际争霸2 AI开发
  3. 7分钟学会HTML网页制作
  4. 大学计算机技巧讲座新闻稿,计算机科学与技术名家讲座系列报道(王希胤)
  5. kangle虚拟主机系统easypanel使用教程
  6. (github附源码)毕设微信小程序二手书交易后台PHP微擎
  7. 嗅探原理与反嗅探技术详解
  8. Lettuce之RedisClusterClient使用以及源码分析
  9. Excel图标美化技巧
  10. 自定义倒计时跳过按钮