最終更新日時:
が更新

履歴 編集

function
<cstdio>

std::vscanf(C++17)

namespace std {
  int vscanf(const char* format, va_list arg);
}

概要

可変引数リスト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);
}

出力例

(標準入力に「1 2」を与えた場合)

2: 1 2

処理系

備考

  • Visual C++は2019(Compiler Explorerで利用できる最古のバージョン)で動作を確認しており、それ以前のバージョンでも使用できる可能性がある

関連項目

参照