C语言项目-后宫选妃系统-第一天

因为疫情只能在家看网课,学了几天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); //函数1
            printf("输入任意键以继续.....\n");
            scanf("%d", &c);
            break;
        case 2:
            // printf("2");
            chooseOne(p, num); //函数2
            printf("输入任意键以继续.....\n");
            scanf("%d", &c);
            break;
        case 3:
            printf("3");
            forsakeOne(p, num); //函数3
            printf("输入任意键以继续.....\n");
            scanf("%d", &c);
            break;
        case 4:
            printf("4");
            findOne(p, num); //函数4
            printf("输入任意键以继续.....\n");
            scanf("%d", &c);
            break;
        case 5:
            printf("5");
            seeAll(p, num); //函数5
            printf("输入任意键以继续.....\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占位的话,直接将数组变量名放进去就好了,不需要再取值.

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

发布了12 篇原创文章 · 获赞 3 · 访问量 760

猜你喜欢

转载自blog.csdn.net/weixin_45761327/article/details/104793270