前提・実現したいこと
subscripted value is neither array nor pointer nor vector
と言うエラーが出てしまいました。
検索してみたのですがいまいち何が問題なのかもわからない状態です。
やりたいこととしましては、年齢と身長、体重それぞれの平均値を表示することです。
コンパイル後実行すると、操作メニューにいき、1~4までの数字を入力すると、
データを読み込んだり表示したりでき、2の全表示をすると、平均値を算出できると言うものです。
発生している問題・エラーメッセージ
subscripted value is neither array nor pointer nor vector
該当のソースコード
C言語
1#include <stdio.h> 2#define STUD 100 3#define CORS 3 4typedef struct Body 5{ 6 char name[32]; 7 int age; 8 double height; 9 double weight; 10}Body; 11//構造体定義の宣言 12//参考:【B4】おまけ課題 3~9行目 13int print_bodydata(const Body* pData); 14int input_bodydata(Body* pData); 15FILE* open_file(char mode[]); 16//関数のプロトタイプ宣言 17int main(void) 18{ 19 int i,rc=0,cnt=0; 20 Body Data[100]; 21 FILE* fp; 22 //変数の宣言 23 int menu; 24 int Sum_a[STUD]={0}; 25 26 while(1){ 27 printf("\n=== 操作メニュー ===\n"); 28 printf("1:ファイル読み込み\n"); 29 printf("2:全データ表示\n"); 30 printf("3:新データ入力\n"); 31 printf("4:ファイル書き出し\n"); 32 printf("1~4以外:終了\n\n"); 33 34 printf("操作No の入力:"); 35 scanf("%d",&menu); printf("\n"); 36 switch(menu){ 37 case 1: 38 printf("\n=== ファイル読み込み ===\n"); 39 fp=open_file("r"); if(fp==NULL) return -1; 40 for(i=0;i<100;i++){ 41 rc=fscanf(fp,"%s\t%d\t%lf\t%lf\r\n", 42 Data[i].name, &Data[i].age, 43 &Data[i].height, &Data[i].weight); 44 if(rc==EOF) break; 45 } 46 cnt=i; 47 printf("%d件のデータをファイルから読み込みました\n",cnt); 48 fclose(fp); 49 //ファイルを開き 構造体配列に読み込む 50 break; 51 case 2: 52 printf("\n=== 全データ表示 ===\n"); 53 printf("\n名前\t年齢\t身長\t 体重\n"); 54 for(i=0;i<cnt;i++) print_bodydata(&Data[i]); 55 //構造体配列の内容を一件1行として画面に表示 56 //データ件数と、それぞれの項目についての前件の平均値を表示 57 printf("%d件のデータをファイルから読み込みました\n",cnt); 58 for(i=0;i<100;i++){ 59 rc=fscanf(fp,"%s\t%d\t%lf\t%lf\r\n", 60 Data[i].name, &Data[i].age, 61 &Data[i].height, &Data[i].weight); 62 } 63 for(rc=0;rc<CORS;rc++) { 64 Sum_a[rc] = Sum_a[rc] + Data[rc].age; 65 } 66 cnt=i; 67 printf("\n【平均年齢】\n"); 68 printf("%.1f才\t", (float)Sum_a[rc]/cnt); 69 break; 70 case 3: 71 printf("\n=== 新データ入力 ===\n"); 72 if(cnt==100){ 73 printf("最大件数のため、データ入力できません\n\n"); 74 return -1; 75 } 76 input_bodydata(&Data[cnt]); 77 print_bodydata(&Data[cnt]); 78 cnt++; 79 //構造体配列に新データを追加する 80 break; 81 case 4: 82 printf("\n=== ファイル書き出し ===\n"); 83 fp=open_file("w"); if(fp==NULL) return -1; 84 for(i=0;i<cnt;i++){ 85 fprintf(fp,"%s\t%d\t%f\t%f\r\n", 86 Data[i].name, Data[i].age, 87 Data[i].height, Data[i].weight); 88 } 89 printf("%d件のデータをファイルへ書き出しました\n", cnt); 90 fclose(fp); 91 //printf("ファイルを閉じました\n"); 92 //構造体配列の内容をファイルに書き出す 93 break; 94 default: 95 //プログラム終了 96 return 0; 97 } 98 } 99 return 0; 100} 101FILE* open_file(char mode[]) 102 { 103 FILE* fp; 104 char filename[32]; 105 106 printf("\nファイル名を指定:"); scanf("%s",filename); 107 fp=fopen(filename, mode); 108 if(fp==NULL){ 109 printf("ファイルを開けませんでした\n"); 110 return NULL; 111 } 112 //printf("ファイルを開きました\n"); 113 return fp; 114} 115 116int print_bodydata(const Body* pData) 117{ 118 printf("%s\t", pData->name); 119 printf("%d才\t", pData->age); 120 printf("%.1fcm\t", pData->height); 121 printf("%7.1fkg\n", pData->weight); 122 return 0; 123} 124 125int input_bodydata(Body* pData) 126{ 127 printf("名前:"); scanf("%s", pData->name); 128 printf("年齢:"); scanf("%d", &pData->age); 129 printf("身長:"); scanf("%lf", &pData->height); 130 printf("体重:"); scanf("%lf", &pData->weight); 131 printf("\n"); 132 return 0; 133}
試したこと
エラー文を検索し、意味を調べてみたのですが該当部分としましては、71行目
Sum_a[rc] = Sum_a[rc] + Data[cnt][rc];
の部分ででているため、そこをみてみたのですがどこが配列でもポインタでもないといわれているのかわからない状態です。
初心者のため記述が変なところなどあるかと思いますが、ご指摘よろしくお願いします。
補足情報(FW/ツールのバージョンなど)
深津 旭弘 29 183 78
深津 英臣 27 180 70
藤井 直伸 25 183 78
関田 誠大 23 177 70
米山 裕太 32 185 85
鈴木 悠二 35 190 80
清水 邦広 30 193 94
高松 卓矢 29 186 82
栗山 雅史 28 190 85
柳田 将洋 24 186 79
山田 脩造 24 193 78
高野 直哉 24 190 77
小川 猛 22 193 90
久原 翼 22 189 79
石川 祐希 21 192 84
鈴木 祐貴 20 201 85
新井 雄大 19 188 86
富松 崇彰 32 192 85
李 博 26 194 83
傳田 亮太 25 191 84
出耒田 敬 25 200 92
山内 晶大 23 204 72
高橋健太郎 22 202 100
大竹 壱青 21 201 100
小野寺太志 21 201 98
古賀太一郎 27 170 70
浅野 博亮 26 178 69
鶴田 大樹 25 177 76
井手 智 25 174 74
冨永こよみ 28 176 67
佐藤 美弥 27 174 61
田中 美咲 25 173 61
宮下 遥 22 177 61
石井 里沙 27 179 65
新鍋 理沙 26 173 64
長岡 望悠 25 179 64
石井 優希 26 180 68
野本 梨佳 25 180 73
内瀬戸真実 25 171 70
堀川 真理 25 183 70
高橋 沙織 24 177 67
鍋谷友理枝 23 176 57
井上愛里沙 22 178 66
田中 瑞稀 21 170 73
古賀紗理那 21 180 66
黒後 愛 19 180 69
荒木絵里香 32 186 78
松本亜弥華 28 188 71
岩坂 名奈 26 187 76
奥村 麻依 26 177 66
島村 春世 25 182 77
大野 果奈 25 180 70
井上 琴絵 27 162 53
佐藤あり紗 27 166 53
小幡 真子 24 164 55
深津 旭弘 29 183 78
深津 英臣 27 180 70
藤井 直伸 25 183 78
関田 誠大 23 177 70
米山 裕太 32 185 85
鈴木 悠二 35 190 80
清水 邦広 30 193 94
高松 卓矢 29 186 82
栗山 雅史 28 190 85
柳田 将洋 24 186 79
山田 脩造 24 193 78
高野 直哉 24 190 77
小川 猛 22 193 90
久原 翼 22 189 79
石川 祐希 21 192 84
鈴木 祐貴 20 201 85
新井 雄大 19 188 86
富松 崇彰 32 192 85
李 博 26 194 83
傳田 亮太 25 191 84
出耒田 敬 25 200 92
山内 晶大 23 204 72
高橋健太郎 22 202 100
大竹 壱青 21 201 100
小野寺太志 21 201 98
古賀太一郎 27 170 70
浅野 博亮 26 178 69
鶴田 大樹 25 177 76
井手 智 25 174 74
冨永こよみ 28 176 67
佐藤 美弥 27 174 61
田中 美咲 25 173 61
宮下 遥 22 177 61
石井 里沙 27 179 65
新鍋 理沙 26 173 64
長岡 望悠 25 179 64
石井 優希 26 180 68
野本 梨佳 25 180 73
内瀬戸真実 25 171 70
堀川 真理 25 183 70
高橋 沙織 24 177 67
鍋谷友理枝 23 176 57
井上愛里沙 22 178 66
田中 瑞稀 21 170 73
古賀紗理那 21 180 66
黒後 愛 19 180 69
荒木絵里香 32 186 78
松本亜弥華 28 188 71
岩坂 名奈 26 187 76
奥村 麻依 26 177 66
島村 春世 25 182 77
大野 果奈 25 180 70
井上 琴絵 27 162 53
佐藤あり紗 27 166 53
小幡 真子 24 164 55
上記がデータになります。
ここにより詳細な情報を記載してください。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/01/19 04:23
2021/01/19 04:34
2021/01/19 04:41
2021/01/19 04:45
2021/01/19 04:58
2021/01/19 05:03