2

私は C が初めてで、入力された成績の平均を計算するために構造体へのポインターを使用するこの単純なコードを実行しようとしています。数学のグレードに入った後、プログラムはエラーをスローして停止します。私は何を間違っていますか。こちらも初投稿ですので、不備等ありましたらご容赦ください。ありがとう!

#include <stdio.h>
#include <stdlib.h>

typedef struct
{
    char *name;
    int mathGrade,scienceGrade,historyGrade,englishGrade;
}reportCard;

void average(reportCard *rc)
{
    int avg = (rc->mathGrade +rc->scienceGrade+rc->historyGrade+rc->englishGrade)/4;
    printf("The overall grade of %s is: %i ",rc->name, avg);
}

int main()
{
    reportCard rc;
    printf("Enter the Students Last name: ");
    char studentName[20];
    scanf("%s", studentName);

    rc.name=studentName;

    printf("Math Grade: \n");
    scanf("%i", rc.mathGrade);

    printf("Science Grade: \n");
    scanf("%i", rc.scienceGrade);

    printf("History Grade: \n");
    scanf("%i", rc.historyGrade);

    printf("English Grade: \n");
    scanf("%i", rc.englishGrade);

    average(&rc);

    return 0;
}
4

1 に答える 1

1

scanfプリミティブを読み取るにはポインターが必要なため、エラーが発生します。

scanf("%i", &rc.mathGrade);
scanf("%i", &rc.scienceGrade);
//          ^
//          |
//        Here
// ...and so on

scanfは、渡された初期化されていないintものをポインターと見なし、それを書き込もうとしますが、エラーになります。

さらに、次のように、文字列を読み取る際のバッファ オーバーランから保護する必要があります。

scanf("%19s", studentName); // you allocated 20 chars; you need one for null terminator
于 2013-09-14T02:55:30.233 に答える