[時間割:C言語]『はじめてのC言語完全入門』その5
2008/09/17 23:01 posted by kunkichi
火曜日の『C言語』を忘れてたので今日はがんばります!
12章「書式付き入力(その1)」から。
はじめてのC言語 完全入門 (標準プログラマーズライブラリ)
posted with amazlet at 08.08.19
塚越 一雄
技術評論社
売り上げランキング: 420963
技術評論社
売り上げランキング: 420963
- scanfで定型フォーマットのデータを標準入力
scanf("変換仕様",&変数名) - 複数のデータの場合は以下のような感じで空白で区切るとわかりやすい。
scanf("%c %d %f",&変数名1,&変数名2,&変数名3)とりあえず、区切りの空白は無視されるものとする。 - 標準入力に含まれる空白の扱いに注意
- 空白をフィールドの区切りとする
- 先頭部分の空白は削除される
- ただし、文字の場合のみ空白も改行も含まれる形で入力をとる。
- 変換仕様中の空白は無視されるとしたけど、実際は空白を含めると、入力データの空白を除去したのと同じになる。よって
- 空白を入力したい場合は文字書式(%c)等の前に空白を入れない。
- 空白を除去したい場合は文字書式(%c)等の前に空白を入れる。
- scanfは決まったフォーマットでデータを受けとる前提になっているので、入力エラーに対応できない。ではどうするか?
- scanfはintを返す。返す値は入力に成功したフィールドの数。これを使えば、エラーチェックができる。
int ret;retが1ならOK。0ならNG。でも数値は文字列ともとれるから、単に数値かどうかのチェックしかできない気がする。やっぱり正規表現がいいなぁ、それはまたあとで出てくるのかな?
ret = scanf( "%d", &arg1 ); - ただし複数フィールドの場合に最初のフィールドでエラーになったらscanfはそこで終わってしまうので、その場合はscanfを複数に分ける。
scanf("%d",&argv1);1行目でエラーになっても2行目のscanfは実行される。
scanf("%c",&argv2); - 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版 (上)
posted with amazlet at 08.09.11
デイビッド・A. パターソン ジョン・L. ヘネシー
日経BP社
売り上げランキング: 37621
日経BP社
売り上げランキング: 37621









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