C言語で記述しています。
環境 Linux(それ以外わからないです m(_ _)m )
やりたいこと
既に同じファイル内に用意している.datファイルから一行づつ文字型配列に読み込んで、読み込んだ値(行の末尾の値)を行ごとに平均をとりたい。
*用意している.datは%d,%d,%d\nが200行と*****が一行を、50セットあるものになっています。こんな感じです↓
%d,%d,%d\n ←ここと
:
:
%d,%d,%d\n
*****
%d,%d,%d\n ←ここと
:
:
%d,%d,%d\n ←ここと...で平均とりたいです。
*****
:
:
CMAC_data_Gamma09.dat は既に用意しています。
どうやら、while内if(fscanf(fp,"%s",str) == EOF)でコアダンプしているようです。
C
1 2//trans_data.c 3#include <stdio.h> 4#include <math.h> 5 6char str[20], file[20]; 7int data[50][200], sum_data[200]; 8 9int main(int argc, char **argv){ 10 int i, j, pos1, pos2, try1, try2; 11 double Gamma; 12 FILE *fp; 13 14 Gamma = atof(argv[1]); 15 16 i = 0; j = 0; 17 18 if(Gamma == 0.9) fp = fopen("CMAC_data_Gamma09.dat", "r"); 19 if(Gamma == 0.95) fp = fopen("CMAC_data_Gamma095.dat", "r"); 20 if(Gamma == 0.85) fp = fopen("CMAC_data_Gamma085.dat", "r"); 21 if(Gamma == 0.8) fp = fopen("CMAC_data_Gamma08.dat", "r"); 22 if(Gamma == 0.7) fp = fopen("CMAC_data_Gamma07.dat", "r"); 23 if(Gamma == 0.6) fp = fopen("CMAC_data_Gamma06.dat", "r"); 24 25 if(fp == NULL){ 26 printf("can not open file.\n"); 27 return 1; 28 } 29 else{ 30 printf("opened file.\n"); 31 } 32printf("check0\n"); 33 while(1){ 34 if(fgets(str,16,fp) == NULL) 35 break; 36printf("check1\n"); 37 if(strncmp(str,"*****",5) == 0){ 38printf("check2\n"); 39 pos1 = 0; 40 pos2++; 41 } 42 else{ 43printf("check3\n"); 44 sscanf(str,"%d,%d,%d", &try1, &try2, &data[pos1][pos2]); 45 pos1++; 46 } 47 } 48printf("check4\n"); 49 fclose(fp); 50 51 for(i = 0; i < 50; i++){ 52 for(j = 0; j < 200; j++){ 53 sum_data[j] += data[i][j]; 54 } 55 } 56 57printf("check5\n"); 58 59 if(atof(argv[1]) == 0.1) fp = fopen("learn_rete01.csv", "w"); 60 if(atof(argv[1]) == 0.3) fp = fopen("learn_rete03.csv", "w"); 61 if(atof(argv[1]) == 0.4) fp = fopen("learn_rete04.csv", "w"); 62 if(atof(argv[1]) == 0.5) fp = fopen("learn_rate05.csv", "w"); 63 if(atof(argv[1]) == 0.6) fp = fopen("learn_rate06.csv", "w"); 64 if(atof(argv[1]) == 0.7) fp = fopen("learn_rate07.csv", "w"); 65 66 if(fp == NULL){ 67 printf("can not open file.\n"); 68 return 1; 69 } 70 else{ 71 printf("opened file.\n"); 72 } 73 74 for(i = 0; i < 200; i++){ 75 fprintf(fp, "%d, %lf\n", i*10, sum_data[i]/50.); 76 } 77 78printf("check6\n"); 79 80 fclose(fp); 81 printf("closed file.\n"); 82 83 return 0; 84}

回答3件
あなたの回答
tips
プレビュー