vwscanf() — フォーマット済みワイド文字データの読み取り

フォーマット

#include <stdarg.h>
#include <stdio.h>

int vwscanf(const wchar_t *format, va_list arg_ptr);

言語レベル

ANSI

スレッド・セーフ

はい

ロケール依存

この関数の振る舞いは、現行ロケールの LC_CTYPE カテゴリーおよび LC_NUMERIC カテゴリーの影響を受ける可能性があります。また、LOCALETYPE(*LOCALEUCS2) または LOCALETYPE(*LOCALEUTF) がコンパイル・コマンドに対して指定されている場合は、現行ロケールの LC_UNI_CTYPE カテゴリーおよび LC_UNI_NUMERIC カテゴリーにも影響を受ける可能性があります。 この関数は、コンパイル・コマンドに対して LOCALETYPE(*CLD) が指定されている場合には使用できません。詳細については、CCSID およびロケールの理解を参照してください。

統合ファイル・システム・インターフェース

この関数は、コンパイル・コマンドに対して SYSIFCOPT(*NOIFSIO) が指定されている場合には使用できません。

ワイド文字関数

詳細については、ワイド文字を参照してください。

説明

vwscanf() 関数は、stdin から引数の可変値で指定されたロケーションへ データを読み取ります。vwscanf() 関数は、wscanf() 関数と同様に機能しますが、arg_ptr はプログラムの呼び出しによって個数が異なることがある引数のリストを指しているという点が異なります。これらの引数は、 各呼び出しごとに va_start で初期化する必要があります。 反対に、 wscanf() 関数は引数のリストを持てますが、 そのリストの引数の数はプログラムをコンパイルしたときに決定されます。

各引数は、format-string の型指定子に対応する型を持つ変数へのポインター でなければなりません。format には、 wscanf() 関数の書式ストリングと同じ書式および関数があります。

戻り値

vwscanf() 関数は、正常に変換され、割り当てられたフィールドの数を 戻します。戻り値には、読み取りは行われたが、割り当てられなかったフィールドは含まれません。変換が行われていない場合に、ファイルの終わりを読み取ろうとすると、戻り値は EOF になります。戻り値 0 は、フィールドが割り当てられなかったことを 意味します。

この例では、stdin からのさまざまなタイプのデータを走査します。
#include <stdio.h
#include <stdarg.h

int vread(wchar_t *fmt, ...)
{
   int rc;
   va_list arg_ptr;
   va_start(arg_ptr, fmt);
   rc = vwscanf(fmt, arg_ptr);
   va_end(arg_ptr);
   return(rc);
}

int main(void)
{
   int i, rc;
   float fp;
   char c, s[81];
   printf("Enter an integer, a real number, a character "
   "and a string : ¥n");
   rc = vread(L"%d %f %c %s",&i,&fp,&c, s);
   if (rc != 4)
      printf("Not all fields are assigned\n");
   else
   {
      printf("integer = %d¥n", i);
      printf("real number = %f¥n", fp);
      printf("character = %c¥n", c);
      printf("string = %s¥n",s);
   }
}
/***************** If input is: 12 2.5 a yes, *******************
************** then output should be similar to: ****************
Enter an integer, a real number, a character and a string :
integer = 12
real number = 2.500000
character = a
string = yes
*/