vfscanf、vfwscanf
stdio.h:インデックス への移動
ヘッダーファイル
stdio.h
カテゴリ
入出力ルーチン
プロトタイプ
int vfscanf(FILE *stream, const char *format,va_list arglist);
int vfwscanf(FILE *stream, const wchar_t *format,va_list arglist);
説明
ストリームからの入力をスキャンして書式設定します。
v...scanf 系関数は,...scanf 系関数のかわりに使用できます。これらの関数の機能は,対応する ...scanf 系関数とまったく同じですが,引数リストではなく引数リストへのポインタを受け取る点が異なります。
書式指定子の詳細は,「Scanf の書式指定子」を参照してください。
vfscanf は,ストリームから読み取った一連の入力フィールドを 1 文字ずつスキャンします。各フィールドは,format が指す書式文字列で vfscanf に渡された書式指定子にしたがって書式設定されます。最後に vfscanf は,format に続く引数として渡されたアドレスに,書式設定した入力を格納します。入力フィールドと同じ数の書式指定子とアドレスが必要です。vfscanf は,通常のフィールド終了文字(ホワイトスペース)に到達する前に,特定のフィールドのスキャンを停止する場合があります。または,さまざまな原因で完全に処理を終了する場合もあります。考えられる理由については,scanf を参照してください。
戻り値
vfscanf は,スキャン,変換,および格納に成功した入力フィールドの数を返します。この戻り値には,スキャンされたが格納されなかったフィールドは含まれません。格納されたフィールドがない場合,戻り値は 0 になります。
vfscanf がファイルの終わりで読み取りを試みた場合,戻り値は EOF になります。
例
#include <stdio.h>
#include <stdlib.h>
#include <stdarg.h>
FILE *fp;
int vfsf(char *fmt, ...)
{
va_list argptr;
int cnt;
va_start(argptr, fmt);
cnt = vfscanf(fp, fmt, argptr);
va_end(argptr);
return(cnt);
}
int main(void)
{
int inumber = 30;
float fnumber = 90.0;
char string[4] = "abc";
fp = tmpfile();
if (fp == NULL)
{
perror("tmpfile() call");
exit(1);
}
fprintf(fp,"%d %f %s\n",inumber,fnumber,string);
rewind(fp);
vfsf("%d %f %s",&inumber,&fnumber,string);
printf("%d %f %s\n",inumber,fnumber,string);
fclose(fp);
return 0;
}
移植性
POSIX | Win32 | ANSI C | ANSI C++ |
---|---|---|---|
+ |
+ |
+ |