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

news2024/10/6 6:30:23

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++:原码,反码,补码和常见的数据类型取值范围,溢出


文章目录

  • c/c++:类型限定符,printf输出格式,putchar,scanf,getchar
    • @[TOC](文章目录)
  • 类型限定符
  • printf的格式化输入和输出
  • putchar函数
  • scanf函数,从键盘获取数据,getchar呢
  • getchar,从键盘中获取一个字符
  • 总结输入输出的格式匹配
  • 总结

类型限定符

在这里插入图片描述
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,可以不考虑空间复杂度,但是面试既要考虑时间复杂度最优,也要考虑空间复杂度最优。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/416095.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

结构方程模型(SEM)高阶应用系列

结构方程模型(Structural Equation Modeling)是分析多变量间因果关系的利器,在众多学科领域具有巨大应用潜力。我们前期推出的《基于R语言结构方程模型》通过结构方程原理介绍、结构方程全局和局域估计、模型构建和调整、潜变量分析、复合变量…

docker-compose安装prometheus告警系统

docker-compose安装Prometheus一、概述一、docker-compose二、配置文件一、概述 本文只有监控与告警的安装、告警发送、发送模版的配置。没有数据展示监控数据UI工具 一、docker-compose 1)docker-compose.yaml version: 3.0 services:#1.prometheusprometheus:…

springcloud学习总结

springcloud 构建微服务项目步骤 导入依赖编写配置文件开启这个功能 Enablexxx配置类 于2023年2月24日下午17点38分开始学习于2023年3月17日晚上20点26分学完总结代码地址:https://gitee.com/liang-weihao/StudySpringcloud学习笔记地址:https://www.…

【Linux-MYSQL】数据库的使用

目录 1.数据库介绍 🌈1.1数据库的分类 🌈1.2存储引擎 2.数据库的操作 🌈2.1创建数据库 ​编辑👿 1.查show databases; 👿2删除 drop database库名 👿3.创建 create 查看创建数据库的详细信息 &…

朝花夕拾 - 卷王的自白(光头祭天,法力无边》

一、震撼开场 做一个卷王 ta 有什么错,无非就是 ——「秃」了那么一点点!!!咳咳咳,一一回复:自愿的没有想不开没有考到寺庙心态正常……如果非要给这次的行为贯穿一个理由,那就是「下周四就 28 …

Nfinity.io ——Web3.0创新性内容创作和社交一站式平台,引领NFT社交新时代

Nfinity.io 是什么? Nfinity.io 是一个Web3.0时代创新性内容创作和社交一站式平台,旨在彻底改变创作者、平台和粉丝的互动关系。该平台允许用户在同一个平台访问他们在 TikTok、YouTube 和 Twitter 等热门社交平台上喜欢/关注的创作者。此外&#xff0c…

图形系统:简简单单学习WindowManagerService的启动流程

作者:新小梦 在系统启动流程中,Zygote进程通过fork自己来创建SystemServer进程。SystemServer进程的主要职责之一就是创建SystemServiceManger,使自己成为服务的注册中心,并启动三种不同类型的服务:引导服务、核心服务…

mqttx read econnreset异常排查

mqtt 会话 read econnreset 使用mqttx连接mqtt服务器时出现READ ECONNRESET的排查 前段时间公司新增了mqtt服务器,在我们初步测试的时候没有问题,但是随着连接数量增多,后续几天连续间隔出现READ ECONNRESET,导致项目无法正常使…

Unity Batching 批处理

Unity Batching 批处理 了解批处理前先了解下 Draw Call 要了解 Draw Call 需要先了解游戏引擎是如何把物体图像绘制到屏幕上的。 (1):渲染流水线 渲染流水线的任务为从一个 二维、三维场景开始,最终渲染为一张二维图像,显示在屏幕上。 计算…

使用Unit Scaling进行FP16 和 FP8 训练

Unit Scaling 是一种新的低精度机器学习方法,能够在没有损失缩放的情况下训练 FP16 和 FP8 中的语言模型。 使用FP16和BFLOAT16替代FP32可以将内存、带宽和计算需求的大幅减少,这也是目前越来越大的模型所需要的。 背景介绍 随着支持fp8的硬件的发展&…

webrtc入门系列(三)云服务器coturn环境搭建

《webrtc入门系列(一)easy_webrtc_server 入门环境搭建》 《webrtc入门系列(二)easy_webrtc_server 入门example测试》 《webrtc入门系列(三)云服务器coturn环境搭建》 《webrtc入门系列(四&…

测试题目气死人

服了差不多每一题都要错几个案例我真的服了wok,什么鬼东西!!! lx学长的羊圈 Description lx学长是一个养羊大户,有成千上百个羊圈。可是却一次也没来羊圈帮过忙,今天他被叫来羊圈给羊羊们施展成双成对大法…

力扣算法系统刷题题解记录

力扣算法系统刷题题解记录 文章目录力扣算法系统刷题题解记录前言一、数组704二分查找示意图:解题思路代码27.移除元素示意图解题思路代码前言 参考顺序和资料:《代码随想录》 二刷要认真做笔记啦,加油! 一、数组 704二分查找 …

2023-04-12 面试中常见的数组题目

数组中的问题其实最常见 通过基础问题,掌握写出正确算法的“秘诀”巧妙使用双索引技术,解决复杂问题对撞指针- 滑动窗口 1 从二分查找法看如何写出正确的程序 本节学习重点:处理边界问题! 1.确定边界范围方法,先用区…

13、Qt生成dll-QLibrary方式使用

Qt创建dll,使用QLibrary类方式调用dll 一、创建项目 1、新建项目->其他项目->Empty qmake Project->Choose 2、输入项目名,选择项目位置,下一步 3、选择MinGW,下一步 4、完成 5、.pro中添加TEMPLATE subdirs&#xff…

定时任务之时间轮算法

初识时间轮 我们先来考虑一个简单的情况,目前有三个任务A、B、C,分别需要在3点钟,4点钟和9点钟执行,可以把时间想象成一个钟表。 如上图中所示,我只需要把任务放到它需要被执行的时刻,然后等着时针转到这个…

IP协议(网络层重点协议)

目录 一、IP协议报头格式 二、地址选择 1、IP地址 (1)格式 (2)组成 (3)分类 (4)子网掩码 三、路由选择 IP协议是网络层的协议,它主要完成两个方面的任务&#xf…

4.16--设计模式之创建型之代理模式(总复习版本)---脚踏实地,一步一个脚印

1.代理对象 定义:代理模式给某一个对象提供一个代理对象,并由代理对象控制对原对象的引用,从而实现对真实对象的操作。 通俗的来讲代理模式就是我们生活中常见的中介。 在代理模式中,代理对象主要起到一个中介的作用,…

初识Docker并在linux完成安装

文章目录一、 初识Docker1.1 简介1.2 Docker和虚拟机的异同1.3 Docker架构二、 DockerHub三、Docker的安装一、 初识Docker 1.1 简介 Docker是一种开源的容器化平台,可以让开发者在容器中打包、发布、运行和管理应用程序。它使用轻量级的容器来隔离应用程序和它们的…

Scrapy爬虫基本使用与股票数据Scrapy爬虫

Scrapy爬虫的常用命令 scrapy命令行格式 红色是常用的三种命令 为什么Scrapy采用命令行创建和运行爬虫? 命令行(不是图形界面)更容易自动化,适合脚本控制 本质上,Scrapy是给程序员用的,功能&#xff08…