復習:コンパイル・実行 計算機科学概論 第11回 標準入出力ライブラリ(1) • サンプルプログラムをコピー % cp ~gmituhar/math/lecture/cs/ program/chcase.c . • コンパイル % cc chcase.c • 実行 % ./a.out < chcase.c 標準入出力ライブラリ • 今回は入出力に標準入出力ライブラリを 使用 ‒入出力を行う標準的な方法 •バッファリング •書式指定(例: printf) ‒#include <stdio.h> ‒どのような関数があるかは % man stdio 式としての代入とその値 • Cでは代入「a = exp」は式 – 「a = exp;」は文 • 「代入された値」が(式としての)代入の値 –x = y = z = 0 • x = (y = (z = 0)) と同じ • 式「z = 0」「y = (z = 0)」の値は 0 • 結局 x, y, z に 0 が代入される • 優先順位に注意 – while ((c = getchar()) != EOF) 文字単位の入出力 (対象: 標準入出力) • int getchar() – 標準入力から1文字読み、返り値とする – 入力の終わりに達したかエラーの場合は EOF(stdio.hで定義されている定数)を返す – 返り値の型は char ではなく int • 文字が読めた場合の返り値とEOFとを区別 • 返り値を変数に代入してからチェックするときに注意 • int putchar(int c) – 標準出力に1文字書く – エラーの場合はEOF, それ以外は書いた文字を返す 式としての代入 while ((c = getchar()) != EOF) { : } c = getchar(); while (c != EOF) { : c = getchar(); } • 同じ内容を複数回記述することを避ける • よく使われるパターン以外で使いすぎる と、プログラムが読みにくくなる 文字単位の入出力 (対象: ファイル) 終了ステータス • main は int型の返り値を持つ関数 –何を返す? … 終了ステータス •0 … 正常終了(真) • 0以外 … 異常終了(偽) • void exit(int status) ‒終了ステータスを設定し、プログラムを終了 ‒main以外からも終了ステータスを設定可 ファイルのオープン • FILE *fopen(char *path, char *mode) ‒pathで指定されたパス名のファイルを新しいス トリームに結び付け、そのストリームを返す ‒modeでどの種類の操作を行うか指定 •"r" … 読み出し専用 •"w" … 書きこみ専用 ‒エラーのときは0(どこも指していないポイン タ。NULLと書くこともあり)を返す クローズ • 標準入出力ライブラリではファイルに対して直 接入出力を行うことはしない ‒ ストリームを経由する – FILE *stream; • 典型的な使用手順 1. ファイルをストリームに結び付ける(オープン) 2. ストリームに対し入出力を行う 3. ファイルとストリームの結び付きを解除(クローズ) ストリームに対する入出力 • int getc(FILE *stream) • int putc(int c, FILE *stream) – getchar, putchar のストリーム指定版 • 以下のストリームはオープンせずに使用可能 – stdin(標準入力), stdout(標準出力), stderr(標準エラー 出力) – getchar() は getc(stdin) と同じ – putchar(c) は putc(c, stdout) と同じ コマンド引数の処理 • int fclose(FILE *stream) • 関数 main の引数は通常0個か2個 • 実はプロセス終了時に自動的にクローズが行わ れる • int main(int argc, char *argv[]) ‒ 同時にオープンできるファイルの数には上限あり ‒ 特に順次ファイルを処理していくプログラムでは、 不要になったストリームは直ちにクローズすべき –argc … (コマンド名も含めた)引数の個数 –argv …引数を表す文字列(の先頭要素へのポインタ)の 配列(の先頭要素へのポインタ) • 「char **argv」と書いても同じ • argv[i] (0 ≤ i < (argcの値))がi番目の引数の文字列を 表す • argv[argc] は NULL 例: % ./a.out first second third argv[0] ’.’ ’/’ ’a’ ’.’ ’o’ ’u’ ’t’ ’\0’ argv ’f’ ’i’ ’r’ ’s’ ’t’ ’\0’ ’s’ ’e’ ’c’ ’o’ ’n’ ’d’ ’\0’ 4 argc 0 ’t’ ’h’ ’i’ ’r’ ’d’ ’\0’ argv[argc]
© Copyright 2025 ExpyDoc