首页 > 编程语言 >备赛蓝桥杯——day4:C++篇

备赛蓝桥杯——day4:C++篇

时间:2025-01-19 15:00:07浏览次数:3  
标签:字符 读取 int day4 备赛 占位 蓝桥 printf scanf

第二章:C/C++输入输出(上)

1.getchar和putchar

getchar() 和 putchar() 是属于C语⾔的库函数,C++是兼容C语⾔的,所以C++中只要正确包 含头⽂件也可以正常使⽤这两个函数。

1.1getchar

函数原型:

int getchar(void);

getchar()函数返回用户从键盘输入的一个字符(本质是返回他的asc码值),使用时不带有任何参数

运行到这个命令就会暂停,等待用户键盘输入,等同于使用cin或scanf读取一个字符

它的原型定义在头文件<cstdio>,使用时必须包含这个头文件!

注意:

getchar不会忽略起首的空白字符,总是返回当前读取的第一个字符,无论是否是空格;如果你用了多个getchar,他连最后的换行符都不会放过,也会被读取

如果读取失败,返回常量EOF(通常是-1)所以返回值必须是int而不是char(具体原因见文件相关函数的那篇博客)

如何让他读取失败?按下Ctrl+z即可

在使用时我们发现,因为返回值是int类型,如果想用cout来打印的话,必须强制类型转换。感觉很麻烦,有什么好办法呢?

我们通常把getchar和putchar一起使用,这俩才是原配~

1.2putchar()

函数原型:

int putchar(int character);

putchar()函数将他的参数字符输出到屏幕,它的原型也在<cstdio>中

#include<cstdio>
int main()
{
int ch=0;
ch=getchar();
putchar(ch);
return 0;
}

这样就不存在转换类型的问题了~

操作成功时,putchar返回输出的字符(本质还是返回他的asc码值),否则返回常量EOF

就说返回的本质是asc码值吧~

小提示:这⾥⼤家先学会这两个函数的使⽤,在后期算法模块,会学到快速读写,到时候就会⽤ 到这两个函数。

2.scanf和printf

scanf和printf是属于C语⾔的库函数,C++是兼容C语⾔的,所以C++中只要正确包含头 ⽂件也可以正常使⽤这两个函数。⽽且这两个函数在算法竞赛题⽬中使⽤的⾮常频繁,尤其是在输出格式控制中,所以接下来我们这⾥认真学习⼀下。

2.1printf

函数原型如下

 int printf ( const char * format, ... );

...是可变参数列表,具体见文件操作相关函数那篇博客

2.1.1基本用法

printf中的f代表格式化,可以指定输出文本的格式

printf不会在⾏尾⾃动添加换⾏符,运⾏结束后,光标就停留在输出结束的地⽅,不会⾃动换 ⾏。

如果⽂本内部有换⾏,也是通过插⼊换⾏符来实现,

2.1.2占位符

所谓“占位符”,就是这个位置可以⽤其他值代⼊(就像你用数学书给朋友占座一样,最后数学书的位置被你朋友替换了)

参数与占位符是⼀⼀对应关系,如果有 n 个占位符, printf() 的参数就应该有 n + 1 个。如果参数个数少于对应的占位符, printf()可能会输出内存中的任意值。

以下是两个占位符三个参数的例子:

%lld:十进制longlong类型

%f:double float类型

%Lf:long double类型浮点数

%u:无符号整数(unsigned int)

%zd:size_t类型

%%:输出一个百分号

2.1.3格式化输出

上面实例中,%5d表示这个占位符的宽度至少为5位,如果不满五位,酒会在对应的值前面加空格。输出的值默认右对齐,即内容前面有空格;如果希望左对齐,即输出内容后面加空格,就可以在占位符%后面加一个-号

由于⼩数的默认显⽰精度是⼩数点后6位输出⼩数时,有时希望限定⼩数的位数。举例来说,希望⼩数点后⾯只保留两位,占位符可以写 成 %.2f 。

