
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で質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルVBA:日付データの変換...
-
stable diffusionのエラー
-
'dataType' 引数を Null にする...
-
RegQueryValueExでの2バイト文字
-
10個の実数に対する降順ソート...
-
途中経過も表示するプログラム
-
C言語の構造体にてバブルソート...
-
Excel 1セル当りの文字数が2...
-
COBOLのCOMP形式について
-
10Mバイトて文字数に すると何...
-
バイト列とバイナリ列の違いが...
-
UTF-8で5~6バイトになる文字コ...
-
SQLで1バイト、2バイト混在...
-
メールの件名をデコードしたい
-
C言語でwin32apiを使ってnotepa...
-
Excel VBA メール作成について ...
-
postで送られてきたパラメータ...
-
エクセルシート名の制限を変更...
-
matlabで、平均値を求める方法...
-
データの取り出し?
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
printfの%eで指数部分の桁数を...
-
stable diffusionのエラー
-
【Excel VBA】10進数を2進数に...
-
ポインター引数の関数でコンパ...
-
matlabでのRRI検出
-
C#でのswitch文
-
int型(2バイト)データの分割
-
C言語 ファイル内のデータと入...
-
'dataType' 引数を Null にする...
-
RegQueryValueExでの2バイト文字
-
iアプリ jamファイルの動的な出力
-
[error] [client ---- ] Argument
-
EOM間にperl文を作成したい
-
平滑化フィルタ
-
任意な項目のソート
-
変数の書き方
-
Cプログラムがどうしても動きま...
-
hiddenを使ったセッション
-
機械受注は?
-
チェックボックスの値だけが受...
おすすめ情報