scanfの様々な書式指定
複数のパラメータの入力
scanf()関数を用いれば、複数のパラメータの入力をすることができます。以下のサンプルのようにすれば、一行の入力で複数の値の入力が可能です。
scanf-ex1:main.c#include <stdio.h> void main(){ int a, b; scanf("%d %d", &a, &b); // 複数のパラメータの入力を受け付ける。 printf("入力された値:%d %d¥n", a, b); }
1 2 ← 間をスペースで区切って入力。
入力された値:1 2
入力された値:1 2
この実行例のように、間をスペースで区切れば、複数の値を入力することが可能になります。
文字列の場合
スキャン集合指定子①
続いては、文字列の入力についてみてみましょう。scanf()での文字列の入力は、5日目を参考にしてください。scanf()で文字・文字を入力する際には、入力するデータの値を限定することが可能です。まずは、以下のサンプルを見てみましょう。
printf-ex2:main.c#include <stdio.h> void main(){ char s[32] = ""; printf("abcのいずれかを入力:"); scanf("%[abc]", s); printf("入力された値 = %s¥n", s); return 0; }
abcのいずれかを入力:a
入力された値 = a ← 入力された値が出力される。
実行結果②:abc以外の値が入力された場合
入力された値 = a ← 入力された値が出力される。
abcのいずれかを入力:k
入力された値 = ← 何も出力されない。
入力された値 = ← 何も出力されない。
このように、[]で囲まれた文字を指定すると、その文字以外の入力しか受け付けません。これを、スキャン集合指定子と言います。これを用いると、scanf()で入力を受け付けたい値を指定することができます。
逆に、入力を受け付けない文字を指定することができます。次のサンプルを見てください。スキャン集合指定子②
スキャン集合指定子は、指定した文字を受け付けるだけではなく、入力を受け付けない値を指定することができます。以下のサンプルを見てください。
printf-ex3:main.c#include <stdio.h> void main(){ char s[32] = ""; printf("abc以外のいずれかを入力:"); scanf("%[^abc¥n]", s); printf("入力された値 = %s\n", s); return 0; }
abcのいずれかを入力:a
入力された値 = ← a,b,cなら、出力されない。
実行結果②:abc以外の値が入力された場合
入力された値 = ← a,b,cなら、出力されない。
abcのいずれかを入力:k
入力された値 = k ← 入力された値が出力される。
入力された値 = k ← 入力された値が出力される。
このように、^で指定した値の入力を受け付けないようにすることができます。ただ、気をつけてほしいのは、¥nが入っていることです。実は、これを入れないと、改行を受け付けてしまうので、気をつけましょう。