最⼩宽度和⼩数位数这两个限定值,都可以⽤ * 代替,通过 printf() 的参数传⼊。

 #include <cstdio>
 int main()
 {
 printf("%*.*f\n", 6, 2, 0.5);
 return 0;
 }
 // 等同于printf("%6.2f\n", 0.5);

2.2scanf

int scanf ( const char * format, ... );

2.2.1基本用法

特别注意,scanf函数的占位符后⾯⼀般不会加 \n , \n 是换行,⼀般在输出的时候才使用

它的第⼀个参数是⼀个格式字符串,⾥⾯会放置占位符(与 printf() 的占位符基本⼀致),告诉编 译器如何解读⽤⼾的输⼊,需要提取的数据是什么类型。这是因为C语⾔的数据都是有类型的, scanf() 必须提前知道⽤⼾输⼊的数据类型,才能处理数据。

小提示:

scanf函数中存储数据的变量前面必须加上&运算符(指针变量除外),因为scanf()需要的是地址,必须要将i的地址取出来

如果这里的i变量是数组,就不用加&运算符(数组名就是首元素的地址,后期介绍)

scanf("%d%d%d%d", &a, &b, &c, &d);
scanf("%d %d %d %d", &a, &b, &c, &d);
scanf("%d,%d,%d,%d", &a, &b, &c, &d);//这种如果你不写,就打印不出来想要的效果

scanf() 处理数值占位符时,会⾃动过滤空⽩字符,包括空格、制表符、换⾏符等。(对比getchar)所以,⽤⼾输⼊的数据之间,有⼀个或多个空格不影想scanf解读数据,将输⼊分成⼏⾏,也不影响解读。

scanf处理输入的原理是:

用户的输入先放入缓存,等到按下回车键后,按照占位符对缓存进行解读,解读用户输入时,会从上一次解读遗留的第一个字符开始,直到读完缓存,或者遇到第一个不符合条件的字符为止

 #include <cstdio>
 int main()
 {
 int x = 0;
 float y = 0;
 // ⽤⼾输⼊"    -13.45e12# 0" 
scanf("%d", &x);
 printf("%d\n", x);
 scanf("%f", &y);
 printf("%f\n", y);
 return 0;
 }

读取过程详解:

读取到-13,scanf都认为这是可以出现在整型里面的,接下来读到小数点了,这不能出现在整形里面,停止读取;在接下来读取.45e12,这是可以出现在浮点数里面的,而再接下来,出现了#,不能出现在%f里面,读取停止

2.2.2占位符

%f:float类型

%lf:double类型

%Lf:long double类型

%[]:在⽅括号中指定⼀组匹配的字符(⽐如%[0-9]),遇到不在集合之 中的字符,匹配将会停⽌。

在上面所有占位符中,除了%c以外,都会自动忽略起首的空白字符。%c不忽略空白字符,总返回当前第一个字符,无论是不是空格

如果想抢纸条过字符前面的空白字符,可以写成以下形式:即%c前面加上一个空格,表示跳过0个或多个空白字符

scanf(" %c",&ch);

了解这一点后,当%c,%d等占位符连续使用的时候,也要注意,%c默认不会跳过空白字符,所以输入的时候,要非常小心!

#include <cstdio>
 int main() 
{  
int a;
 char ch;
 scanf("%d%c", &a, &ch);
 printf("%d %c\n", a, ch);
 return 0;  
}

如果在输⼊的时候,就是想在整数和字符之间加上空格,那么scanf中的格式串中%c的前⾯就要加上 空格。

 #include <cstdio>
 int main() 
{  
 int a;
 char ch;
 scanf("%d %c", &a, &ch);//%c的前⾯加上空格,是强制跳过数据输⼊中的空⽩字符
 printf("%d %c\n", a, ch);
 return 0; 
}

2.2.3scanf的返回值

返回值表示成功读取的变量个数

没读取任何项/匹配失败:返回0;

适用情况:进入输入环节什么多不做,等待程序自己结束;第一个数据就匹配失败,具体情况见scanf读取原理,比如:第一个类型是int,你却输入一个#,直接就匹配失败

