input.txtを読み込み、計算結果をoutput.txtに書き出すプログラムを書いています
やりたいこと
・読み込み/書き出しのファイルを実行する時にargc,argvを用いて
コマンド行の引数で指定できるようにしたい
・引数の数のチェックをして足りないときはusageを表示して終了、
引数で受け取ったファイル名は別変数にコピーしてargvのまま用いないようにしたいです
補足
・読み込むファイル名は"input.txt"
txt
1//input.txt 21 32 43 54 65 76 87 98 109 1110
・書き出すファイル名は"output.txt"
txt
1//空
現在自分で書いたコードは以下です(8/31追記を元に修正しました)
c
1#include <stdio.h> 2#include <stdlib.h> 3#include <math.h> 4#define N 10 5 6int main(int argc, char *argv[]) 7{ 8 int i,data[N]; 9 int sum = 0; 10 float ave = 0; 11 float sqave = 0; 12 float sd =0; 13 const char* file1 = "input.txt"; 14 const char* file2 = "output.txt"; 15 FILE *fp1,*fp2; 16 17//出力時の文字化けを直したい 18 19//引数で受け取ったファイル名は別変数にコピーしてargvのまま用いないようにしたい 20 file1 = argv[1]; 21 file2 = argv[2]; 22 23//引数の数のチェックをして足りないときはusageを表示して終了したい 24 if (argc < 3){ 25 printf("usage: %s in_file out_fileを用いてください\n", argv[0]); 26 return 1; 27 } 28 29//ファイルを開いて読み込み 30 if( (fp1=fopen(file1,"r")) == NULL){ 31 printf("%sファイルを開くことが出来ませんでした\n",file1); 32 return 1; 33 }else{ 34 printf("%sファイルをオープンしました\n",file1); 35 printf("%d 個の整数の合計を出力します\n", N); 36 } 37 38 for(i=0; i < N ; i++){ 39 fscanf(fp1,"%d\n", &data[i]); 40 printf("読み込みデータ = %d\n", data[i]); 41 sum += data[i]; 42 sqave += data[i]*data[i]; 43 } 44 fclose(fp1); 45 printf("%sファイルをクローズしました\n", file1); 46 47//計算部分 48 printf("%d 個の整数の平均と標準偏差を出力します\n", N); 49 ave = (float)sum/N; 50 sqave /= N; 51 sd = (sqave - ave*ave)*N/(N-1); 52 if(sd >= 0){ 53 printf("平均 = %.1f\n標準偏差 = %.1f\n", ave, sqrt(sd)); 54 }else{ 55 printf("平均 = %.1f\n標準偏差 = 存在しない値です\n", ave); 56 } 57 58//新規ファイルに書き出し 59 if( (fp2=fopen(file2,"w")) == NULL){ 60 printf("%sファイルを開くことが出来ませんでした\n",file2); 61 return 1; 62 }else{ 63 printf("%sファイルをオープンしました\n", file2); 64 fprintf(fp2,"平均 = %.1f\n標準偏差 = %.1f\n", ave, sqrt(sd)); 65 printf("平均と標準偏差を%sファイルに書き込みました\n", file2); 66 } 67 fclose(fp2); 68 printf("%sファイルをクローズしました\n", file2); 69 70 return 0; 71}
文字化けを直したいです。
よろしくお願いします。
回答3件
あなたの回答
tips
プレビュー