《从10开始学C++》四(结构体,交换,格式化)


前言

文章不小心删了再写一遍。
C++14(GCC 9)

正文

结构体

结构体有什么用?
比如一个玩家有血量、名字、级别和能量,一个服务器有100玩家,你要怎么存储这些玩家信息呢?
其实可以用结构体数组解决
用法:

struct student{
	int score,id;
}t,p[100];
struct teacher{
	int exp,iv;
};
teacher a,b;
bool cmp(student a,student b){
	if(a.id!=b.id)return a.score<b.score;
	return a.id>b.id;
}

struct就是定义一个结构体的数据类型,注意是定义数据类型,struct后面跟的名字是一个你定义的数据类型,大括号里面写这个数据类型包含其他的哪些数据类型,你可以结构体里定义结构体类型,甚至可以一个数据类型里包含一个自己
如果你想直接定义可以在分号前面写名字,如果不想直接定义,一定要注意后面那个分号,到定义的时候就按平常方法写就行。
那么,如何访问其中一个子数据呢?很简单,只要不是指针变量(?),都可以用:名字.子名称,如访问a里的exp,就写a.exp

变量名定义规则

话说都已经学到结构体了,我竟然没说变量名定义规则
规则如下:

int k;//合法
int /k;//不合法
int _k;//合法
int k1;//合法
int 1k;//不合法
int k·w;//不合法
int ツつ;//不合法
int k_;//合法
规则1:名字开头只能由下划线、字母组成
规则2:除开头之后只能由下划线、字母、数字组成

函数名定义规则和变量名一样,只不过加了个参数的括号

交换

临时交换(temporary交换)

要交换两个元素,如果直接互相赋值,会发现一个问题:A变成B了,那B就不能变成A了
所以,我们可以保存A,然后让A变成B,然后B变成保存A。我们管这个保存变量叫tmp,就是临时(temporary)缩写(temp)再缩写(tmp)

		int tmp=a;
		a=b;
		b=a

swap交换

我们发现太临时交换麻烦了,要三行,有没有更简便的呢?
可以用swap函数进行交换,当然只是你写起来简单了,我估计swap函数里写的还是临时交换
用法:

		swap(a[i],a[i+1]);//交换数组中当前元素和后一个元素

C语言原生输入输出:格式化

之前举例说明了cin>>acout<<a这种输入输出,但C语言没有cin和cout,用什么输出呢?

	scanf("%d",&a);
	printf("你输入了:\n%d",a);

一定要注意scanf的&号,如果这个丢了,你会发现你的程序会突然“罢工”,如果提交到洛谷会全WA(亲身经历awa),而printf不用加
scanf的双引号里面写后面写的变量的格式化类型,如果你在scanf的双引号里写其他东西,那么如果你输入不按这个格式来,就会发现值没变

	scanf("%d:%d",&a,&b);
	//输入1:
	3 2
	//结果:不变
	//输入2:
	3:2
	//a和b分别变成了3和2

printf里头就可以写其他的,写格式化符号的地方就是你后面写变量的地方,从前往后— —对应
当然你不写变量也可以,光写输出的字符串,或者后面写一个其他东西,比如:

	printf("%d",!a&&b);

包含一个逻辑,!代表非,相当于反转,a如果不是0那都代表true,反转就是 a是0,相同的,且b不是0,则输出1,否则输出0
格式化符号列举:
下一篇写AWA

总结

信息量巨大
还有下一篇

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值