(9) ファイル操作
前回の復習
下の例を参考に、正方形、長方形、円のいずれかを選択し、面積を計算できるようにしよう。
#include <stdio.h>
float square(float x) { return x * x;}
float rectangle(float x, float y) { return y * y;}
float circle(float r) { return r * r * 3.14f;}
int main(void) { float area; char figure[100];
printf("図形の形は?"); while(1) { scanf("%s", figure);
if (!strcmp(figure, "正方形")) { float x; printf("正方形の一片の長さは?"); scanf("%f", &x); area = square(x); printf("正方形の面積は%.0fです。\n", area); break; } else if (!strcmp(figure, "長方形")) { float x; float y; printf("長方形の縦の長さは?"); scanf("%f", &y); printf("長方形の横の長さは?"); scanf("%f", &x); area = rectangle(x, y); printf("長方形の面積は%.0fです。\n", area); break; } else if (!strcmp(figure, "円")) { float r; printf("円の半径の長さは?"); scanf("%f", &r); area = circle(r); printf("円の面積は%.2fです。\n", area); break; } else { printf("正方形、長方形、円から選んでください。\n"); } } return 0;}ファイルを出力する
・ test1.txt というファイルを開いて、文字を書き込みます。
・ test1.txt は、プログラムと同じ場所に作成しておきます。
#include <stdio.h>
int main(void) { FILE *fp; char s[256];
fp = fopen("test1.txt", "w");
if (fp == NULL) { printf("ファイルオープンに失敗しました。\n"); return 1; } else { printf("ファイルをオープンしました。\n"); }
fputs("こんにちは!テントくん。\n", fp); fputs("ばいばーい!テントくん。\n", fp); printf("ファイルに書き込みました。\n");
fclose(fp); printf("ファイルをクローズしました。\n");
return 0;}出力されたファイル test1.txt をテキストエディタで開くと、下の例のように表示されます。

ファイルから入力する①
・ test1.txt というファイルを開いて、文字を読み込みます。
#include <stdio.h>#define NUM 100
int main(void) { FILE *fp; char str1[NUM]; char str2[NUM];
fp = fopen("test1.txt", "r");
if (fp == NULL) { printf("ファイルオープンに失敗しました。\n"); return 1; } else { printf("ファイルをオープンしました。\n"); }
fgets(str1, NUM - 1, fp); fgets(str2, NUM - 1, fp);
printf("ファイルに書き込まれている文字列は\n"); printf(">> %s", str1); printf(">> %s", str2);
fclose(fp); printf("ファイルをクローズしました。\n");
return 0;}コマンドプロンプトに下の例のように表示されます。

ファイルから入力する②
・ test2.txt というファイルを作りましょう。

#include <stdio.h>#define NUM 100
int main(void) { FILE *fp; int test[NUM];
fp = fopen("test2.txt", "r");
if (fp == NULL) { printf("ファイルオープンに失敗しました。\n"); return 1; }
int i; for (i = 0; i < NUM; i++) { int ret = fscanf(fp, "%d", &test[i]); if (ret == EOF) { break; } }
int j; for (j = 0; j < i; j++) { printf("No.%-5d%d\n", j + 1, test[j]); }
fclose(fp);
return 0;}下のように表示されます。

今回の課題
test2.txtを読み込んで、最も小さい数値を表示してください。test2.txtを読み込んで、大きい順に並べ替えて表示してください。test2.txtを読み込んで、大きい順に並べ替えてから、test3.txtへ出力してください。
