scanf, wscanf
Stdio.h:インデックス への移動
ヘッダー ファイル
stdio.h
カテゴリ
コンソール入出力ルーチン
プロトタイプ
int scanf(const char *format[, address, ...]);
int wscanf(const wchar_t *format[, address, ...]);
説明
stdin
ストリームからの入力を、スキャンおよび書式設定します。
メモ: Win32 および Win64 GUI アプリケーションの場合、
stdin
はリダイレクトする必要があります。
scanf
関数は:
- 一連の入力フィールドを、一度に 1 文字ずつスキャンします。
- 書式文字列
*format
で渡される書式指定子に従って、各フィールドを書式設定します。 vsscanf
は、引数リストを使用して、文字列から入力をスキャンおよび書式設定します。
各入力フィールドに対して、それぞれ 1 つの書式指定子とアドレスが必要となります。
scanf
は、通常のフィールド終了文字(空白)に到達する前に特定のフィールドのスキャンを停止したり、あるいは、処理を完全に終了することがあります。これがなぜ起こるかについては、「...scanf がスキャンを停止する場合」を参照してください。
メモ:
scanf
は、期待されるパターンと異なる場合に、予期しない結果を招くことがあります。scanf
には、行の終わりでどのように同期するかを示す、提供しなければなりません。
gets または fgets に続けて sscanf を使用する組み合わせは、安全かつ簡単なので、scanf
よりも推奨されます。
戻り値
成功すると、scanf
は、スキャン、変換、格納が成功した入力フィールドの数を返します。 戻り値には、スキャンされたが格納されなかったフィールドは含まれません。
エラーの場合:
scanf
の詳細
例
#include <stdio.h>
int main(void)
{
char label[20];
char name[20];
int entries = 0;
int loop, age;
double salary;
struct Entry_struct
{
char name[20];
int age;
float salary;
} entry[20];
/* ラベルを 20 文字制限の文字列で入力 */
printf("\n\nPlease enter a label for the chart: ");
scanf("%20s", label);
fflush(stdin); /* 不正な入力の場合、入力ストリームをフラッシュ */
/* エントリ数を整数で入力 */
printf("How many entries will there be? (less than 20) ");
scanf("%d", &entries);
fflush(stdin); /* 不正な入力の場合、入力ストリームをフラッシュ */
/* 大文字または小文字に制限して名前を入力 */
for (loop=0;loop<entries;++loop)
{
printf("Entry %d\n", loop);
printf(" Name : ");
scanf("%[A-Za-z]", entry[loop].name);
fflush(stdin); /* 不正な入力の場合、入力ストリームをフラッシュ */
/* 年齢を整数で入力 */
printf(" Age : ");
scanf("%d", &entry[loop].age);
fflush(stdin); /* 不正な入力の場合、入力ストリームをフラッシュ */
/* 給与を浮動小数で入力 */
printf(" Salary : ");
scanf("%f", &entry[loop].salary);
fflush(stdin); /* 不正な入力の場合、入力ストリームをフラッシュ */
}
/* 名前(string)、年齢(int)、給与(double)を入力 */
printf("\nPlease enter your name, age and salary\n");
scanf("%20s %d %lf", name, &age, &salary);
/* 入力されたデータを出力 */
printf("\n\nTable %s\n",label);
printf("Compiled by %s age %d $%15.2lf\n", name, age, salary);
printf("-----------------------------------------------------\n");
for (loop=0;loop<entries;++loop)
printf("%4d | %-20s | %5d | %15.2lf\n",
loop + 1,
entry[loop].name,
entry[loop].age,
entry[loop].salary);
printf("-----------------------------------------------------\n");
return 0;
}