コンテンツにスキップ

(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 というファイルを作りましょう。

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 へ出力してください。

課題