'%'和格式说明符之间的数字在scanf中的含义是什么?

时间:2013-04-26 07:39:47

标签: c scanf

我知道printf()的格式说明符中使用的选项,但我对%3d之类的内容完全无能为力,如下面的代码所示。

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

一般情况下,%format specifier之间的数字在scanf语句中表示的是什么。

scanf()是不是仅仅意味着接收输入并将其存储在参数中指定的地址中?

1 个答案:

答案 0 :(得分:14)

您需要查看the fine documentation

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

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

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读取的数据,从程序中其他地方创建的文件,通过网络接收的数据或任何其他方式调用它。