今週は,「ファイルからデータを配列に読みこむ」,「配列のデータをファイルへ書き込む」ことを学びます.
○ キーボードから入力した数値をファイルに保存するプログラムを作成する
#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]); }
これができた人は,標準偏差を求めてから各点数の偏差値を求めてみよう.
さらに,できた人は,関数の演習で作成した並べ替えるプログラムを参考にして,成績のよい順に並べ替えて,結果を別のファイルに保存してみよう.