c - '%' 和格式说明符之间的数字在 scanf 中意味着什么?

标签 c scanf

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

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

一般来说,scanf 语句中%格式说明符 之间的数字表示什么。

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

最佳答案

您需要查看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);

请注意,格式字符串中的空格与输入中的任何空格序列(包括)相匹配,因此即使输入字符串(日期),上述内容也有效不包含任何空格。在格式字符串中使用空格有助于提高可读性。

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

关于c - '%' 和格式说明符之间的数字在 scanf 中意味着什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16231136/

相关文章:

c++ - C++ 的 Python 解释器

c - 要求编译器在将数组传递给函数时将其视为数组(而不是指针)

c - 如果用户在未输入数据的情况下按回车键,ANSI C 将停止进程

arrays - 警告 : format ‘%s’ expects type ‘char *’ , 但参数 2 的类型为 ‘char (*)’

c - 使用 sscanf 将 double 从 char 解析为二维数组

c - 不确定我的 while 循环中发生了什么

c - glutBitmapCharacter() 不显示任何内容?

在 OSX 上编译的 ctime 和时间警告

c - 在 C 中打印字符串数组时出错

使用 [^...] 的 fscanf 格式化输入的格式是否正确?