C言語の勉強をしているものですが以下の問題のエラーが取れなくて困っております。
問題文で構造体のポインタを用いるとの指定がありましたので、それに従っているつもりですが、
*をとる?という読めるエラーが出てしまいます。
また、その他のエラーに関してもどう対応してよいのか困っております。
どなたかお時間がありましたら、アドバイス頂けると幸いです。
【問題分】
以下の表は、あるクラスのテストの成績を示す票である。この生徒情報を構造体として作成し、それぞれの科目の平均点を構造体のポインタを用いて求めなさい。
学生番号 国語 算数 理科 社会 英語
1001 82 43 53 84 45
1002 92 83 88 79 99
1003 43 32 53 45 66
1004 72 73 71 68 59
1005 99 72 82 91 94
この時、以下の構造体を作成し、利用すること。
【student_data:学生の番号と、点数のデータを保存する構造体 】
typdef struct{
int id; // 学生番号
int kokugo; // 国語の点数
int sansu; // 算数の点数
int rika; // 理科の点数
int shakai; // 社会の点数
int eigo; // 英語の点数
}student_data;
【期待される実行結果】
国語 平均 = 77.60
数学 平均 = 60.60
理科 平均 = 69.40
社会 平均 = 73.40
英語 平均 = 72.80
【私が作成してビルドした結果】
**** Build of configuration Debug for project probex6-4 ****
**** Internal Builder is used for build ****
gcc -O0 -g3 -Wall -c -fmessage-length=0 -o main.o ..\main.c
..\main.c: In function `Avarage':
..\main.c:75: error: invalid type argument of `->'
..\main.c:81: error: invalid type argument of `->'
..\main.c:87: error: invalid type argument of `->'
..\main.c:93: error: invalid type argument of `->'
..\main.c:99: error: invalid type argument of `->'
Build error occurred, build is stopped
Time consumed: 218 ms.
【私が作成したソース】
#include <stdio.h>
typedef struct{
int id;
int kokugo;
int sansu;
int rika;
int shakai;
int eigo;
}student_data;
void Avarage(student_data *data,double *ave);
int main(void){
student_data data[5];
double ave[5];
data[0].id = 1001;
data[1].id = 1002;
data[2].id = 1003;
data[3].id = 1004;
data[4].id = 1005;
data[0].kokugo = 82;
data[1].kokugo = 92;
data[2].kokugo = 43;
data[3].kokugo = 72;
data[4].kokugo = 99;
data[0].sansu = 43;
data[1].sansu = 83;
data[2].sansu = 32;
data[3].sansu = 73;
data[4].sansu = 72;
data[0].rika = 53;
data[1].rika = 88;
data[2].rika = 53;
data[3].rika = 71;
data[4].rika = 82;
data[0].shakai = 84;
data[1].shakai = 79;
data[2].shakai = 45;
data[3].shakai = 68;
data[4].shakai = 91;
data[0].eigo = 45;
data[1].eigo = 99;
data[2].eigo = 66;
data[3].eigo = 59;
data[4].eigo = 94;
Avarage(data,ave);
printf("国語 平均 = %4.2f\n 数学 平均 = %4.2f\n 理科 平均 = %4.2f\n 社会 平均 = %4.2f\n 英語 平均 = %4.2f\n", ave[0],ave[1],ave[2],ave[3],ave[4]);
return 0;
}
void Avarage(student_data *data,double *ave){
int i;
int sum = 0;
for(i=0;i<5;i++){
sum = sum + data[i]->kokugo;
}
ave[0] = sum / 5;
sum = 0;
for(i=0;i<5;i++){
sum = sum + data[i]->sansu;
}
ave[1] = sum / 5;
sum = 0;
for(i=0;i<5;i++){
sum = sum + data[i]->rika;
}
ave[2] = sum / 5;
sum = 0;
for(i=0;i<5;i++){
sum = sum + data[i]->shakai;
}
ave[3] = sum / 5;
sum = 0;
for(i=0;i<5;i++){
sum = sum + data[i]->eigo;
}
ave[4] = sum / 5;
}
A 回答 (2件)
- 最新から表示
- 回答順に表示
No.2
- 回答日時:
エラー行の data[i]->sansu で "->" の左側の data[i] は「ポインター」を示している必要がありますが、この場合のこの書き方 (data[i]) は「実体」を示しています。
よって、エラーになっているわけで、この場合 data[i].sansu と書くか、(data + i)->sansu と書く必要があります。
No.1
- 回答日時:
data が student_data *(student_data へのポインタ)
だとしたら
data[X] ( *(data+X) と等価 )
の型は何になるか、よーく考えてみましょう。
data の型は?
data +X の型は?
*(data + X)の型は?
と順番に考えるとよいでしょう。
-> の前は、構造体(等)へのポインタである必要があります。
エラーが出ているのは、 -> の左がポインタになっていないからです。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# 10個の実数に対する降順ソート結果を出力するプログラムを作りたいのですが、以下のプログラムをどう直せ 1 2022/07/09 22:16
- C言語・C++・C# (C言語・配列)date[i]の分散を計算する場合 2 2022/07/24 15:06
- C言語・C++・C# このプログラミングの問題を教えてほしいです。 キーボードからデータ数nとn個のデータを入力し、平均値 3 2022/12/19 22:51
- C言語・C++・C# プログラミングを教えて欲しいです。 配列aは、int a[9]={7,6,12,8,3,5,10,9 4 2022/12/19 23:27
- C言語・C++・C# c言語の問題です 課題1 (二分探索木とセット) 大きさ size の配列 array を考える。す 2 2023/01/10 21:08
- C言語・C++・C# C言語 プログラミング 4 2022/05/22 11:53
- C言語・C++・C# C#テキストボックスの文字を配列にいれてその後表示する 4 2022/07/17 04:47
- その他(プログラミング・Web制作) Python - Excel で Webからデータを連続取得したいのですが エラーが出ます 1 2023/07/06 20:08
- C言語・C++・C# pythonのファイルの並びでの読み込みとリストについて 4 2022/04/13 03:52
- その他(プログラミング・Web制作) pythonでDBのカラム名で取得したオブジェクトの値を表示したい 1 2022/05/13 03:41
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ポインター引数の関数でコンパ...
-
printfの%eで指数部分の桁数を...
-
オセロゲーム 2次元配列で困...
-
【Excel VBA】10進数を2進数に...
-
10個の実数に対する降順ソート...
-
途中経過も表示するプログラム
-
HKEY_CLASSES_ROOT\\.avi
-
'dataType' 引数を Null にする...
-
マクロ登録したピボットが重い...
-
txtファイルを読み込んで表示関...
-
CreateProcessでの環境変数の設...
-
エクセルVBA:日付データの変換...
-
linuxのシェルでファイル名に先...
-
プロシージャ名の変数にカウン...
-
UTF-8で5~6バイトになる文字コ...
-
Excel 1セル当りの文字数が2...
-
Excel VBA メール作成について ...
-
DataGridViewの特定列に入力さ...
-
10Mバイトて文字数に すると何...
-
char str[256]の256の意味は?
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ポインター引数の関数でコンパ...
-
stable diffusionのエラー
-
printfの%eで指数部分の桁数を...
-
エクセルVBA:日付データの変換...
-
linuxのシェルでファイル名に先...
-
int型(2バイト)データの分割
-
【Excel VBA】10進数を2進数に...
-
C#でのswitch文
-
データの値の近いものをグルー...
-
C言語 ファイル内のデータと入...
-
10個の実数に対する降順ソート...
-
C言語の構造体にてバブルソート...
-
'dataType' 引数を Null にする...
-
matlabのソースコードをpython...
-
C言語の勉強しています。すみま...
-
c言語での wavファイルの編集(...
-
テキストファイルの結合について
-
C言語についてです! 同じ年の...
-
sort関数でひらがなとカタカナ...
-
matlabでのRRI検出
おすすめ情報