c/c++:类型限定符,printf输出格式,putchar,scanf,getchar

c/c++:类型限定符,printf输出格式,putchar,scanf,getchar

2022找工作是学历、能力和运气的超强结合体,遇到寒冬,大厂不招人,此时学会c++的话,
我所知道的周边的会c++的同学,可手握10多个offer,随心所欲,而找啥算法岗的,基本gg
提示:系列c++学习的基础和高阶知识,用于公司生产实践中,实实在在的公司部署产品要用的,因为c++速度快,
而java和Python速度慢,自然往硬件里面部署算法啥的,都得用c++或者c,因此本科学的c很重要,后来的Python或者java就没有那么重要了,
c/c++系列文章:
【1】c++:c语言优缺点,visual studio2019如何新建项目,写hello world程序
【2】c/c++:gcc安装,gcc编译hello world文件,system函数调用系统命令,sleep函数
【3】linux下gcc的编译过程和功能,预处理,编译,汇编,链接,.c预处理为.i文件.s文件.o文件.exe文件
【4】c/c++:windows平台下依赖的动态库,c底层是汇编语言,程序断点调试,反汇编,vs快捷键
【5】c/c++:数据类型,常量变量,标识符,有符号整型,无符号unsigned,字符类型,字符串类型,实数类型,浮点型,科学计数法
【6】c/c++:2进制、8进制、10进制、16进制和进制之间的转换,c语言输出匹配格式%
【7】c/c++:原码,反码,补码和常见的数据类型取值范围,溢出


类型限定符

在这里插入图片描述
volatile没见过啊

adj.
易变的,不稳定的; (液体或油)易挥发的; 爆炸性的; 快活的,轻快的

防止编译器优化代码??

flag=1
flag=0
在这里插入图片描述
编译器会默认给它干成falg=0
不能让编译器这么搞的话,加volatile就行

volatile int flag=0;
flag=1
flag=0
//基本用不上

register寄存器

int a=10;//内存里面会放它,但是不在寄存器中
//如果你想整到寄存器里面,提高效率,可能需要用register关键字

如果你想把变量整到寄存器里面,提高效率,可能需要用register关键字
在这里插入图片描述
但是cpu很忙,经常用寄存器,你可能申请不到哦
如果指针操作就gg了
因为指针需要知道变量的地址,如果你放寄存器了,那gg
没法玩

register基本没啥用,现在我们用不到,回头再说。

printf的格式化输入和输出

关注字符串
一串字符变量
""双引号引起来的字符,叫字符串
“abc”

python里面可以用单引号,反正简介表达即可
一定有一个结束标记【c语言中\0就会自动加上去结束

字符串内部存储是这样的
“abc\0”

这是c语言的特殊之处哦

%d整型
%u无符号
%c字符
%o八进制
%x十六进制】

%s字符串:
从字符串的第一个字符,开始打印,直到\0结束

字符一个字节
在这里插入图片描述
printf遇到/0才会停止打印字符哦

'a’字符
"a"字符串==“a\0”

它俩不是等价的哦!!!!!

void f12(void)
{
	char ch = 'a';//字符
	char str[] = "a";//字符串,本质就是字符数组
	char str2[5] = "abcdef";//字符串,本质就是字符数组
	//这种可以已定义长度,也可以不定义长度,它自动分配就行
	// 
	//string str2 = "a";//c++貌似这么定义的
	printf("字符:%c\n", ch);
	printf("字符串:%s\n", str);
}

在这里插入图片描述
在这里插入图片描述

如果你非要定义为字符数组,你就需要加\0
否则,它就gg


void f12(void)
{
	char ch = 'a';//字符
	printf("字符:%c\n", ch);

	char str[] = "a";//字符串,本质就是字符数组
	//char str2[5] = "abcdef";//字符串,本质就是字符数组
	//这种可以已定义长度,也可以不定义长度,它自动分配就行
	// 
	//string str2 = "a";//c++貌似这么定义的

	char s2[2] = { 'a','k' };//没有加\0
	
	printf("字符串:%s\n", s2);
}

在这里插入图片描述
在这里插入图片描述
加了\0才算是字符串哦

	char s2[3] = { 'a','k','\0'};//没有加\0
	
	printf("字符串:%s\n", s2);

在这里插入图片描述
懂了吧,字符串自动是加\0的
打印printf时,它必须遇到\0才会结束,否则就会打印乱码
在这里插入图片描述

%m.n
它是干嘛的?
打印实数类型,一共m位,n个小数点【不足的前面补零】

在这里插入图片描述
在这里插入图片描述
%p打印指针的地址
骚啊

%%输出一个百分号

printf("\%");//反斜杠无法直接转移%
	printf("%%");//俩百分号才行

