それぞれ 括弧内を提出すること. 写しただけでなく, 自分で機能を考えてそれを実現するプログラムを作成すること.
を求めるプログラム.
例えば以下のようなプログラムを作成してみましょう. これは, 標準出力に出力するプログラムである.
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
int i;
for(i=0; i<50; i++)
printf("%d,%d\n", i, i*i);
return EXIT_SUCCESS;
}
「標準出力」(STDard Output)への出力は, 特に指定しない場合には画面に出力される.
この結果をファイルに保存するためには, リダイレクトを用いる. そのためには, 後述するように端末の中でプログラムを実行する.
$ ./a.out > abc.csv
$ more abc.csvまた, ここで挙げたプログラムで出力した結果は, Excel や OpenOffice の Calc などに テキスト(CSV; Comma-Separated Values)として読み込むことにより, グラフ化できる.
$ ls
$ dir
$ Z:
$ cd folderA一つ上(親)のディレクトリに移動する場合は, 親のディレクトリを表す..という特殊な名前を用いる.
$ cd ..
$ abc.exeUNIX の場合
$ ./a.out
出力結果をファイルに保存する場合は,
Windowsの場合
$ abc.exe > abc.csvUNIX の場合
$ ./a.out > abc.csv
出力先のファイルが既に存在する場合は, 上書きされてしまうので十分注意すること.
KDevelop の場合は,
~/hello$ cd debug ~/hello/debug$ cd src
~/hello/debug/src$ ls Makefile hello hello.o実行ファイルであることを表すためにファイル名の後ろに アスタリスク(*)が表示されている場合もあるが *はファイル名には含まれないので注意すること.
src の中に実行ファイル(次の例では hello)が作成されていれば, そのファイル名の前に ./を付けて, 実行する.
~/hello/debug/src$ ./hello
~/hello/debug/src$ ./hello > abc.csv
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
int returned_value, x, y;
while(1){
returned_value = scanf("%d%d", &x, &y);
if(returned_value == EOF)
break;
printf("%d X %d = %d\n", x, y, x*y);
}
return EXIT_SUCCESS;
}
ここで EOFは入力が終了したことを意味する整数である.
例えば次のように実行できる.
$./a.out 3 4 3 X 4 = 13 8 7 8 X 7 = 56 ^ZWindows では
^Z Unix では ^D により入力を終了できる.
ここで, ^Z はコントロールキー (Ctrl) を押しながら Zを押すことを意味する.
このうち 「3 4」の行と「8 7」の行は, キーボードからの入力である.
予め次のようなデータのファイルを作成しておくと, ファイルから入力できる.
3 4 8 7
このファイルのファイル名をabc.datとすると次のように実行できる. ここで 矢印(<)の向きが, 標準出力の出力先を変更する時とは, 逆であることに注意すること.
$ ./a.out < abc.dat 3 X 4 = 12 8 X 9 = 72
上のプログラムは慣用的に次のように書かれる.
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
int x, y;
while ( scanf("%d%d", &x, &y) != EOF ) {
printf("%d X %d = %d\n", x, y, x*y);
}
return EXIT_SUCCESS;
}
char 型の入力については, 教科書L8-11を参照のこと.
ここまでの例では 数値をコンマで区切って入力できない. フィールドをコンマで区切って入力する場合は, scanf の書式の対応する部分に コンマ(,) を記述する.
#include <stdio.h>
#include <stdlib.h>
// フィールドをコンマで区切って入力する場合は,
// scanf の書式の対応する部分に コンマ(,) を記述する.
int main(void)
{
int x, y;
while ( scanf("%d,%d", &x, &y) != EOF ) {
printf("%d X %d = %d\n", x, y, x*y);
}
return EXIT_SUCCESS;
}
(c)1999-2013 Tetsuya Makimura