質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
ポインタ

ポインタはアドレスを用いてメモリに格納された値を"参照する"変数です。

Q&A

解決済

2回答

677閲覧

構造体とポインタについて

HYYH

総合スコア16

ポインタ

ポインタはアドレスを用いてメモリに格納された値を"参照する"変数です。

0グッド

0クリップ

投稿2022/01/22 10:12

名前と国語、数学、英語の成績をキーボードから入力すると、各人毎に、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}

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

YT0014

2022/01/22 10:26

ポインタgsの値が、どのタイミングでどんな値になっているか、ご確認のうえ、ご提示ください。
guest

回答2

0

ベストアンサー

1つめのforの前にgs=grade;が抜けてますね。

2つめのforの前に書いてあると言うことは意味がわかっていると言うことだと思うのですが、
エラーになったのでどこかに間違いがあるに違いないのに、自分で見つけられないのが不思議でなりません。

投稿2022/01/22 11:02

otn

総合スコア84499

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ポインタgsになにも代入されてません。
不定のナカミのまま使ってるため、不正アクセスとなってます

投稿2022/01/22 10:43

y_waiwai

総合スコア87747

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問