c++:c++的输入输出(一)

发布于:2025-04-20 ⋅ 阅读:(58) ⋅ 点赞:(0)

本文讲解的是除了cin和cout外的其他输入输出

1.单字符输入输出:getchar与putchar

1.1getchar

getchar的作用是从标准输入流中获取一个字符(包括换行和空格等)

所处头文件:cstdio

使用格式:

int getchar();

返回值是整形(ascll码值),无需传参

举例1:读取字符a

我们在输入框中输入字符a,然后打印c值(a的ascll码值为97)的结果是97,然后强制类型转换为char之后输出就是a了

举例2:读取空格字符

我们输入了空格,然后输出空格的ascll码值32,最后又输出了一个空格,然后换行。这里我们用bbb来显示出我们输出的是空格

举例3:读取换行字符

输入换行字符也就是‘\n’,然后打印\n的ascll码值10,换行后输出\n。虽然这里我们在cahr()a之后没有加endl,却完成换行,这说明我们输出的就是换行符。

举例4:读取截止符

我们用Ctrl+z表示停止输入,而停止输入读取的ascll值是-1,所以a的值是-1.然后(char)的字符就是一个随机的字符

1.2putchar

既然getchar()是读取一个字符,那么为啥我们输出的时候还要强制类型转换那么复杂?

其实之所以不能直接输出字符是因为和getchar组合使用的是putchar()。

putchar的作用是将参数字符输出到控制台

所处头文件:cstdio

使用格式:

putchar(c);

输出成功:

putchar会打印对应ascll码值的字符,打印成功就返回该字符的ascll码值

输出失败:

若打印失败就返回EOF常量

2.格式化输入输出:printf与scanf

2.1printf

五个常用占位符:

1.%d:整型

2.%s:字符串

3.%f:浮点型

4.%c:单字符

5.%n:无符号整型

(1)限定宽度:
printf可以通过在占位符的字母前加数字来控制输出的宽度

这里我们就控制了输出字符数至少为5,如果超过5就正常输出,不用在数字前面补0

而我们默认情况下是对输出数据进行右对齐,也就是在数据前面补0.若我们在占位符%后面加上一个’-’就可以将对齐转换为左对齐。

(2)限定小数位数

小数的默认位数是保留小数点的后六位,如果我们希望只保留小数点后两位,那么我们可以在占位符的字母前面加一个'.',然后在'.'的后面写上需要保留的小数点位数,就可以保留指定位数的小数

我们先看默认情况:

默认情况下保留了六位小数

然后我们看一下控制了保留两位小数的情况:

这里%.2f就是保留两位小数的浮点数的格式输出


我们也可以同时控制小数位数和输出宽度:

这里%6.2f表示右对齐输出大于等于6个字符,并保留小数点后两位。

注意:小数点也是一个字符

思考:我们是否可以不具体在“ ”中指定占位符的宽度和小数点设置?

可以,我们可以用'*'来占位,然后在后面传参控制。

不过需要把宽度限制和小数点限制放在前面两个参数位置

2.2scanf

(1)scanf中指定的输入格式和程序输入的数据格式必须完全一致,否则不会按照预期进行数据获取

下面我们以输入多个数据的情况为例讲解:

在scanf中我们加上了逗号间隔,所以这里我们用空格为间隔输入的时候会出现读取失败的问题

正确的输入:

我们在输入的数据时候用逗号间隔开,完全符合了输入的格式,从而可以正确的从输入流中读取数据
(2)scanf处理字符时会自动忽略空白字符,如空格,换行符,制表符

也就是说我们可以在两个数据输入之间添加任意空格,换行符等空白字符

这里我们在四个数据的输入之间添加了任意空白字符,但是仍然不影响数据的读取。

接下来我们将会讲解scanf处理用户输入的原理

(3)scanf处理用户输入的原理:

用户输入的数据会先存到缓存中,当按下回车键的时候再按照占位符的类型对缓存进行解读。每次解读都是从上一次完遗留的下一个字符开始,直到读完缓存/读到第一个不满足条件的字符为止。

这里的读取过程如下:
首先对%d进行解读,读取-12之后遇到.,而.不是属于整形的符号,所以停止读取。

然后从.开始对%f进行解读,读取.47之后遇到#,而#不属于小数符号,所以停止读取。

综上,读取到的就是-12和0.47

(4)%c占位符

%c占位符会读取第一个字符,无论他是否是空白字符。

这里我们输入了空格,然后%c读取到的就是空格,所以在printf输出的时候---与---之间有一个空格

如果我们需要忽略前导空白字符,可以在%c前面加一个空格:

这里我们前面输入了多个空格和换行,但是直到输入j之前,printf都没有执行,说明及时%c忽略了前导空白字符

(5)scanf的返回值:一个整数,表示录入成功的变量个数

没有读取到字符,或者匹配失败就返回0

这里的格式化字符串都是%d,而我们输入的数据都是字符类型的,所以都匹配失败了,scanf返回值为0

若遇到读取错误或者读取到文件末尾就返回-1

这里我们演示ctrl+z的结束输入功能,输入完1之后,我们直接输入ctrl+z让输入结束,所以最后只有一个数据录入成功了。


网站公告

今日签到

点亮在社区的每一天
去签到