sscanf(scanf)、sprintf(printf)格式化

一、ssanf

实现字符数组中字符==》各种数据类型
int sscanf(const char *str, const char *format, ...)
 sscanf( charbuff, "read99,%s,%s,%d,%d,*", weekday, month, &day, &year );

中间的分隔符可以是逗号,也可以是空格。

二、sprintf

实现各种数据类型==》字符类型,并存储于字符数组中
sprintf(sendbuff,"read99,%f,%f,%f,%f,%f,%d,%d,%d,%d,%d,%d,%d,*",
						info.lon, info.lat, info.elv, info.speed, info.direction,info.satinfo.inview,
						info.utc.year,info.utc.mon,info.utc.day,info.utc.hour,info.utc.min,info.utc.sec);

功能

C库函数 int vsprintf(char *str,const char *format,va_list arg)使用 参数列表格式化 输出到字符串

参数

  • str 指向一个字符串数组的指针
  • format 这是一个字符串,包含了要被写入到字符串str的文本(format可以是包含嵌入的format标签,这些标签可以被随后的附加参数中指定的值替换,并按需格式化)

format具体讲解

一般形式:%[flags][width][.precision][length]specifier
specifier为必选参数,跟我们常用的printf参数没什么两样,比如%d表示十进制数,%c表示字符。具体细节如下表:

specifier释义
c字符
s字符串
f浮点数
d or i有符号十进制数
u无符号十进制
o有符号八进制
p指针地址
n无输出
%字符百分号%输出
x or X有符号十六进制小写或者大写
e or E使用e字符或者E字符的科学记数法
g 或者G根据数值不同,自动选择%e or %G 或者%f记数法

其余为可选参数,不显示声明,则默认缺省。以下一一介绍:

flags释义
-在给定的字段宽度内左对齐,缺省值 右对齐
+强制在输出结果前加上符号位,正数带+,负数带-,缺省值 只有负数带-,正数不带+
(space)如果没有写入任何符号,则在该值前面插入一个空格
#与 o、x 或 X 说明符一起使用时,非零值前面会分别显示 0、0x 或 0X,缺省不显示。与 e、E 和 f 一起使用时,会强制输出包含一个小数点,即使后边没有数字时也会显示小数点。缺省,如果后边没有数字时候,不会显示显示小数点。与 g 或 G 一起使用时,结果与使用 e 或 E 时相同,但是尾部的零不会被移除
0在指定填充padding的数字左边放置0,而不是空格
width释义
(number)要输出的字符最小数目。如果输出的值短于该数,结果用空格填充。如果输出的值长于该数,结果不截断
*宽度在format字符串中未指定,但是会作为附加整数值参数放置与要被格式化的参数之前
precision释义
.number对于整数说明符(d、i、o、u、x、X):precision 指定了要写入的数字的最小位数。如果写入的值短于该数,结果会用前导零来填充。如果写入的值长于该数,结果不会被截断。精度为 0 意味着不写入任何字符。 对于 e、E 和 f 说明符:指定要在小数点后输出的小数位数。 对于 g 和 G 说明符:指定要输出的最大有效位数。 对于 s: 指定要输出的最大字符数。 默认情况下,所有字符都会被输出,直到遇到末尾的空字符。 对于 c 类型:没有任何影响。如果指定时不带有一个显式值,则假定为 0。当未指定任何精度时,缺省为 1
*精度在 format 字符串中未指定,但是会作为附加整数值参数放置于要被格式化的参数之前
length释义
h参数被解释为短整型或无符号短整型(仅适用于整数说明符:i、d、o、u、x 和 X)
l参数被解释为长整型或无符号长整型,适用于整数说明符(i、d、o、u、x 和 X)及说明符 c(表示一个宽字符)和 s(表示宽字符字符串)
L参数被解释为长双精度型(仅适用于浮点数说明符:e、E、f、g 和 G)

返回值

如果成功,则返回写入的字符总数,否则返回负数

示例

printf("%x\n", j); //输出结果为: 2f
printf("%X\n", j); //输出结果为: 2F
printf("%#x\n", j); //输出结果为: 0x2f
printf("%#X\n", j); //输出结果为: 0X2F %#X推荐使用

三、printf

# include <stdio.h>
int printf(const char *format, ...);

printf("Hello World!\n");  // \n表示换行
printf("%d\n", i);  /*%d是输出控制符,d 表示十进制,后面的 i 是输出参数*/
printf("%d %d\n", i, j);
printf("i = %d, j = %d\n", i, j);
控制符说明
%d按十进制整型数据的实际长度输出。
%ld输出长整型数据。
%mdm 为指定的输出字段的宽度。如果数据的位数小于 m,则左端补以空格,若大于 m,则按实际位数输出。
%u输出无符号整型(unsigned)。输出无符号整型时也可以用 %d,这时是将无符号转换成有符号数,然后输出。
%c用来输出一个字符。
%f用来输出实数,包括单精度和双精度,以小数形式输出。不指定字段宽度,由系统自动指定,整数部分全部输出,小数部分输出 6 位,超过 6 位的四舍五入。
%.mf输出实数时小数点后保留 m 位,注意 m 前面有个点。
%o以八进制整数形式输出。
%s用来输出字符串。用 %s 输出字符串同前面直接输出字符串是一样的。但是此时要先定义字符数组或字符指针存储或指向字符串,这个稍后再讲。
%x(或 %X 或 %#x 或 %#X)以十六进制形式输出整数
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值