参看:printf()、scanf()用法总结及其格式转换说明符

一、printf()

printf()的返回值为输出的字符个数:

例:rv = printf ("hello");  结果为rv = 5;

其格式控制如下列表所述:

表一、printf()格式转换说明符

注意:不要忘记给控制字符串后面的列表中的每个项目都使用一个转换说明。

转换说明     输出
%a 浮点数、十六进制数和p-记数法(C99)
%A 浮点数、十六进制数和p-记数法(C99)
%c 一个字符
%d 有符号十进制整数
%e 浮点数、e-记数法
%E 浮点数、E-记数法
%f 浮点数、十进制记数法
%g 根据数值不同自动选择%f或%e。%e格式在指数小于-4或者大于等于精度时使用
%G 根据数值不同自动选择%f或%E。%E格式在指数小于-4或者大于等于精度时使用
%i 有符号十进制整数(与%d相同)
%o 无符号八进制整数
%p 指针
%s 字符串
%u 无符号十进制整数
%x 使用十六进制数字0f的无符号十六进制整数
%X 使用十六进制数字0F的无符号十六进制整数
%% 打印一个百分号

表二、printf()格式转换修饰符

修饰  意义
标志 

五种标志(-、+、空格、#、0)详细说明见表三。可以使用零个或者多个
例:“%-10d”

digit 或* 

字段宽度的最小值。如果该字段不能容纳要打印的数或者字符串,系统就会使用更宽的字段。当为  * 号时,表示从参数中获取宽度。
例:“%4d”、printf("%*d", width, num)

.digit或 .*   

精度。对于%e、%E和%f转换,是将要在小数点的右边打印的数字的位数。对于%g和%G转换,是有效数字的最大位数。对于%s转换,是将要打印的字符的最大数目。对于整数转换,是将要打印的数字的最小位数,如果必要,要使用前导0来达到这个位数。只使用“."和使用“.0”相同,所以%f与%.0f相同。当为 * 号时,表示从参数中获取精度。
例:“%5.2f“、printf("%5.*f", precision, num)

 h

和整数转换说明符一起使用,表示一个short int 或 unsigned short int类型数值
例:”%hu“、”%hx“、”%6.4hd“

hh

和整数转换说明符一起使用,表示一个char 或 unsigned char类型数值
例:”%hhu“、”%hhx“、”%6.4hhd“

j

和整数转换说明符一起使用,表示一个intmax_t或uintmax_t值
例:”%jd“、”%8jx“

l

和整数转换说明符一起使用,表示一个long nt 或 unsigned long int类型数值
例:”%ld“、”%8lu“

ll

和整数转换说明符一起使用,表示一个long long int 或 unsigned long long int类型数值(C99)
例:”%lld“、”%llu“

L

和浮点转换说明符一起使用,表示一个long double值
例:”%Lf“、”%10.4Le“

t

和整数转换说明符一起使用,表示一个ptrdiff_t值(与两个指针之间的差相对应的类型)(C99)
例:”%td“、”%12ti“

z

和整数转换说明符一起使用,表示一个size_t值(C99)
例:"%zd"、“%12zx”

表三、printf()格式转换修饰标志

标志      意义
  -

项目是左对齐的
例:“%-4s”

  +

有符号的值若为正,则显示正号;若为负的,则显示负号
例:“%+6.2f”

  空格

有符号的值若为正,则显示空格代替正号;若为负的,则显示负号
例:“% 6.2f“

  #

使用转换说明的可选形式。若为%o格式,显示前导0;若为%x和%X格式,则显示前导0x和0X。对于所有浮点形式,#保证了即使不跟任何数字,也打印一个小数点字符。对于%g和%G格式,它防止尾随零被删除。
例:”%#o“、”%#x“、”%#8.0f“、”%+#10.3E“

  0                   

对于所有的数字格式,用前导0来填充字段宽度,如果出现-标志或者指定了精度(对于整数)则忽略该标志
例:”%010d“、”%08.3f“

关于字段宽度扩展:

printf可在字段宽度部分使用*代替数字来达到目的,但是也必须使用一个参数来说明函数字段宽度应该是什么。

例如:

int width = 8;

printf ("%*d", width, number);

二、scanf()

scanf() 开始读取输入以后,会在遇到的第一个空白制度空格(bank)、制表符(tab)或者换行符(newline)处停止读取。

scanf()的返回值为成功输入的项目个数,其控制格式如下列表所述

表四、scanf()格式转换说明符

转换说明符

意义
 %c 把输入解释成一个字符
 %d 把输入解释成一个有符号十进制整数

%e、%f、
%g、%a

把输入解释成一个浮点数(%a是C99标准)
%E、%F、
%G、%A
把输入解释成一个浮点数(%A是C99标准)
 %i 把输入解释成一个有符号十进制整数
 %o 把输入解释成一个有符号八进制整数
 %p 把输入解释成一个指针(一个地址)
 %s 把输入解释成一个字符串:输入的内容以第一个非空白字符作为开始,
至下一个空白字符之前的全部字符
 %u 把输入解释成一个无符号十进制整数

%x、%X

把输入解释成一个无符号十六进制整数

表五、scanf()格式转换修饰符

修饰符 意义
 *

忽略一个输入项
例:scanf("%*d%d", &num), 当输入为 23 45时,23将被忽略,而读取45到num中

digit                最大字段宽度。在达到最大字段宽度或遇到第一个空白字符时停止对输入项的读取
hh 指示整数将会存储在char 或 unsigned char
ll 指示整数将会存储在 long long 或者 unsigned long long (C99)
h、l、L

”%hd“和”%hi“指示该值将会存储在一个short int中。”%ho“、”%hx“”%hu“指示该值将会存储在一个unsigned short int中。”%ld“和”%li“指示该值将存储在一个long中。”%lo“、”lx“、”lu“指示该值将会存储在一个unsigned long中。”%le“、”%lf“、”%lg“指示该值将会存储在double中。将L与e、f、g一起使用指示该值将会存储在long double中。如果没有这些修饰符,d、i、o、x指示int类型,e、f、g指示float类型

空格 只能修饰 %c , 忽略输入的前导空白字符

对于scanf()除了%c以外,对每一个输入项忽略其前导空白字符(空格、制表艝、换行符)。从第一个非空白字符开始,直到遇到空白字符或达到宽度或遇到当前输入格式的非法字符时停止当前项输入,进入下一输入项

扩展:

1、当把*放在%和说明符字符之间时,它使函数跳过相应的输入项目。

例如:scanf ("%*d %*d %d", &n);

输入: 12 34 56

则会跳过前两个整数,并把第三个整数复制个n

则输出结果为: 56

2、巧用scanf()返回值

status = scanf ("%ld", &num);

while (status == 1){

status = scanf ("%ld", &num);

}  /*当输入整数则执行while循环,例如输入Q,则scanf返回值为0,循环终止*/

也可用下列形式代替:

while(scanf ("%ld", &num) == 1) {}

3、变量参数的前面必须加上 "&" 符号。使用所有格式 (除了 %c 之外)时,输入值之前的空白(空格、制表符、换行符等)会被跳过,值后面的空白表示该值的结束。因此,用%s 格式码输入字符串时,中间不能包含空白。

4、再论printf() 函数

声明:

int printf(const char *format, ...)
参数:
format -- 这是字符串,包含了要被写入到标准输出 stdout 的文本。它可以包含嵌入的 format 标签,format 标签可被随后的附加参数中指定的值替换,并按需求进行格式化。

#include <stdio.h>
int main(void)
{char *s = "11111\n";printf ("%s", s); //用的是字符串里面的换行符printf (s);  //s 为字符串return 0;
}
编译出现警告: 警告: 格式字符串不是一个字面字符串而且没有待格式化的实参 [-Wformat-security]
输出结果:
11111
11111

5、斜杠:"/" 与 反斜杠:"\"

printf("%d%d%d\n", x,y,\z)

注意这里是反斜杠:"\"

简单总结:

数据类型和占位符之间的对应关系
char和unsingned char     %c
short                                  %hd
unsigned short                 %hu
long                                   %ld
unsigned long                  %lu
int                                      %d
unsigned int                     %u
float                                   %f/%g
double                               %lf/%lg

%f和%lf会保留小数点后面多余的0   如 3.1400000   .2%f得 3.14
%g和%lg不会保留   如 3.14

%02d 两位数,如果不够前面补0, 如 02

C语言再学习 -- printf、scanf占位符相关推荐

  1. C语言再学习 -- 位操作

    一.二进制 二进制是计算技术中广泛采用的一种数制.二进制数据是用0和1两个数码来表示的数.它的基数为2,进位规则是"逢二进一",借位规则是"借一当二",由18世 ...

  2. C语言再学习 -- 输入/输出

    一.缓冲区 输入字符的立即回显是非缓冲或直接输入的一个实例,它表示你说键入的字符被收集并存储在一个被成为缓冲区的临时存储区域中.按下回车可使你所键入的字符块对程序变成可用. 为什么需要缓冲区?首先,将 ...

  3. C语言 - printf的占位符(%) 异常

    版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/u012515223/article/details/26719135 printf的占位符(%) 异 ...

  4. c语言--余数正负判断,printf函数占位符

    1.余数正负判断 负数求模的规则是,结果的正负号由第一个运算数的正负号决定的. 11%-5->>1 -11%-5->>-1 -11%5->>-1 第一个运算数的正负 ...

  5. C语言再学习 -- 结构和其他数据形式

    一.结构体 结构体可以用来创建新的数据类型,这种数据类型可以把多个其他类型合并成一个整体,采用结构体声明的变量叫做结构变量,结构体需要先声明然后才能使用,声明结构体需要使用struct关键字,结构体声 ...

  6. C语言再学习 -- 存储类型关键字

    定义: 是对声明的实现或者实例化.连接器(linker)需要它(定义)来引用内存实体.与上面的声明相应的定义如下:参看:C语言再学习 -- 存储类.链接 C语言中有 5 个作为存储类说明符的关键字,分 ...

  7. C语言再学习 -- 存储类、链接

    这一章是我看的时间最长的一章了,表面上是有很多关键字和几个函数需要学习,其实我知道是自己最近不在状态了,做项目没进展,看书看不下去,两头都放不下,最后两头都没有做好.不由的想起一句话,你不快乐是因为: ...

  8. C语言再学习 -- 字符串和字符串函数

    最近身体很不给力,很乏累!白天没精神,晚上睡不着,心情还很烦躁.看书都有点看不下去的样子,到了C语言最难掌握的部分了,数组.指针.字符串.硬着头皮看书总结吧. 一.字符串 1.字符串介绍 字符串是以空 ...

  9. C语言再学习--关键字

    如需转载请注明出处:https://blog.csdn.net/qq_29350001/article/details/53021879 C语言一共有32个关键字,如下表所示: 关键字 说明 auto ...

最新文章

  1. 规格表管理之删除规格表数据
  2. Java 23种设计模式有趣见解、总结
  3. 五个简单的原则,带你写出整洁代码
  4. 常用开源工具、框架收藏
  5. 网络作者的心声-23、网络作家大多赚'辛苦钱'
  6. 吴恩达机器学习(五)正则化(解决过拟合问题)
  7. No module named MNIST_NBA十大面具侠:NO.1 竟然是他!
  8. cdn 内容分发 资源放在更接近用户的网络边缘
  9. visreg:带你玩遍模型可视化
  10. 【Sublime Text 3】编译环境
  11. USB Server应用于RPA机器人案例分析
  12. 【UE·蓝图】UE4蓝图MediaPlayer注意事项
  13. vb在服务器上新建文件夹,VB 创建文件夹
  14. 有线电视维护服务器,东方有线电视 网络服务器 设置
  15. 如何使用启动盘启动计算机,如何用pe盘启动电脑?pe盘启动电脑操作教程
  16. ABAP TRANSPORTING NO FIELDS 用法
  17. 【人机交互技术】工具软件界面设计
  18. 小学生python编程写游戏_小学生开始学Python,开发AI的首选编程语言:推荐一波Python书单...
  19. 一样的操作,同样的引入,爆红:can’t resolve symbol
  20. CSS真好玩——用纯CSS画一轮新月

热门文章

  1. iOS-iOS9系统SEGV_ACCERR问题处理【v3.6.3的一些bug修复】
  2. python 中的 and / or
  3. 【Luogu】P3950部落冲突(树链剖分)
  4. Jdbc模版式写法与Spring-JdbcTemplate的比较
  5. Django里自定义用户登陆及登陆后跳转到登陆前页面的实现
  6. 解决properties文件乱码问题(eclipse和MyEclipse)
  7. 面向对象基础回顾(二)
  8. HDOJ 2176 取石子游戏
  9. 吴恩达 coursera ML 第八课总结+作业答案
  10. 可以查到的资料和可以淘到的原件 DIY 四轴