C语言的格式化输出与输入

首先来说。scanf和print是C语言编程中,使用最频繁的函数,他们用来格式化输入与输出。

一.printf 函数

首先来简单来看一下printf的简单语法
printf(格式串,表达式1,表达式2,表达式3);
这里显示的值可以是常量、变量,或者更复杂的表达式。另外说一句,printf打印函数的值的个数
,没有限制。
格式串,包含普通字符的和转换的说明。其他方面,我这里可以用一个例子说明

int i =0;
int j=0;
i=10;
j=10;
x=43.2892f;
y=5527.0f;
printf("i= %d, j=%d, x=%f, y=%f\n",i,j,x,y);
// i =10, j =20, x=43.2892f, y=5527.0f
输出结果,就如上所示

基本上就是,格式串中的普通字符被简单赋值输出给行,二变量i、j、x、y的值一次替换的结果
接下来还是来看一个例子

//printf函数的格式化输出
int main(){
int i;
float x;
i=40;
x=839.21f;
printf("|%d|%5d|%-5d|%5.3d|\n",i,i,i,i);
printf("|%10.3f|%10.3e|%-10g|\n",x,x,x);

return 0;
}

在这里插入图片描述

看到输出结果了吗?

我这里对输出格式化,做出详细的解释
%d -----------以十进制的形式展示变量
%5d -------- 以十进制的形式展示变量,且至少占用5个字符的空间。因为变量i只是占了两个字节,所以这里只是增加了三个空格。
%-5d---------以十进制的形式展示变量,且至少占用5个字符的空间。因表示的变量i不需要占满5个字符阿达空间,所以在后续的位置增加空格,总的来说就是,长度为5的左对齐字符。
%5.3d---------以十进制的形式展示变量,且至少占用5个字符的空间并至少有三位数字。因为i占有2个字符长度。所以要增加一个额外的零来保证有三位数字。现在为了保证要有五个字符,还要增加三个空格。
%10.3f------ 以十进制的形式显示变量x。并且总共用10个字符,其中小数点后保留三位数字。因为变量限制需要7个字符,所以变量x前面有3个空格。
%10.3e -------以指数的形式显示x,且,总共用10个字符,其中小数点后保留3位数字,因为x变量需要9个字符,所以在变量x前面有一个空格。
%-10g--------既可以定点显示变量x,也可以以指数的形式显示下变量x,且总共用10个字符。在这种情况下,printf函数选用用顶点十进制显示变量x。负号的出现强制左对齐,所以有4个空格跟在后面

从这里我么再谈论一个东西,就是转义字符
我简单的介绍一下就行了

//响铃府:\a
//回退符:\b
//换行符:\n
//水平制表符:\t

这里我列举以下printf的格式化输出的格式串

格式化符意义
d以十进制形式输出带符号整数(正数不输出符号)
o以八进制形式输出无符号整数(不输出前缀0)
x,X以十六进制形式输出无符号整数(不输出前缀Ox)
u以十进制形式输出无符号整数
f以小数形式输出单、双精度实数
e,E以指数形式输出单、双精度实数
g,G以%f或%e中较短的输出宽度输出单、双精度实数
c输出单个字符
s输出字符串
p输出指针地址
lu32位无符号整数
llu64位无符号整数

2.sancf函数

sacnf函数也如同printf的函数使用的特定的格式输出显示一样,scanf可以根据特定的格式进行读取输入,这一点就可以说明,scanf的格式化输出和print是一样的,不信你来看一下,我这个输出案例

int i=0;
int j=0;
float x=0;
float y=0;
scanf("%d%d%f%f",&i,&j,&x,&y);

在这里插入图片描述
我们可以看出,用户向里面输入数据,scanf函数负责读入这些数据,%d%d%f%f负责把这些变量赋值给i、j、x、y。
注意:
1.使用scanf函数必须检查格式化的数量与用户的输入是否匹配
2.另一个是符号&,我们必须把它放在变量的前面

scanf函数的使用

接下来我们还是来看看scanf怎么使用的
实际上,scanf和printf函数一样是由格式串控制的,每次你调用的狮虎,scanf函数从左边开始处理字符串的信息,对于每一个格式串的说明,scanf都会去执行,另外说一下scanf函数的注意事项
1.scanf函数读取数据成功,会继续处理剩下的字符串。
2.scanf函数读取数据项,如果某一项读取不成功,那么就立即停止,不再继续往下读取数据。
3.另外在寻找数的起始位置时候,scanf会忽略空白字符串。(换行符,空格符。垂直制表符)
第三点就例如下图这种现象
在这里插入图片描述
这里是因为。scanf函数会把输入的字符,看成连续的字符流,而且scanf函数在寻找每个数的起始位置的时候,会跳过空白符。所以它能成功的读取这些数。

这里我会列出一些scanf格式化类型说明

类型合格的输入参数的类型
%a、%A读入一个浮点值(仅 C99 有效)。float *
%c单个字符:读取下一个字符。如果指定了一个不为 1 的宽度 width,函数会读取 width 个字符,并通过参数传递,把它们存储在数组中连续位置。在末尾不会追加空字符。char *
%d十进制整数:数字前面的 + 或 - 号是可选的。int *
%e、%E、%f、%F、%g、%G浮点数:包含了一个小数点、一个可选的前置符号 + 或 -、一个可选的后置字符 e 或 E,以及一个十进制数字。两个有效的实例 -732.103 和 7.12e4float *
%i读入十进制,八进制,十六进制整数 。int *
%o八进制整数。int *
%s字符串。这将读取连续字符,直到遇到一个空格字符(空格字符可以是空白、换行和制表符)。char *
%u无符号的十进制整数。unsigned int *
%x、%X十六进制整数。int *
%p读入一个指针 。
%[]扫描字符集合 。
%%读 % 符号。
  • 24
    点赞
  • 47
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

忘忧记

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

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

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

打赏作者

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

抵扣说明:

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

余额充值