C/C++のデータ型と書式を知る:入力の書式

沖林正紀
2008/02/27 08:00

データ入力の書式はほとんど出力の場合と同じだが、少しだけ異なるところもある。

データを入力する関数

 まず、データを入力するときに用いるscanf()関数について紹介しておきたい。これはキーボードなどの標準入力からデータの入力を受け付ける。この中で前回紹介したような書式を表す文字列を用いる。

 キーボードから半角10文字までの文字列を入出力する例を以下に示す。

    #include 
      ..........
    char a[11];            /* 半角10文字分の文字列を保持する変数(配列) */
    scanf( "%s", a );      /* 変数aに文字列を入力 */
    printf( "%s\n", a );   /* 変数aの値を出力 */

 まず、データを入力するには、入力されたものをプログラム内で保持しておくために変数が必要だ。scanf()関数は、書式にしたがって入力したデータを変数に代入して保持させる。戻り値は代入した値の数だが、うまく入力ができなかったときはEOFという特別な値となる。

複数の値の入力

 複数の値を入力する場合は、データを保持する変数も複数必要だ。たとえば半角10文字までの文字列を入出力する場合の例を以下に示す。

    char a[11], b[11];            /* 半角10文字分の文字列を保持する変数(配列) */
    scanf( "%s %s", a, b );       /* 変数a, bに文字列を入力 */
    printf( "%s %s\n", a, b );    /* 変数a, bの値を出力 */

 出力の書式で”%s %s”と記述されているときは、2つの文字列の間に1つの半角空白が出力される。しかし、入力の書式におけるこの空白は、データの区切りを意味する。具体的には、空白以外に改行やタブ(Tab)でもよい。改行やタブもASCIIコードに含まれる、れっきとした文字の一種(制御文字)であることを思い出してほしい。

 また、2つの文字列の間に入るこれらの区切りは、複数で連続している場合、それを書式上の1つの区切りとする。そのため、これらも文字列の一部として入力したい場合は、別の方法が必要となる。

  • コメント(3件)

#1 ちゃっぴ  - 2008/03/29 22:46

scanf を教える必要があるでしょうか?より、現実的な fgets, sscanf を教えるべきでは? どうしても scanf にこだわるのであれば、書... 続きを見る
» 不適切なコメントを報告する

#2 はつね  - 2008/04/01 21:56

入力の書式ということでscanfを取り上げるのであれば、char a[11];に対する"%10s"を説明しなければならないと思います。また、それを指... 続きを見る
» 不適切なコメントを報告する

#3 性悪狐  - 2008/04/01 23:38

他の方のコメントの内容も当然のことなのですが、こんな大嘘を書いてはいけませんね。 >たとえば”%s,%s”とすれば、”abc def,ghi”を”ab... 続きを見る
» 不適切なコメントを報告する
記事に関係する情報をコメントでお寄せください

ニックネーム : CNET_IDにログインしてコメントする

コメント本文(必須) :
  • 新着記事
  • 人気記事
  • 特集
  • ブログ