名前と国語、数学、英語の成績をキーボードから入力すると、各人毎に、3 科目の平均値が出力されるプログラムを作成せよ。但し、構造体のポインタを用いた場合(代入と出力の両方で構造体のポインタを用いること)の コーディングを行うこと。
以上のことを念頭に、コードを書いてみたのですが、コアダンプになってしまいます。
きっと代入のところで失敗していると思うのですが、具体的にどこがいけないのかが調べてもわかりませんでした。
どうしたら、うまく代入できるか教えていただきたいです。
c
1#include<stdio.h> 2 3int main(void) 4{ 5 typedef struct{ 6 char name[50]; 7 int japa; 8 int math; 9 int engl; 10 double ave; 11 }Grade; 12 13 int n,i; 14 15 printf("人数を入力してください。"); 16 scanf("%d",&n); 17 Grade *gs,grade[n]; 18 19 for(i=0;i<n;i++){ 20 printf("%d人目\n",i+1); 21 printf("名前:"); 22 scanf("%s",gs->name); 23 printf("国語の点数:"); 24 scanf("%d",&gs->japa); 25 printf("数学の点数:"); 26 scanf("%d",&gs->math); 27 printf("英語の点数:"); 28 scanf("%d",&gs->engl); 29 gs->ave=((double)gs->japa+gs->math+gs->engl)/3; 30 gs++; 31 } 32 33 gs=grade; 34 //構造体のポインタを用いる 35 for(i=0;i<n;i++){ 36 printf("%d人目\n",i+1); 37 printf("(国語,数学,英語)=(%d,%d,%d)\n" 38 ,gs->japa,gs->math,gs->engl); 39 printf("三教科の平均=%f\n",gs->ave); 40 gs++; 41 } 42 return 0; 43}
しかし、ポインタを用いずに、配列だけでコードを書くことはできました。
c
1#include<stdio.h> 2 3int main(void) 4{ 5 typedef struct{ 6 char name[50]; 7 int japa; 8 int math; 9 int engl; 10 double ave; 11 }Grade; 12 13 int n,i; 14 15 printf("人数を入力してください。"); 16 scanf("%d",&n); 17 Grade grade[n]; 18 19 for(i=0;i<n;i++){ 20 printf("%d人目\n",i+1); 21 printf("名前:"); 22 scanf("%s",grade[i].name); 23 printf("国語の点数:"); 24 scanf("%d",&grade[i].japa); 25 printf("数学の点数:"); 26 scanf("%d",&grade[i].math); 27 printf("英語の点数:"); 28 scanf("%d",&grade[i].engl); 29 grade[i].ave=((double)grade[i].japa+grade[i].math+grade[i].engl)/3; 30 } 31 32 //構造体のインデックス 33 for(i=0;i<n;i++){ 34 printf("%d人目\n",i+1); 35 printf("(国語,数学,英語)=(%d,%d,%d)\n" 36 ,grade[i].japa,grade[i].math,grade[i].engl); 37 printf("三教科の平均=%f\n",grade[i].ave); 38 } 39 return 0; 40}
ポインタgsの値が、どのタイミングでどんな値になっているか、ご確認のうえ、ご提示ください。
回答2件
あなたの回答
tips
プレビュー