I ♥ WordPress

[時間割:C言語]『はじめてのC言語完全入門』その5
2008/09/17 23:01 posted by kunkichi

火曜日の『C言語』を忘れてたので今日はがんばります!

12章「書式付き入力(その1)」から。

はじめてのC言語 完全入門 (標準プログラマーズライブラリ)
塚越 一雄
技術評論社
売り上げランキング: 420963


  • scanfで定型フォーマットのデータを標準入力scanf("変換仕様",&変数名)
  • 複数のデータの場合は以下のような感じで空白で区切るとわかりやすい。scanf("%c %d %f",&変数名1,&変数名2,&変数名3)とりあえず、区切りの空白は無視されるものとする。
  • 標準入力に含まれる空白の扱いに注意
    • 空白をフィールドの区切りとする
    • 先頭部分の空白は削除される
    • ただし、文字の場合のみ空白も改行も含まれる形で入力をとる。
  • 変換仕様中の空白は無視されるとしたけど、実際は空白を含めると、入力データの空白を除去したのと同じになる。よって
    • 空白を入力したい場合は文字書式(%c)等の前に空白を入れない。
    • 空白を除去したい場合は文字書式(%c)等の前に空白を入れる。
  • scanfは決まったフォーマットでデータを受けとる前提になっているので、入力エラーに対応できない。ではどうするか?
  • scanfはintを返す。返す値は入力に成功したフィールドの数。これを使えば、エラーチェックができる。int ret;
    ret = scanf( "%d", &arg1 );
    retが1ならOK。0ならNG。でも数値は文字列ともとれるから、単に数値かどうかのチェックしかできない気がする。やっぱり正規表現がいいなぁ、それはまたあとで出てくるのかな?
  • ただし複数フィールドの場合に最初のフィールドでエラーになったらscanfはそこで終わってしまうので、その場合はscanfを複数に分ける。scanf("%d",&argv1);
    scanf("%c",&argv2);
    1行目でエラーになっても2行目のscanfは実行される。
  • EOF(キーボードならCtrl+D)の場合はscanfは-1を返す。
  • 入力フィールドをスキップするには、変換仕様のフォーマットに*を含める。scanf("%d %*d %d", &arg1, &arg3 )この例だと元データの2番目のフィールドはスキップされる。
  • EOF(キーボードならCtrl+D)の場合はscanfは-1を返す。
  • scanfの書式文字列に、変換仕様や空白以外を含めると、その文字列を含めた一連のフォーマット文字列の入力とすることができる。日付とかで便利かも。scanf("%s/%s/%s", &y, &m, &d);
  • scanfの書式文字列に”¥n”を含めると入力が終わらなくなるので注意!

ふぅ〜、とりあえずこれで入出力を両方できるようになりました。でもこれじゃちょっと入力チェックが弱すぎだな〜。もう少し進めば正規表現とかも出てくるのかな?がんばります。

『サーバ』は引き続き↓読んでます。アウトプットがなかなか難しいですが、そのうち。

コンピュータの構成と設計~ハードウエアとソフトウエアのインタフェース 第3版 (上)
デイビッド・A. パターソン ジョン・L. ヘネシー
日経BP社
売り上げランキング: 37621

コメント&トラックバック

トラックバックURL





このページの先頭へ