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 -
© Copyright 2024 ExpyDoc