-1

我知道格式说明符 for 中使用的选项printf(),但我完全不知道类似的东西%3d可能意味着什么,如下面的代码所示。

scanf("%3d %3d",&num1,&num2);

一般来说,scanf 语句中和之间的数字表示%什么。format specifier

不是scanf()简单地接收输入并将其存储在参数中指定的地址中吗?

4

1 回答 1

14

您需要查看精美的文档

基本上,介于%和 转换说明符之间的数字表示最大字段宽度。处理完指定数量的字符后,转换将停止。

这可以很方便地将一个数字序列“分割”成多个单独的数字,如下所示:

const char *date = "20130426";
int year, month, day;

if(sscanf(date, "%4d %2d %2d", &year, &month, &day) == 3)
  print("the date is %4d-%02d-%02d\n", year, month, day);

请注意,格式字符串中的空格与输入中的任何空格序列(包括none)匹配,因此即使输入字符串 ( date) 不包含任何空格,上述方法也有效。在格式字符串中使用空格有助于使其更具可读性。

作为对您的stdin评论的回应,该sscanf()函数不知道(或关心)它所操作的字符串来自哪里,它只是一个字符串。所以是的,您可以在从文件中读取的数据stdin、在程序的其他地方动态创建、通过网络接收或任何其他方式的数据上调用它。

于 2013-04-26T07:54:48.990 回答