scanf 家族

来源:互联网 发布:淘宝会员打折怎么取消 编辑:程序博客网 时间:2024/06/02 16:20

Table Of Contents

  • scanf 家族
    • 函数成员
    • format字符串
      • 格式类型 type
      • 限定符 [{h | l | ll | L}]

Previous topic

printf 家族

Next topic

Google C++ 风格指南 - 中文版

scanf 家族

从输入源读取字符并根据format字符串给出的格式代码对他进行转换。标准: [1] 7.19.6.2

函数成员

scanf, fscanf, sscanf,

wscanf, fwscanf, swscanf,

Tip

为了能让这些函数正常运行,指针参数的类型必须是对应格式代码的正确类型。 函数无法验证他们的指针参数是否是正确的类型,所以函数就假定他们是正确的。 如果指针参数的类型不正确,那么结果就会是垃圾,而且邻近的变量有可能在处理的过程中被改写 《C和指针》

format字符串

format字符串可能包含下列内容 [2]

  1. 空白字符 它们与输入中的零个或者多个空白字符匹配,在处理过程中间被忽略。( blank (‘ ‘); tab (‘t’); or newline (‘n’))

  2. 其他字符 当任何其他字符出现在格式字符串时,下一个输入字符必须与它匹配。如何匹配,该输入字符随后就被丢弃,如果不匹配,函数就不再读取直接返回。

  3. 格式代码 它们指定函数如何解释接下来的输入字符 %[*] [width] [{h | l | ll | L}]type
    1. 一个可选的星号[*] 将使转换后的值被丢弃而不是进行存储。可以用于跳过不需要输入的字符。
    2. 一个可选的宽度[width] 限制将被读取用于转化的输入的字符个数,如果未给出宽度,函数就连续读入字符直到预见输入中的下一个空白字符
    3. 一个可选的限定符[{h | l | ll | L}] [3]
    4. 格式类型type [4]

格式类型 type

CharacterTypeOutput formatcchar*读取和存储单个字符.前导的空白字符并不跳过.如果给出宽度,就读取和存储这个数目的字符,字符后面不会添加0.参数必须指向一个足够大的字符数组d,iint*一个可选的有符号整数转换.d把输入解释为十进制;i根据它的第1个字符决定值的基数,十进制,八进制,十六进制u,o,xunsigned*一个可选的有符号整数转换.但它按照无符号数存储. 十进制:u; 八进制:o; 十六进制:x,X, x和X同义.e,f,gfloat*期待一个浮点值,它的形式必须像一个浮点型字面值常量,但小数点并非必须.e和E g和G同义schar*读取一串非空白字符.参数必须指向一个足够大的字符数组,当发现空白时输入就停止,字符串结尾会自动加上0[xxx]char*根据给组合的字符从输入中读取一串字符.参数必须指向一个足够大的数组.当遇到第一个不在给定组合中出现的字符时,输入就停止.字符串结尾会自动加0.%[abc]代表含有a,b,c,%[^abc]代表不含有a,b,cPvoid*将printf的%P输出的字符串转化为数据,具体转化方式由编译器决定nint*到目前为止通过函数调用从输入读取的字符数被返回。%n转化的字符并不计算在函数的返回值之内。它本身并不消耗任何输入% 这个代码与输入中的一个%相匹配,这个%符号将被丢弃

限定符 [{h | l | ll | L}]

仅整理了VS和GCC中共用部分

To specifyUse prefixWith type specifierdoublele, E, f, g, or Glong doubleLe, E, f, g, or Glong intld, i, o, x, or Xlong unsigned intlulong longlld, i, o, x, or Xshort inthd, i, o, x, or Xshort unsigned inthuTo specifyUse prefixWith type specifierSingle-byte character with scanfhc or CSingle-byte character with wscanfhc or CWide character with scanflc or CWide character with wscanflc, or CSingle-byte – character string with scanfhs or SSingle-byte – character string with wscanfhs or SWide-character string with scanfls or SWide-character string with wscanfls or S

参考资料

[1]http://www.open-std.org/jtc1/sc22/wg14/www/docs/C99RationaleV5.10.pdf[2]http://msdn.microsoft.com/en-us/library/kwwtf9ch.aspx[3]http://msdn.microsoft.com/en-us/library/xdb9w69d.aspx[4]http://msdn.microsoft.com/en-us/library/6ttkkkhh(v=VS.80).aspx



http://www.cppexample.com/standard/printf.html





原创粉丝点击