C 语言:scanf 和 sscanf 表达式

Dan*_*car 2 c scanf

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

sscanf(buffer, "%d,%100[^,]%*c%f", destination_pointer)
Run Code Online (Sandbox Code Playgroud)

或者

scanf("\n%99s", destination);
Run Code Online (Sandbox Code Playgroud)

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

Kam*_*Cuk 5

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

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

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

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

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

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