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

この実行例のように、間をスペースで区切れば、複数の値を入力することが可能になります。

文字列の場合

スキャン集合指定子①

続いては、文字列の入力についてみてみましょう。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のいずれかの値が入力された場合
abcのいずれかを入力:a
入力された値 = a ← 入力された値が出力される。
実行結果②:abc以外の値が入力された場合
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のいずれかの値が入力された場合
abcのいずれかを入力:a
入力された値 = ← a,b,cなら、出力されない。
実行結果②:abc以外の値が入力された場合
abcのいずれかを入力:k
入力された値 = k ← 入力された値が出力される。

このように、^で指定した値の入力を受け付けないようにすることができます。ただ、気をつけてほしいのは、¥nが入っていることです。実は、これを入れないと、改行を受け付けてしまうので、気をつけましょう。