ファイルを読み込み、構造体のデータを表示し、各項目のデータの平均値を求め表示するプログラム

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

ファイルを読み込み、構造体のデータを表示し、各項目のデータの平均値を求め表示するプログラム

#1

投稿記事 by ドッペル » 3ヶ月前

ファイルを外部から読み込み、ユーザーに番号を選んでもらい、データの表示、追加などをできるものを作ろうとしていますが、その中で、各々の項目の名,年,身長,体重の4つのデータをメンバにして,Bodyを宣言しキーボードから入力されたファイル名を読み込み、それをユーザが1〜4の番号を選ぶことでデータの表示、追加、書き出しなどができるプログラムを書いてみました。その中でファイル内のデータを表示する際に、各項目(年、身長、体重)の平均値を最後に出すようにしたいのですが、何時間やっても解決の糸口がさっぱり見えません。//--------各々の項目の平均値を求めたい--------↓の中に書くべきプログラムについてどうすれば良いのか教えてください。ファイル内のデータに関してですが、下のようになっています。

名 年 身長 体重
a 21 184 70
b 22 178 63
c 47 178 50
d 65 180 40
e 33 192 56
f 12 150 51
g 35 185 58
h 25 150 76
i 35 186 56
j 49 185 41
k 36 165 66

コード:

#include <stdio.h>
#define NUM 500

typedef struct Body
{
    char name[50];
    int age;
    double height;
    double weight;
}Body;
 
int print_bodydata(const Body* pData);
int input_bodydata(Body* pData);
FILE* check_fopen(char filename[],char mode[]);
 
int main(void)
{
    int i, rc=0, cnt=0, data_ag=0, data_he=0,data_we=0;
    Body Data[NUM];
    FILE* fp;
    
    int menu;
     
    while(1){
        printf("\nメニュー \n");
        printf("1:読み込み\n"); 
        printf("2:表示\n"); 
        printf("3:入力\n");
        printf("4:書き出し\n"); 
        printf("以外:終了\n\n");
         
        printf("No の入力:");
        scanf("%d",&menu);  printf("\n");
         
        switch(menu){

//---
            
    printf("\n読み込み\n");
    char filename[50];
    printf("\nファイル名入力:");
    scanf("%s",filename);
    fp=check_fopen(filename,"r");
    if(fp==NULL)break;
    
    for(i=0;i<NUM;i++){
    rc=fscanf(fp,"%s\t%d\t%lf\t%lf\r\n",
           Data[i].name, &Data[i].age,
           &Data[i].height, &Data[i].weight);
        if(rc==EOF) break;
    }
    cnt=i;
   
            break;
 
//---               
 
    printf("\n表示\n");
    printf("\n名\t年\t身長\t 体重\n");
    for(i=0;i<cnt;i++) print_bodydata(&Data[i]);
//--------各々の項目の平均値を求めたい--------↓
  
    printf("\n%d件の平均\n",cnt);
    
    for(i=0;i<NUM;i++){
        for(rc=0;rc<5;){
            data_ag[i]=data_ag[i] + &Data[i]
        }
    }
    
    
//--------各々の項目の平均値を求めたい--------↑
            break;
                
//----
    printf("\nデータ入力\n");    
    if(cnt==NUM){
        printf("容量オーバー\n\n");
        return -1;
    }
    
    input_bodydata(&Data[cnt]);
    printf("\n名 \t年 \t身長 \t体重\n");
    print_bodydata(&Data[cnt]);
    cnt++;
            break;
                
//----
            
    printf("\n書き出し\n");
    fp=check_fopen("data.txt","w");
    
    for(i=0;i<cnt;i++){
        fprintf(fp,"%s\t%d\t%f\t%f\r\n",
                Data[i].name, Data[i].age,
                Data[i].height, Data[i].weight);
    }
    printf("書き込み完了\n");
                
    fclose(fp); printf("close\n");
                
            break;
        default:
  
            return 0;
        }
    }
    return 0;
}
 
FILE* check_fopen(char filename[],char mode[])
{
    FILE* fp;
    fp=fopen(filename,mode);
    
    if(fp==NULL){
        printf("\n再度入力してください\n");
        return NULL;
    }
    printf("\nfile open\n");
    return fp;
}

int print_bodydata(const Body* pData)
{
    printf("%s\t", pData->name);
    printf("%d才\t", pData->age);
    printf("%.1fcm", pData->height);
    printf("%7.1fkg\n", pData->weight);
    return 0;
}

int input_bodydata(Body* pData)
{
    printf("名: "); scanf("%s", pData->name);
    printf("年: "); scanf("%d", &pData->age);
    printf("身長: "); scanf("%lf", &pData->height);
    printf("体重: "); scanf("%lf", &pData->weight);
    printf("\n");
    return 0;
}

ドッペル

Re: ファイルを読み込み、構造体のデータを表示し、各項目のデータの平均値を求め表示するプログラム

#2

投稿記事 by ドッペル » 3ヶ月前

すみません、上記の質問ですが、無事自己解決できました。難しく考え過ぎていたようです。

Math

Re: ファイルを読み込み、構造体のデータを表示し、各項目のデータの平均値を求め表示するプログラム

#3

投稿記事 by Math » 3ヶ月前

コード:

    for(i=0;i<NUM;i++){
        for(rc=0;rc<5;){ 
            data_ag[i]=data_ag[i] + &Data[i]
        }
    }
てのはおかしいよね!

ドッペル

Re: ファイルを読み込み、構造体のデータを表示し、各項目のデータの平均値を求め表示するプログラム

#4

投稿記事 by ドッペル » 3ヶ月前

ですね。何パターンも試してみたのですが、さっぱりわからず行き詰まってしまい、途方に暮れ質問をしました。
その後、解決できない原因を考えるために簡単に基礎を見直していると解決方法が見えました!!

みなさま、本当にありがとうございます

Math

Re: ファイルを読み込み、構造体のデータを表示し、各項目のデータの平均値を求め表示するプログラム

#5

投稿記事 by Math » 3ヶ月前

良かったですね!

投稿すると気合が入って自己解決されるかたも時々ありますね。
また迷ったときはどうぞ。

返信

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