函数
<cstdio>

vscanf

int vscanf ( const char * format, va_list arg );
读取格式化数据到可变参数列表
从标准输入(stdin)读取数据,并根据参数 format 的格式,将数据存储到由 arg 标识的可变参数列表中的元素所指向的位置。

在内部,该函数从由 arg 标识的列表中检索参数,如同对其使用了 va_arg 一样,因此 arg 的状态很可能会因该调用而改变。

在任何情况下,arg 都应在调用前通过 va_start 进行初始化,并在调用后的某个时刻通过 va_end 进行释放。

参数

format
C 字符串,包含一个格式化字符串,其遵循与 scanf 中的 format 相同的规范(详见 scanf)。
arg
一个标识由 va_start 初始化的可变参数列表的值。
va_list 是在 <cstdarg> 中定义的特殊类型。

返回值

成功时,函数返回成功填充的参数列表项的数量。由于匹配失败、读取错误或到达文件结尾,该计数可能与预期的项数相符,也可能更少(甚至为零)。

如果发生读取错误或在读取时到达文件结尾,则会设置相应的指示器(feofferror)。并且,如果其中任何一种情况在成功读取任何数据之前发生,则返回 EOF

如果在解释宽字符时发生编码错误,函数会设置 errnoEILSEQ.

示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
/* vscanf example */
#include <stdio.h>
#include <stdarg.h>

void GetMatches ( const char * format, ... )
{
  va_list args;
  va_start (args, format);
  vscanf (format, args);
  va_end (args);
}

int main ()
{
  int val;
  char str[100];

  printf ("Please enter a number and a word: ");
  fflush (stdout);
  GetMatches (" %d %99s ", &val, str);
  printf ("Number read: %d\nWord read: %s\n", val, str);

  return 0;
}

可能的输出
Please enter a number and a word: 911 airport
Number read: 911
Word read: airport


另见