課題1のサンプルプログラム

filetest_kai.cpp
0001:
0002:
0003:
0004:
0005:
0006:
0007:
0008:
0009:
0010:
0011:
0012:
0013:
0014:
0015:
0016:
0017:
0018:
0019:
0020:
0021:
0022:
0023:
0024:
0025:
0026:
0027:
0028:
0029:
0030:
0031:
0032:
0033:
0034:
0035:
0036:
0037:
0038:
0039:
0040:
0041:
0042:
0043:
0044:
0045:
0046:
0047:
0048:
0049:
0050:
0051:
0052:
0053:
0054:
0055:
0056:
0057:
0058:
//
// ex01/filetest_kai.cpp
//
//
#include <stdio.h>
#include <stdlib.h>
// 計算処理を行う関数
void operation(FILE* ifp,FILE* ofp)
{
float a, b;
const int LOOPLIMIT =10000; // ループ最大回数を規定, エラー対策
if ( (ifp==NULL) || (ofp==NULL) ) { // ファイルポインタのエラー処理
fprintf(stderr,"[Error] null file pointer detected.\n");
exit(-1);
}
for (int i=0; i<LOOPLIMIT; i++) {
// 入力ファイルは1万行までサポート
if (fscanf(ifp,"%f%f",&a,&b) == EOF )
// 入力ファイルから数値2個読み込み
break; // 読み込めなかったら処理を終了
float c = a * b;
fprintf(ofp, "%g, %g, %g\n",a,b,c); //ファイルに出力
printf("%g * %g = %g\n",a,b,c); //画面に出力
}
}
// メイン関数
int main(int argc, char* argv[])
{
FILE* ifp = NULL;
// 入力用ファイルポインタ
FILE* ofp = NULL;
// 出力用ファイルポインタ
char* ifile = NULL; // 入力ファイル名
char* ofile = NULL; // 出力ファイル名
if(argc!=3) {
// 実行時引数が2個なかったらエラーとする
fprintf(stderr,"usage: %s inputfile outputfile\n", argv[0]);
exit(1);
}
ifile = argv[1];
ofile = argv[2];
// パラメータの1番目を入力ファイル名
// パラメータの2番目を出力ファイル名
if( (ifp = fopen(ifile,"rt"))==NULL) { // 入力ファイルを開く
fprintf(stderr,"Can't open file %s\a\n", ifile);
// 開けなかったら修了
exit(2);
}
if( (ofp = fopen(ofile,"wt"))==NULL) { // 出力ファイルを開く
fprintf(stderr,"Can't open file %s\a\n", ofile);
// 開けなかったら修了
exit(3);
}
operation(ifp,ofp); // 計算処理関数呼び出し
fclose(ofp);
fclose(ifp);
return(0);
// ファイルを閉じる
// ファイルを閉じる
}
- 1 -