今日の人気記事

  1. 変数名の付け方 - 命名規則
  2. scanf関数 - 数値の入力
  3. while文 - 繰り返し処理
  4. 配列の要素を出力(表示)する

scanf関数 - スキャン集合

当ページのリンクには広告が含まれています。

スポンサーリンク

前回の「scanf関数を使った文字列入力の注意点 - ホワイトスペース」では、scanf関数の変換子「%s」を使うと「ホワイトスペースを含む文字列」を適切に変数へ格納できないことを紹介しました。

scanf関数の「スキャン集合」を使えば、「ホワイトスペースを含む文字列」を変数へ格納することができるので、ここではまず「スキャン集合」の概念と使い方をみていきます。

スキャン集合とは

スキャン集合とは

scanf関数で、読み込む文字を指定する方法のことをいいます。

例えば、次のように指定すると

scanf("%[xyz]", moji);

変数「moji」に「x」「y」「z」という文字のみを格納し(読み込み)、それ以外の文字を入力すると文字入力を終了するということになります。

サンプルプログラム

次のサンプルプログラムを実行してみましょう。

#include <stdio.h>

int main(void)
{
  /* 変数の定義 */
  char moji[1000];

  /* 文字列の入力 */
  printf("文字列を入力してください。\n");
  scanf("%[xyz]", moji);

  /* 文字列の出力 */
  printf("%s\n", moji);

  return 0;
}

実行結果

いくつかの実行結果です。

文字列を入力してください。
xyza
xyz
文字列を入力してください。
xxxzzzyyy3
xxxzzzyyy

「x」「y」「z」のいずれかの文字が入力されていると文字の入力が続き、それ以外の文字が入力されると文字入力が終了することがわかります。また、変数には「x」「y」「z」のみが格納されています。

スキャン集合の応用 - 範囲指定

スキャン集合では、読み込みたい文字の範囲指定をすることもできます。

例えば、次のように指定すると

scanf("%[a-z]", moji);

アルファベットの小文字「a」から「z」までの文字を変数に格納する(読み込む)、それ以外の文字を入力すると文字入力を終了するということになります。

サンプルプログラム

次のサンプルプログラムを実行してみましょう。

#include <stdio.h>

int main(void)
{
  /* 変数の定義 */
  char moji[1000];

  /* 文字列の入力 */
  printf("文字列を入力してください。\n");
  scanf("%[xyz]", moji);

  /* 文字列の出力 */
  printf("%s\n", moji);

  return 0;
}

実行結果

いくつかの実行結果です。

文字列を入力してください。
abcde5
abcde
文字列を入力してください。
rtyhsgA
rtyhsg

アルファベットの小文字「a」から「z」のいずれかの文字が入力されていると文字の入力が続き、それ以外の文字が入力されると文字入力が終了することがわかります。また、変数にはアルファベットの小文字「a」から「z」のみが格納されています。

スキャン集合の応用 - 否定

スキャン集合で、「読み込みたい文字の指定」と「読み込みたい文字の範囲指定」する機能をみてきました。他にも読み込みたくない文字を指定する否定の機能もあります。

例えば、次のように指定すると

scanf("%[^x]", moji);

「x」という文字以外のすべての文字を変数に格納する(読み込む)という意味になります。

サンプルプログラム

次のサンプルプログラムを実行してみましょう。

#include <stdio.h>

int main(void)
{
  /* 変数の定義 */
  char moji[1000];

  /* 文字列の入力 */
  printf("文字列を入力してください。\n");
  scanf("%[^xy]", moji);

  /* 文字列の出力 */
  printf("%s\n", moji);

  return 0;
}

実行結果

いくつかの実行結果です。

文字列を入力してください。
abcx
abc
文字列を入力してください。
1234y
1234

「x」「y」以外の文字が入力されていると文字の入力が続き、「x」あるいは「y」が入力されると文字入力が終了することがわかります。また、変数には「x」「y」を除く文字が格納されています。



次は「scanf関数 - スキャン集合を使った文字列 - ホワイトスペース」についてみていきます。

基本構文 の人気記事

  1. printf関数の変換指定子
  2. 条件演算子(3項演算子)「? :」
  3. 配列の要素を出力(表示)する
  4. while文 - 繰り返し処理
  5. continue文 - ループをスキップ
  6. 関数を呼び出す方法 - 引数なし&戻り値なし
  7. else if文 - 複数の条件式 - 条件分岐
  8. 変数名の付け方 - 命名規則
  9. 関数のプロトタイプ宣言
  10. scanf関数 - 数値の入力

関連記事(一部広告含む)