scanf()函数的转换说明、转换说明修饰符 汇总

scanf() 与 printf() 类似,也是用格式字符串和参数列表。scanf() 中的格式字符串表明字符输入流的目标数据类型。两个函数主要的区别在参数列表中。printf() 函数使用变量、常量和表达式,而 scanf() 函数使用指向变量的指针。这里你不必了解如何使用指针,只需记住以下两条简单的规则:

  • 如果用 scanf() 读取基本变量类型的值,在变量名前加上一个 &;
  • 如果用 scanf() 把字符串读入字符数组中,不要使用&。

表1 ANSI C 中 scanf() 的转换说明

转换说明 含义
%c 把输入解释成字符
%d 把输入解释成有符号十进制整数
%e、%f、%g、%a 把输入解释成浮点数(C99 标准新增了 %a)
%E、%F、%G、%A 把输入解释成浮点数(C99 标准新增了 %A)
%i 把输入解释成有符号十进制整数
%o 把输入解释成有符号八进制整数
%p 把输入解释成指针(地址)
%s 把输入解释成字符串。从第1个非空白字符开始,到下一个空白字符之前的所有字符都是输入
%u 把输入解释成无符号十进制整数
%x、%X 把输入解释成有符号十六进制整数

表2 scanf()转换说明中的修饰符

转换说明 含义
* 抑制赋值:见文末附注1
示例:"%*d"
数字 最大字段宽度。输入达到最大字段宽度处,或第1次遇到空白字符时停止
示例:"%10s"
hh 把整数作为 signed char 或 unsigned char 类型读取
示例:"%hhd"、"%hhu"
ll 把整数作为 long long 或 unsigned long long 类型读取(C99)
示例:"%lld"、"%llu"
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 类型
在e、f和g前面使用L而不是l,表明把对应的值存储为 long double 类型。如果没有修饰符,d、i、o和x表明对应的值被存储为 int 类型,f和g表明把对应的值存储为 float 类型
j 在整形转换说明后面时,表明使用 intmax_t 或 uintmax_t 类型(C99)
示例:"%jd"、"%ju"
z 在整形转换说明后面时,表明使用 sizeof 的返回类型(C99)
示例:"%zd"、"%zo"
t 在整形转换说明后面时,表明使用表示两个指针差值的类型(C99)
示例:"%td"、"%tx"

使用转换说明比较复杂,而且这些表中还省略了一些特性。省略的主要特性是,从高度格式化源中读取选定数据,如穿孔卡或其他数据记录。


附注:

  • scanf() 中将*放在%和转换字符之间时,会使得 scanf() 跳过相应的输入项,如下代码↓

    scanf("%*d %d", &a);

    上述代码在执行中会跳过1个整数,把第二个整数拷贝给a。


内容部分引自 人民邮电出版社《C Primer Plus(第6版)中文版》仅供学习及参考使用
内容部分引自 维基百科 仅供学习及参考使用

原创文章,作者:kai233,如若转载,请注明出处:https://www.sorkai.com/archives/125

(3)
上一篇 2021年10月7日 下午8:32
下一篇 2021年11月15日 下午1:36

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注