在读取任何数据之前,读取错误或遇到文件末尾,返回常量EOF(-1)

适用情况:读取错误或输入Ctrl+z

我们⼀般会通过scanf的返回值来处理多组数据输⼊的竞赛题⽬,在后期的博客中⼤家都会一一见到的

标签:字符,读取,int,day4,备赛,占位,蓝桥,printf,scanf
From: https://blog.csdn.net/sally20060710/article/details/145229436

相关文章

  • 2025dsfz集训Day4:BFS及其优化
    DAY4:BFS及其优化BFS广度优先搜索(Breadth-First-Search)是一种图形数据结构的遍历算法。它从给定的起始顶点开始,首先访问起始顶点的所有邻接顶点,然后再依次访问这些邻接顶点的邻接顶点,以此类推,一层一层地向外扩展,直到遍历完整个图或者找到目标顶点。\(BFS\)的空间优化:使......
  • 蓝桥杯单片机基础部分——5、DS18B20温度传感器
    前言好久没有更新关于蓝桥杯单片机相关的模块了,今天更新一下数字温度传感器DS18B20的相关应用单线数字温度计DS1820介绍DS1820数字温度计提供9位(二进制)温度读数,指示器件的温度。信息经过单线接口送入DS1820或从DS1820送出,因此从主机CPU到DSl820仅需一条线(和地线)......
  • 蜂鸣器与继电器的基本控制(蓝桥杯练习02)
    蜂鸣器正极接电源,给NBUZZ低电平,蜂鸣器鸣叫继电器RELAY-SPDT为线圈,里面有铁芯,给线圈通电(VCC一端为高电平,NRELAY给低电平)使其产生磁场将K1吸合。ULN2003中间连接了一个非门,若左边为1,右边输出则为0。蜂鸣器与继电器电路与前文的led一样,或非门连接着译码器和锁存器,......
  • 蓝桥杯备赛 Day10.2昆虫繁殖
    信息学奥赛一本通(C++版)在线评测系统【题目描述】科学家在热带森林中发现了一种特殊的昆虫,这种昆虫的繁殖能力很强。每对成虫过x个月产y对卵,每对卵要过两个月长成成虫。假设每个成虫不死,第一个月只有一对成虫,且卵长成成虫后的第一个月不产卵(过x个月产卵),问过z个月以后,共有成......
  • 【Html.js——页面布局】给页面化个妆(蓝桥杯真题-1769)【合集】
    目录......
  • 【Vue.js——关键字匹配】搜一搜呀(蓝桥杯真题-1762)【合集】
    目录......
  • 从零开始的python之旅(day4)
    从零开始的python之旅(day4)  昨天博客园好像崩了,所以昨天晚上没写,就挪到今天来补了,昨天主要是文件操作,话不多说,上代码  addressBookdefmain():file1=open('TeleAddressBook.txt','rb')file2=open('EmailAddressBook.txt','rb')file1.readline()fil......
  • 十分钟写作Day4 1.16
    前言本来昨天和赵北,南皓文和樊绍峰一起去看北京男篮德比,但又因昨天是命题作文,没有记录下我当时的感慨,便在今天的随笔里说说我的看法。正文与其说是感慨,不如说这是从不同角度观察这场比赛。由于赵北已经在他的随笔里介绍了比赛的全过程,因此我在这里也不过多的赘述比赛本身。而......
  • Pytorch框架与经典卷积神经网络学习Day4|VGG原理与实战
    目录跟学视频1.原理1.1VGG网络诞生背景 1.2VGG网络结构 1.3VGG总结2.实战2.1model.py2.2model_train.py2.3model_test.py跟学视频炮哥带你学_Pytorch框架与经典卷积神经网络与实战1.原理VGG(VisualGeometryGroup)是一个深度卷积神经网络架构,广泛应用于计算机......
  • 【Html.js——功能实现】新年贺卡(蓝桥杯真题-1768)【合集】
    目录......