O 棟 529号室
テュールスト マーティン ヤコブ
http://www.sw.it.aoyama.ac.jp/2005/Programming%20Basics%20II/lecture11.html
© 2005 Martin J. Dürst 青山学院大学
fgets
使用)、その文字列の大文字を全部小文字にするプログラムを作って下さい(ヒント:
教科書 p. 156
参照)。大文字から小文字への変換を関数にして下さい。第 3 問のプログラムを来週 (12月19日月曜日) の授業前に提出して下さい。出力は提出しなくて結構。プログラムの印刷は等幅の書体 (Courrier 等) を使って下さい。字下げ、コメントなどを忘れないように。
関数に渡すことは簡単にはできない。
今までの入出力の問題点:
問題点の解決方法:
scanf
や prinf
での入出力は普通画面から、そしてキーボードへと流れる。stdin
) と標準出力 (stdout
)
というものを使っている。コマンドラインで指定する
プログラム名が「 test
」、入力ファイルが
「input.txt
」、出力ファイルが
「output.txt
」 の場合
test <input.txt
test >output.txt
test <input.txt >output.txt
出力の場合には上書きに要注意!
stderr
)) はいつも用意されている。fopen
FILE *infile, *outfile; /* ファイルの変数を用意 */ infile = fopen ("input.txt", "r"); outfile = fopen ("output.txt", "w");
説明:
"r"
は読み込み、"w"
は書き込み
(最初から、ファイルの古い内容が消える)、"a"
はファイルの最後への追加普段使う関数と似た関数を使う:
f
(file) で始まるfgets
みたいに例外もある)
はファイル変数でファイルを指定する入力の例:
/* ファイル infile から整数変数 count
に整数を読み込む */
fscanf (infile, "%d", &count);
出力の例:
/* ファイル outfile へ整数変数 count の値を出力する
*/
fprintf (outfile, "%d", count);
それそれの関数の引数の順番などは参考書やマニュアルページ
(cygwin で例えば man fgets
)
もしくはウェブでみられる
書き出すときには (ハードディスクなどに空きがある限り) いくらでも書き出せるが、読み込みのファイルはいつか終わる。
これを EOF (end of file) と呼ぶ。入力の関数にはそれぞれ EOF を伝える機能があるが、関数によって違う。
例: scanf
や fscanf
は EOF
になると「EOF
」を返す。
プログラム (の一部) の例:
int result = 0, in; while (result != EOF) { result = scanf ("%d", &in); /* 入力の処理 */ }