今週は,「ファイルからデータを配列に読みこむ」,「配列のデータをファイルへ書き込む」ことを学びます.
○ キーボードから入力した数値をファイルに保存するプログラムを作成する
#include <stdio.h>
void main()
{
int a;
FILE *fp;
if((fp = fopen("test.txt", "w")) == NULL){
printf("ファイルを作れませんでした");
return;
}
printf("ファイルに保存する数字:");
scanf("%d", &a);
fprintf(fp, "%d", a);
fclose(fp);
}
○ ファイルに保存された数値を読み込み,画面に表示するプログラムを作成する
#include <stdio.h>
void main()
{
int a;
FILE *fp;
if((fp = fopen("test.txt", "r")) == NULL){
printf("ファイルを開けませんでした");
return;
}
fscanf(fp, "%d", &a);
printf("%d", a);
fclose(fp);
}
では,ファイルから10個のデータを読み込んで,画面に表示するにはどうしたら良いでしょう.
データは,配列に読み込みたいですよね.(そんなことはない?)
配列にキーボードからデータを読み込みには,
#include <stdio.h>
void main()
{
int i, n;
int data[10];
for(i = 0; i < 10; i++) {
printf("%d番目のデータ:", i+1); scanf("%d", &(data[i]));
}
for(i=0; i<10; i++) printf("%d\n", data[i]);
}
となります.これをファイルから読み込むように変えてみましょう.
#include <stdio.h>
void main()
{
int i, n;
int data[10];
char filename[20];
FILE *fp;
printf("読み込むデータファイル名を入力してください : ");
scanf("%s", filename);
fp = fopen(filename, "r");
if(fp == NULL){
printf("ファイルがありませんでした");
return;
}
for(i = 0; i < 10; i++){
fscanf(fp, "%d", &(data[i]));
}
fclose(fp);
for(i=0; i<10; i++) printf("%d\n", data[i]);
}
ここで,事前にデータの個数がわからないとしたら,どうしたらよいだろう?
ファイルの終わりを調べるには,feof()関数を使います.この関数は,ファイルの終わりに達すると,trueになります.
この関数を使って,整数データの並んだファイルから,配列にデータを読み込んでみよう.
#include <stdio.h>
void main()
{
int i, n;
int data[256];
char filename[20];
FILE *fp;
printf("読み込むデータファイル名を入力してください : ");
scanf("%s", filename);
fp = fopen(filename, "r");
if(fp == NULL){
printf("ファイルがありませんでした");
return;
}
i = 0;
do{
fscanf(fp, "&d", &(data[i]));
i++;
}while(!(feof(fp)));
fclose(fp);
n = i;
for(i=0; i<n; i++) printf("%d\n", data[i]);
}
または,for文を使って,
#include <stdio.h>
void main()
{
int i, n;
int data[256];
char filename[20];
FILE *fp;
printf("読み込むデータファイル名を入力してください : ");
scanf("%s", filename);
fp = fopen(filename, "r");
if(fp == NULL){
printf("ファイルがありませんでした");
return;
}
for(i = 0; !(feof(fp)); i++) fscanf(fp, "%d", &(data[i]));
fclose(fp);
n = i;
for(i=0; i<n; i++) printf("%d\n", data[i]);
}
これができた人は,標準偏差を求めてから各点数の偏差値を求めてみよう.
さらに,できた人は,関数の演習で作成した並べ替えるプログラムを参考にして,成績のよい順に並べ替えて,結果を別のファイルに保存してみよう.