首页 > 其他 > 详细

scanf和printf的格式与用法

时间:2020-11-17 09:42:47      阅读:25      评论:0      收藏:0      [点我收藏+]

函数名: scanf
功 能: 执行格式化输入
用 法: int scanf(char *format[,argument,...]);
scanf()函数是通用终端格式化输入函数,它从标准输入设备(键盘) 读取输入的信息。可以读入任何固有类型的数据并自动把数值变换成适当的机内格式。
其调用格式为: scanf("<格式化字符串>",<地址表>);
scanf()函数返回成功赋值的数据项数,出错时则返回EOF。
其控制串由三类字符构成:
1。格式化说明符;
2。空白符;
3。非空白符;

(A) 格式化说明符

格式字符 说明
%a 读入一个浮点值(仅C99有效)
%A 同上
%c 读入一个字符
%d 读入十进制整数
%i 读入十进制,八进制,十六进制整数
%o 读入八进制整数
%x 读入十六进制整数
%X 同上
%c 读入一个字符
%s 读入一个字符串
%f 读入一个浮点数
%F 同上
%e 同上
%E 同上
%g 同上
%G 同上
%p 读入一个指针
%u 读入一个无符号十进制整数
%n 至此已读入值的等价字符数
%[] 扫描字符集合
%% 读%符号

附加格式说明字符表
修饰符 说明
L/l 长度修饰符 输入"长"数据
h 长度修饰符 输入"短"数据
W 整型常数 指定输入数据所占宽度

  • 星号 空读一个数据
    hh,ll同上h,l但仅对C99有效。

(B) 空白字符
空白字符会使scanf()函数在读操作中略去输入中的一个或多个空白字符,空白符可以是space,tab,newline等等,直到第一个非空白符出现为止。
(C) 非空白字符
一个非空白字符会使scanf()函数在读入时剔除掉与这个非空白字符相同的字符。

函数名:printf
调用格式:
printf()函数的调用格式为:printf("格式化字符串",输出表列)。

格式化字符串包含三种对象,分别为:
(1)字符串常量;
(2)格式控制字符串;
(3)转义字符。
字符串常量原样输出,在显示中起提示作用。输出表列中给出了各个输出项,要求格式控制字符串和各输出项在数量和类型上应该一一对应。其中格式控制字符串是以%开头的字符串,在%后面跟有各种格式控制符,以说明输出数据的类型、宽度、精度等。

注:本文的所有示例代码均在Linux环境下以g++ 4.4.6编译成64位程序的执行。

2.格式控制字符串详解
printf的格式控制字符串组成如下:

%[flags][width][.prec][length]type
分别为:

%[标志][最小宽度][.精度][类型长度]类型。
2.1类型(type)
首先说明类型,因为类型是格式控制字符串的重中之重,是必不可少的组成部分,其它的选项都是可选的。type用于规定输出数据的类型,含义如下:

字符 对应数据类型 含义 示例
d/i int 输出十进制有符号32bits整数,i是老式写法 printf("%i",123);输出123
o unsigned int 无符号8进制(octal)整数(不输出前缀0) printf("0%o",123);输出0173
u unsigned int 无符号10进制整数 printf("%u",123);输出123
x/X unsigned int 无符号16进制整数,x对应的是abcdef,X对应的是ABCDEF(不输出前缀0x)
f/lf float(double) 单精度浮点数用f,双精度浮点数用lf(printf可混用,但scanf不能混用)
F float(double) 与f格式相同,只不过 infinity 和 nan 输出为大写形式。
e/E float(double) 科学计数法,使用指数(Exponent)表示浮点数,此处”e”的大小写代表在输出时“e”的大小写
g float(double) 根据数值的长度,选择以最短的方式输出,%f或%e
G float(double) 根据数值的长度,选择以最短的方式输出,%f或%E
c char 字符型。可以把输入的数字按照ASCII码相应转换为对应的字符
s char* 字符串。输出字符串中的字符直至字符串中的空字符(字符串以空字符’\0‘结尾)
S wchar_t* 宽字符串。输出字符串中的字符直至字符串中的空字符(宽字符串以两个空字符’\0‘结尾)
wchar_t wtest[]=L"测试Test";
printf("%S\n",wtest);
输出:测试test
p void* 以16进制形式输出指针
n int* 什么也不输出。%n对应的参数是一个指向signed int的指针,在此之前输出的字符数将存储到指针所指的位置
printf("lvlv%n",&num);
printf("num:%d",num);
输出:lvlvnum:4
% 字符% 输出字符‘%’(百分号)本身 printf("%%");输出:%
m 无 打印errno值对应的出错内容 printf("%m\n");
a/A float(double) 十六进制p计数法输出浮点数,a为小写,A为大写 printf("%a %A",15.15,15.15);输出:0x1.e4ccccccccccdp+3 0X1.E4CCCCCCCCCCDP+3
注意:
(1)使用printf输出宽字符时,需要使用setlocale指定本地化信息并同时指明当前代码的编码方式。除了使用%S,还可以使用%ls。
(2)%a和%A是C99引入的格式化类型,采用十六进制p计数法输出浮点数。p计数法类似E科学计数法,但不同。数以0x开头,然后是16进制浮点数部分,接着是p后面是以 2为底的阶码。以上面输出的15.15为例,推算输出结果。15.15转换成二进制为1111.00 1001 1001 1001 1001 ...,因为二进制表示数值的离散特点,计算机对于小数有时是不能精确表示的,比如0.5可以精确表示为,而0.15却不能精确表示。将15.15对应的二进制右移三位,为1.1110 0100 1100 1100 1100 ...转换对应的十六进制就是0x1.e4ccccccccccd,注意舍入时向高位进了1位。由于右移三位,所以二进制阶码就是3。最后的结果就是0x1.e4ccccccccccdp+3。

scanf和printf的格式与用法

原文:https://www.cnblogs.com/csynb/p/13991919.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!