代码是最为耐心、最能忍耐和最令人愉快的伙伴,在任何艰难困苦的时刻,它都不会抛弃你。
结构体:结构体是一种构造数据类型
结构体里面不能直接对数据直接赋值,赋值的是地址。
struct [结构体] //struct是关键字
{
类型标识符 成员名;
……….
char names[100]; //姓名
char sex[10]; //性别
chhar mz[10]; //名族
char bd[100] ://出生年月日
}
void main (){
struct macard card1;
strcpy(card1.name ,”三支熊”); //赋值的方式1
sprinntf(card1.name ,”三支熊”); //赋值的方式2
struct MyStruct card1 = {“姓名:赵子龙”,9,”职业:战士”}; //赋值的方式3
}
下面总结下结构体,就是相当于一个类,如果要用的话直接用就好,然后在打印的时候直接用就好,下面用一个简单代码实现一下,结构体的用法。
我的这个代码还是比较繁琐。
主要学会结构体的用法就好。
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>
#include <stdlib.h>
struct MyStruct
{
char name[100];
int dj;
char work[10];
};
void main(){
struct MyStruct card1 = {"姓名:赵子龙",9,"职业:战士"};
struct MyStruct card2 = { "姓名:关羽", 12, "职业:战士" };
struct MyStruct card3 = { "姓名:张飞", 6, "职业:战士" };
struct MyStruct card4 = { "姓名:流浪法师", 6, "职业:法师" };
struct MyStruct card5 = { "姓名:伊泽瑞尔", 8, "职业:法师" };
struct MyStruct card6 = { "姓名:光辉女郎", 9, "职业:法师" };
struct MyStruct card7 = { "姓名:圣枪游侠", 9, "职业:ADC" };
struct MyStruct card8 = { "姓名:皮诚女警", 9, "职业:ADC" };
struct MyStruct card9 = { "姓名:大嘴", 9, "职业:ADC" };
printf("请输入你要选择的职业:1战士 2法师 3ADC\n ");
int a = 0;
scanf_s("%d",&a);
if (a==1)
{
printf("你选择了战士\n");
printf("请选择你要的英雄 1赵子龙 2关羽 3张飞\n");
int n = 0;
scanf_s("%d", &n);
if (n == 1)
{
printf("%s\n %d\n %s\n", card1.name, card1.dj, card1.work);
}
if (n == 2)
{
printf("%s\n %d\n %s\n", card2.name, card2.dj, card2.work);
}
if (n == 3)
{
printf("%s\n %d\n %s\n", card3.name, card3.dj, card3.work);
}
}
if (a==2)
{
printf("你选择了法师\n");
printf("请选择你要的英雄 1流浪法师 2伊泽瑞尔 3光辉女郎\n");
int n = 0;
scanf_s("%d", &n);
if (n == 1)
{
printf("%s\n %d\n %s\n", card4.name, card4.dj, card4.work);
}
if (n == 2)
{
printf("%s\n %d\n %s\n", card5.name, card5.dj, card5.work);
}
if (n == 3)
{
printf("%s\n %d\n %s\n", card6.name, card6.dj, card6.work);
}
}
if (a == 3)
{
printf("你选择了ADC\n");
printf("请选择你要的英雄 1圣枪游侠 2皮诚女警 3大嘴\n");
int n = 0;
scanf_s("%d", &n);
if (n == 1)
{
printf("%s\n %d\n %s\n", card7.name, card7.dj, card7.work);
}
if (n == 2)
{
printf("%s\n %d\n %s\n", card8.name, card8.dj, card8.work);
}
if (n == 3)
{
printf("%s\n %d\n %s\n", card9.name, card9.dj, card9.work);
}
}
system("pause");
}
下讲到了共用体
共用体类型数据和结构体类型数据属于构造函数。
共用体在类型上与结构体相似,
二者的区别:
1结构体每个成员变量占有不同的贮存空间。
2而共用体变量所有成员共享同一内存单元。
3以最长的成员所占的内存作为共用体的储存空间。所有地址同一地址开始储存。
4,采用覆盖技术,在某一时刻,只能让一个成员起作用。
union 共用体标志
{
数据类型 共用体成员1;
数据类型 共用体成员2;
数据类型 共用体成员3;
}
下面的代码是一个任务简单人物的属性
代码还要改进
这个代码的问题在于。当你输入选择之后,会出现属性,但是不能连续输入。
#define _CRT_SECURE_NO_WARNINGS
#include<windows.h>
#include<stdio.h>
#include <stdlib.h>
struct MyStruct
{
char 名字[20]; //主信息
short 等级;
char 职业[20];
int 生命值; //主属性
int 魔法值;
int 内功值;
int 物理防御;
int 魔法防御;
int 物理攻击;
int 魔法攻击;
int 道术攻击;
//副属性
int 闪避;
int 准确;
int 幸运;
int 诅咒;
int 暴击率;
int 暴击力;
//背包属性
int 红药;
int 蓝药;
int 天山雪莲;
};
void mai()
{
srand(time(0));
struct MyStruct card1;
sprintf(card1.名字,"九月我不撸");
card1.等级 = 60;
sprintf(card1.职业, "战士");
printf("人物基本属性\n");
printf("姓名=%s,等级=%d,职业=%s\n", card1.名字,card1.等级,card1.职业);
card1.生命值 = 15516;
card1.魔法值 = 2430;
card1.内功值 = 205;
printf("\n人物主属性\n");
printf("生命值=%d\n 魔法值=%d\n 内功值=%d\n", card1.生命值, card1.魔法值, card1.内功值);
card1.物理防御 = 549 + rand() % 248;
card1.魔法防御 = 155 + rand() % 265;
card1.物理攻击 = 435 + rand() % 563;
card1.魔法攻击 = 10 + rand() % 41;
card1.道术攻击 = 10 + rand() % 41;
printf("物理防御=%d\n 魔法防御=%d\n 物理攻击=%d\n 魔法攻击=%d\n 道术攻击=%d\n", card1.物理防御, card1.魔法防御, card1.物理攻击, card1.魔法攻击,card1.道术攻击);
card1.闪避 = 8;
card1.准确 = 30;
card1.幸运 = 0;
card1.诅咒 = 0;
card1.暴击率 = 0;
card1.暴击力 = 0;
printf("\n人物副属性\n");
printf("");
printf("闪避=%d\n 准确=%d\n 幸运=%d\n 诅咒=%d\n 暴击率=%d\n 暴击力=%d\n", card1.闪避, card1.准确, card1.幸运, card1.诅咒, card1.暴击率, card1.暴击力);
system("pause");
}
void mai1(){
struct MyStruct card1;
card1.红药 = 3;
card1.蓝药 = 5;
card1.天山雪莲 = 6;
printf("\n人物背包\n");
printf("红药=%d\n 蓝药=%d\n 天山雪莲=%d\n", card1.红药, card1.蓝药, card1.天山雪莲);
system("pause");
}
void main(){
printf("请选择你要查看的属性:1战士 2背包 \n");
int a = 0;
scanf_s("%d",&a);
if (a==1)
{
mai();
}
if (a == 2)
{
mai1();
}
else
{
printf("你的选择不正确");
int a = 0;
scanf_s("%d", &a);
}
}