C<コード>
1#include <stdio.h> 2#include <stdlib.h> 3#define NUM 100 4 5/*** 構造体定義の宣言 ***/ 6 typedef struct Body{ 7 char name[32]; 8 int age; 9 double height; 10 double weight; 11 }Body; 12 13 14 15/*** 関数のプロトタイプ宣言 ***/ 16 FILE* check_fopen(char filename[],char mode[]); 17 int print_bodydata(const Body* pData); 18 int input_bodydata(Body *pData); 19 20int main(void) 21{ 22 /*** 変数の宣言 ***/ 23 int i,menu,rc=0,cnt=0; 24 Body Data[100]; 25 FILE* fp; 26 const char* ave_agee = "年齢"; 27 const char* ave_heightt = "身長"; 28 const char* ave_weightt = "体重"; 29 const char* moji = ""; 30 int ave_age = 0; //平均を入れる変数 31 double average = 0; 32 double ave_height = 0,ave_weight = 0;//平均を入れる変数 33 34 while(1){ 35 36 printf("\n==== 操作メニュー ====\n"); 37 printf("1:ファイル読み込み\n"); 38 printf("2:全データ表示\n"); 39 printf("3:新データ入力\n"); 40 printf("4:ファイル書き出し\n"); 41 printf("1~4以外:終 了\n\n"); 42 43 printf("操作No の入力:"); 44 scanf("%d",&menu); 45 printf("\n"); 46 47 switch(menu) 48 { 49 case 1: 50 printf("===ファイル読み込み===\n"); 51 52 /*** 処 理 内 容 ***/ 53 fp=check_fopen("sample.txt","r"); 54 55 for(i=0;i<NUM;i++){ 56 rc=fscanf(fp,"%s\t%d\t%lf\t%lf\r\n", 57 Data[i].name,&Data[i].age, 58 &Data[i].height,&Data[i].weight); 59 if(rc==EOF)break; 60 } 61 cnt=i; 62 printf("%d件のデータを読み込みました。\n",cnt); 63 fclose(fp); printf("ファイルを閉じました。\n"); 64 65 break; 66 67 case 2: 68 printf("\n===全データ表示===\n"); 69 70 /*** 処 理 内 容 ***/ 71 printf("\n名前\t年齢\t身長\t 体重\n"); 72 for(i=0;i<cnt;i++) print_bodydata(&Data[i]); 73 printf("出力したい平均を入力\t年齢・身長・体重\n"); 74 // while(1){ 75 // scanf("%s",&moji); 76 // if(moji==ave_agee){ 77 for(i=0;i<cnt;i++)ave_age = ave_agee_sum(&Data[i]); 78 average = ave_age/cnt; 79 printf("%d",average); 80 81 82 break; 83 84 case 3: 85 printf("\n===新データ入力===\n"); 86 87 /*** 処 理 内 容 ***/ 88 89 break; 90 91 case 4: 92 printf("\n===ファイル書き出し===\n"); 93 94 /*** 処 理 内 容 ***/ 95 96 break; 97 98 default: 99 printf("\n===プログラム終了===\n"); 100 return 0; 101 } 102 } 103 return 0; 104} 105/*** 関 数(自作の関数も作れれば作る)***/ 106 107FILE* check_fopen(char filename[],char mode[]) 108{ 109 FILE* fp; 110 fp = fopen(filename,mode); 111 112 if(fp==NULL){ 113 printf("\nファイルを開けませんでした。\n"); 114 exit(-1); 115 } 116 printf("\nファイルを開きました。\n"); 117 return fp; 118} 119 120int print_bodydata(const Body* pData) 121{ 122 printf("%s\t", pData->name); 123 printf("%d歳\t", pData->age); 124 printf("%.1fcm\t", pData->height); 125 printf("%7.1fkg\n", pData->weight); 126 return 0; 127} 128int input_bodydata(Body *pData) 129{ 130 printf("名前:"); scanf("%s", pData->name); 131 printf("年齢:"); scanf("%d", &pData->age); 132 printf("身長:"); scanf("%lf", &pData->height); 133 printf("体重:"); scanf("%lf", &pData->weight); 134 printf("\n"); 135 return 0; 136} 137int ave_agee_sum(Body *pData) 138{ 139 int aa = 0 ; 140 aa += pData->name; 141 142 return aa; 143}
<出力内容>
1〜4の数字を入力して、別のファイルのデータを読み込み、読み込んだ内容を表示するプログラムです。
別のフォルダに下記のようなデータが入っており、計55件入っております。
”名前 年齢 身長 体重
米山 裕太 32 185 85 ”
<質問内容>
case2で全データの表示、年齢、身長、体重の各平均を出力したいと考えております。
表示はできたのですが、平均が出力できません。
平均年齢だけのプログラムを書いたのですが、-1972264960と出力され、うまくいきません。
どなたか原因のわかる方はいらっしゃいますでしょうか。
以上、よろしくお願いいたします。
回答2件
あなたの回答
tips
プレビュー