使用指针将值分配给结构时出错

时间:2013-09-14 02:52:42

标签: c pointers struct

我是C的新手并且一直试图让这个简单的代码运行,它使用指向struct的指针来计算输入的成绩的平均值。输入数学成绩后,程序会抛出错误并停止。我究竟做错了什么。 这也是我在这里的第一篇文章,所以请耐心等待我的任何不一致。谢谢!

#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;
}

1 个答案:

答案 0 :(得分: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