無題

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
きのこのこのこ

無題

#1

投稿記事 by きのこのこのこ » 14年前

Result Data.datにまずデータを書き込み、Result All Data.datにResult Data.datのデータを集計した結果を書き込むプログラムを作りたいと思っているのですがwrite_file2の方に処理が進んでいない(?)ようでうまくいきません
どうすれば上手く動くかお教えください
write_fileとwrite_file2はWindowsプログラムから連続で呼んでいます
#include <stdio.h>

void write_file(int write_pt[] , int write_et[] , int write_result[] , int x)
{
    FILE *fp;
    int i = 0;
    
    fp = fopen("./Data/Result Data.dat" , "a");
    for(i = 0; i <= x; i++){
        if(write_result == 1){
            fprintf(fp , "%d %d %d\n"  , write_pt , write_et , write_result);
        }
        if(write_result == 2){
            fprintf(fp , "%d %d %d\n" , write_pt , write_et , write_result);
        }
        if(write_result == 3){
            fprintf(fp , "%d %d %d\n" , write_pt , write_et[i] , write_result[i]);
        }
        if(write_result[i] == 4){
            fprintf(fp , "%d %d %d\n" , write_pt[i] , write_et[i] , write_result[i]);
        }
        if(write_result[i] == 5){
            fprintf(fp , "%d %d %d\n" , write_pt[i] , write_et[i] , write_result[i]);
        }
        if(write_result[i] == 6){
            fprintf(fp , "%d %d %d\n" , write_pt[i] , write_et[i] , write_result[i]);
        }
    }
    fclose(fp);
}

void write_file2(int write_result[]){
    FILE *fp;
    int i , j , w_count = 0 , l_count = 0 , d_count = 0 , eb_count = 0 , pb_count = 0 , ab_count = 0 , p_sum = 0 , e_sum = 0;
    float win_per , lose_per , drow_per , eb_per , pb_per , ab_per , p_ave , e_ave;
    int read_pt[1000] , read_et[1000] , read_result[1000];
    
    fp = fopen("./Data/Result Data.dat" , "r");
    i = 0;
    
    while(fscanf(fp , "%d %d %d" , read_pt[i] , read_et[i] , read_result[i]) != EOF){
        i++;
    }
    fclose(fp);
    
    fp = fopen("./Data/Result All Data.dat" , "w");
    
    for(j = 0; j <= i; j++){
        p_sum += read_pt[j];
        e_sum += read_et[j];
        
        if(write_result[j] == 1){
            w_count++;
        }
        if(write_result[j] == 2){
            l_count++;
        }
        if(write_result[j] == 3){
            d_count++;
        }
        if(write_result[j] == 4){
            eb_count++;
        }
        if(write_result[j] == 5){
            pb_count++;
        }
        if(write_result[j] == 6){
            ab_count++;
        }
    }
    
    win_per  = ((float)w_count  / (float)i) * 100.0;
    lose_per = ((float)l_count  / (float)i) * 100.0;
    drow_per = ((float)d_count  / (float)i) * 100.0;
    eb_per   = ((float)eb_count / (float)i) * 100.0;
    pb_per   = ((float)pb_count / (float)i) * 100.0;
    ab_per   = ((float)ab_count / (float)i) * 100.0;
    p_ave     =  (float)p_sum     / (float)i;
    e_ave     =  (float)e_sum     / (float)i;
    
    fprintf(fp , "%d %d %d %d\n" , i , w_count , l_count , d_count);
    fprintf(fp , "%.2f  %.2f %.2f\n" , win_per , lose_per , drow_per);
    fprintf(fp , "%d %d\n%.2f %.2f %.2f\n" , eb_count , pb_count , eb_per , pb_per , ab_per);
    fprintf(fp , "%.2f %.2f\n" , p_ave , e_ave);
    
    fclose(fp);
}

dic

Re:無題

#2

投稿記事 by dic » 14年前

何をどうしたいのか明確に書いて欲しいです
期待した結果もあわせてほしいです
そうでないと私はアドバイスできないです

きのこのこのこ

Re:無題

#3

投稿記事 by きのこのこのこ » 14年前

write_fileの方ではResult Data.datに1回1回処理したデータを全て記録してwrite_file2ではwrite_fileの中のデータから平均やカウントした値を求めてResult All Data.datに記録したいと思っています
write_fileの方では2回目以降もResult Data.datに追加でデータを記録してwrite_file2では再び平均などを求めてResult All Data.datの中を書き直したいと思ってます
write_pt[]とwrite_et[]はwrite_file2で平均を求めるために書き込むデータでwrite_result[]は1~6でそれぞれ回数をカウントするデータでxはwrite_fileで書き込むデータ数です

初級者

Re:無題

#4

投稿記事 by 初級者 » 14年前

それら2個の関数をWindowsプログラムから呼んでいる、というソースコードが見たいです。

もしかしたら、関数の呼び方が正しくないかもしれませんしね。

dic

Re:無題

#5

投稿記事 by dic » 14年前

最初の質問をよく読んでなかったです
ブレークポイントを設定するなどしてトレースしてくださいとしか私には言えないです

みけCAT

Re:無題

#6

投稿記事 by みけCAT » 14年前

fopen関数に渡している
"w"

"a"
にするとどうなりますか?
これは追加書き込みの指定です。

toyo

Re:無題

#7

投稿記事 by toyo » 14年前

fopenに失敗したときにエラーメッセージを表示するなどの処理を加えたほうがいいでしょう

ゆーずぃ

Re:無題

#8

投稿記事 by ゆーずぃ » 14年前

全然質問とは関係ないですけど、write_fileはwrite_resultの中身がどうであろうと処理は同じだし、これでいいと思うんだけど。ダメなの?(;´・ω・)
void write_file(int write_pt[] , int write_et[] , int write_result[] , int x)
{
    FILE *fp;
    int i = 0;
    
    fp = fopen("./Data/Result Data.dat" , "a");
    for(i = 0; i <= x; i++){
        fprintf(fp , "%d %d %d\n"  , write_pt , write_et , write_result);
    }
    fclose(fp);
}

環境が分からないけど、VC++とかならステップ実行でどこまでは値が正確に渡されているか等も調べてもらえるとアドバイスしやすいですね。あとは、初級者さんの仰るように呼び出し側のソースコードを上げてみて下さい。

閉鎖

“C言語何でも質問掲示板” へ戻る