在这里插入图片描述
%Ns显示N个字符的字符串


	printf("%5s\n", str);//俩百分号才行

在这里插入图片描述
%-Ns那就是左对齐,右边补齐空格
%Ns是左边填充空格

在这里插入图片描述
如果你是要用0填充的话可以放0

不常用的

putchar函数

直接打印字符,不用printf啥的格式匹配符麻烦


	putchar(ch);

在这里插入图片描述
它可以直接使用ASCII码字即可


	putchar(ch);
	putchar(98);

在这里插入图片描述
它不可以放字符串,否则就是乱码哦
在这里插入图片描述
'abc’默认只看末尾字符
错误的表示
不管

scanf函数,从键盘获取数据,getchar呢

scanf从键盘接受用户输入
需要有格式匹配的,和那个printf类似

先定义变量,再去接受,存入
懂?

void f13(void)
{
	int a;
	scanf("%d", &a);//取出变量a的地址,然后把int数字读进去放好,存储
	printf("%d\n", a);//打印

}

在这里插入图片描述
使用scanf如果报错则解决方案是
错误C4996 ‘scanf’: This function or variable may be unsafe. Consider using scanf_s instead. 最高效解决办法!!

再看看其他的字符输入啥的

void f13(void)
{
	//int a;
	//scanf("%d", &a);//取出变量a的地址,然后把int数字读进去放好,存储
	//printf("%d\n", a);//打印

	char ch;
	scanf("%c", &ch);//取出变量a的地址,然后把int数字读进去放好,存储
	printf("%c\n", ch);//打印

}

在这里插入图片描述
你可以连续输入多个字符变量

void f13(void)
{
	//int a;
	//scanf("%d", &a);//取出变量a的地址,然后把int数字读进去放好,存储
	//printf("%d\n", a);//打印

	char ch,c2,c3;
	scanf("%c%c%c", &ch, &c2, &c3);//取出变量a的地址,然后把int数字读进去放好,存储
	printf("%c%c%c\n", ch, c2,c3);//打印

}

在这里插入图片描述
整数也可以这么搞的
中间用空格隔开

	int a,b,c;
	scanf("%d%d%d", &a, &b, &c);//取出变量a的地址,然后把int数字读进去放好,存储
	printf("%d\n", a);//打印
	printf("%d\n", b);//打印
	printf("%d\n", c);//打印

在这里插入图片描述

那要是字符串呢?
定义字符数组,即字符串,c++中直接string
c语言中是字符数组char s[N],N长度。

	char s[5];
	scanf("%s", &s);
	printf("%s\n", s);

在这里插入图片描述
这样可以的,稳

在这里插入图片描述
注意,因为数组名本身就代表地址了
字符数组,就不要取地址了

	char s[5];
	scanf("%s", s);
	printf("%s\n", s);

看见没,不要&取地址符号了。
在这里插入图片描述
最常用的接受的就这样了。

注意
你定义了多长的数组空间,但是你可以多输入,不过呢,后面那些超过内存的空间是会出错的
在这里插入图片描述
即使你多输入了
printf可能会正常输出
因为它呀遇到\0才会停止打印

反正scanf有安全隐患的,存储空间不足,虽然可以存储,但是不被保护
在这里插入图片描述
多出去的,肯定会被别人覆盖

	char s[5];
	scanf("%s", s);

	int s2[200] = {1,2,3,4,5,6,7,8,9,10};
	printf("%s\n", s);//可能多了字符,它也能接受,但是你定义内部的空间,超过了,它不会管的
	//数组是连续存储的
	//c语言都会默认挨着存储的


在这里插入图片描述
反正空间不足,不要乱使用,否则出问题查不出来。

scanf即使空间足够,好像也还有问题?
你只要搞空格,基本就分开了,你想要后续的输入就gg
碰到空格或者\n换行符号
它就会自动终止。

目前来看,scanf没法接受带空格的字符串。。。

后续扩展之后用正则表达式来搞。
在这里插入图片描述

getchar,从键盘中获取一个字符

	//getchar获取一个字符
	char c = getchar();
	printf("%c\n", c);

五参数,返回一个字符
在这里插入图片描述
放一个字符,可以用printf或者putchar
easy

putchar(‘\n’);回车,好说

putchar('\n');回车,好说

在这里插入图片描述
输入输出基本就搞定了

总结输入输出的格式匹配

c语言的字符数组就是字符串
懂?

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述


总结

提示:重要经验:

1)
2)学好c++,即使经济寒冬,手握10个大厂offer绝对不是问题!
3)笔试求AC,可以不考虑空间复杂度,但是面试既要考虑时间复杂度最优,也要考虑空间复杂度最优。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

冰露可乐

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值