- cstdio[meta header]
- std[meta namespace]
- function[meta id-type]
- cpp17[meta cpp]
namespace std {
int vscanf(const char* format, va_list arg);
}- va_list[link /reference/cstdarg/va_list.md]
可変引数リストva_listを使用し、書式を指定して標準入力から入力する。
引数を...で受け取るscanf()と異なり、va_listとしてまとめられた可変引数を受け取る。可変引数を受け取る自作の関数から、書式付き入力を行いたい場合に使用する。
scanf()と同じ。
- この関数は
va_endマクロを呼び出さないため、呼び出し側でargに対してva_endを実行する必要がある - C++17で、参照するC標準ライブラリがC99からC11へ更新されたことにともなって追加された
#include <cstdio>
#include <cstdarg>
// 可変引数を受け取り、標準入力を解析する関数
int input_values(const char* format, ...)
{
std::va_list args;
va_start(args, format);
int count = std::vscanf(format, args);
va_end(args);
return count;
}
int main()
{
int a = 0;
int b = 0;
int count = input_values("%d %d", &a, &b);
std::printf("%d: %d %d\n", count, a, b);
}- std::vscanf[color ff0000]
- std::va_list[link /reference/cstdarg/va_list.md]
- va_start[link /reference/cstdarg/va_start.md]
- va_end[link /reference/cstdarg/va_end.md]
- std::printf[link printf.md]
(標準入力に「1 2」を与えた場合)
2: 1 2
- Clang: 5.0 [mark verified]
- GCC: 5.1 [mark verified]
- Visual C++: 2019 [mark verified]
- Visual C++は2019(Compiler Explorerで利用できる最古のバージョン)で動作を確認しており、それ以前のバージョンでも使用できる可能性がある
- P0063R3 C++17 should refer to C11 instead of C99
- C++17で、
vfscanf・vscanf・vsscanfが追加された
- C++17で、