繁体   English   中英

C 语言:scanf 和 sscanf 表达式

[英]C language: scanf and sscanf expressions

我在 scanf 和 sscanf 参数中遇到过类似这样的表达式:

sscanf(buffer, "%d,%100[^,]%*c%f", destination_pointer)

或者

scanf("\n%99s", destination);

解释这些的正确方法是什么? 我知道“%s %c %d”之类的东西是什么,而且 %100 或通常的“%number”是要读取的输入的大小。 但是剩下的呢? 我能找到的只是基本的例子,没有接近这个复杂的东西。 有参考指南吗?

解释这些的正确方法是什么?

sscanf(buffer, "%d,%100[^,]%*c%f", destination_pointer)

是无效调用。 有 3 个需要参数的转换说明符 - %d%[]%f 这意味着在格式化字符串后正好需要 3 个参数,但只提供了一个destinantion_pointer

  • %d - 忽略任何空白字符,读取以 10 为基数的int
  • , - 读一个逗号
  • %100[^,] - 读取最多 100 个不是逗号的字符。 目标缓冲区中最多存储 101 个字节(100 个字符 + 空字节)。
    • %[set] - 读取集合中的字符
    • %[^set] - 读取不在集合中的字符
  • %*c - 忽略一个字符(逗号,因为%100[^,]一直读到逗号,或者字符串结束,这将使scanf返回此处)。 注意 - 使用*忽略转换结果会使scanf在读取成功的情况下不会增加返回值。
  • %f - 忽略任何空白字符,读取浮点数(任何格式 - 十进制、科学或十六进制)

scanf("\\n%99s", 目的地);

  • \\n - 读取(并忽略)任意数量的空白字符(空白,表示任何内容isspace()返回非零值,因此空格、换页、换行、回车、制表符或垂直制表符)
  • %99s - 忽略任何前导空白字符(它前面的\\n是无用的...),然后读取最多 99 个不是空白的字符(结果缓冲区必须至少有 100 个字节长)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM