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