DIR A: /W
などというのは、よく使いましたね。「えっ?何それ?」 と、いう方はWindows世代の人で筆者よりだいぶん若い人 です。(関係ない話です)ここで、A:とか/Wとかいうのが コマンドライン引数になります。スイッチなどともいいます。 自作のプログラムでも、このようにコマンドライン引数を とれると便利です。この書き方をまず説明します。
でいいのです。argcは引数の個数です。 この中には、自分自身のファイル名が含まれています。 従って、本当の引数の個数はargc-1となります。 次のchar *argv[]が難しいのですが、簡単にいうと argv[0]は、プログラム自身の名前main(int argc, char *argv[])
早速、argcやらargvがどうなっているのか確かめる
プログラムを作りましょう。これは、どんな入門書にも
必ず載っているプログラムです。
このプログラムを実行するときは、コマンドラインから行いましょう。
そのとき適当な引数をいくつかつけてみてください。
このプログラム自身はfile2.exeですから、
コマンドライン上から
などとやってみてください。(プログラムのおいてあるバス)>file2 abc def /?
プログラムの実行結果そのものが説明になっています。
あえて付け加える必要はありませんが、
argvとかargcとかいう名前は何でもかまいません。
(念のため)
では、コマンドラインからオープンするファイルの名前 をもらって、そのファイルの内容を画面表示する プログラムを作ってみましょう。こんどは、1字ずつ ファイルから読み込んで画面に表示します。また、コマンド ラインからファイル名を入力し忘れたときは、改めてファイル名 を入力できるようにします。さらに無効なファイル名の時は、 正しいファイル名の入力を促すようにしましょう。 ここで新しく登場するのは、getc,putcです。 一見関数のように見えますがマクロ です。詳しく知りたい 人は、超初心者から初心者にレベルアップしてからstdio.h をのぞいてみてください。 マクロについては、あとの章で解説します。(またまた先延ばし!)
ですでにオープンされているファイルから 1文字読み込みます。そしてその文字の値 を返します。ここでいうファイルとは 狭い意味のファイルではなく、キーボードとか、 画面なども含む広い意味でのファイルです。 そういえば、BASICでもこんな使い方ありましたね。 筆者は、職場のコンピュータで、ある時間が来ると プリンターをファイルとしてオープンするプログラムを 作ったことがあります。うっかりこのプログラムを終了 せずに家に帰り、大変なことになっことがあります。 ちなみに、標準入力(キー・ボード)はstdin、 標準出力(画面)はstdoutです。fpのところに これらを入れてやればOKです。int getc(FILE *fp);
オープンしたファイルへ変数に1文字代入します。 そして、その文字の値を返します。 この辺の所は、ごちゃごちゃしていてわかりにくいのですが たくさんプログラムを書いていくうちに、int putc(char c, FILE *fp);
それと、ダブル・クォーテーション
の中身が長くて1行に納めるには、無理があるときは
左の例題のようにやってください。意外と便利です。
でも使い方を間違えないでください。
putc, getcの使い方は、この際覚えてしまってください。
それと、whileのカッコのの中に注目してください。
わかりやすく書くと、fから1文字読んで、chに代入。
このとき、getcは代入した文字の値を返します。
ファイルの最後まで読むとEOFを返すので、これが出ない
間は、1文字ずつ読み出す作業を続けなさい。
と、まあ日本語に翻訳するとこんな所かな。
(かえってわからん)
統合環境からそのまま実行するとコマンドライン 引数が渡せないため、 左のように注意され、再度ファイル名を入力する よう要求されます。 正しいファイル名を入力すると、ファイルの内容を 画面に表示します。
ところで、ファイルの中身が大きいとファイルの 最初の方は、スクロールしてしまって見ることが できません。ある程度の行数を表示したら ストップするようにプログラムを作り直してみてください。 今までにやった事柄のみで簡単に作れます。 ただし
なんていうのは、いけません。system("type xxx.txt | more");
Update Nov/05/1996 By Y.Kumei