2

我正在做家庭作业,但我碰到了一堵砖墙。我想我有我需要的所有代码,我只需要让程序编译即可。任务的对象是

创建一个结构来保存学生姓名和平均成绩。该结构应包含名字、姓氏和整数平均成绩。

然后:

编写一个程序,它将执行以下操作:

1.) 创建一个指向这些学生结构的指针数组。

2.) 提示用户输入姓名和平均值。

3.) 获得学生信息后,使用 malloc 提供内存来存储信息。

4.) 将 malloc 返回的学生地址放入指针数组中。

5.) 在用户表示没有更多学生之后:

搜索输入的数据并找到最高和最低的平均成绩。

a) 打印最高等级的姓名和等级

b) 打印最低等级的名称和等级

c) 打印输入的所有成绩的平均值

这是我的代码:

#include "stdafx.h"
#include <string.h>
#include <stdlib.h>


#define SIZE 25


int enterStudents (int ePointArray[SIZE]);
void searchData (int *sPointArray, int *sHigh, int *sLow);
int calculateAvg (int, int *avgPointArray);
void printData (int, int *pHigh, int *pLow);


struct student
{
    char firstName[20];
    char lastName[20];
    int average;
};


int main()
{
    int pointArray[SIZE], high[3], low[3];
    int i = 0, studentCounter, avgGrade; 


    for (i = 0; i < SIZE; i++)
        pointArray[i] = 0;


    studentCounter = enterStudents(pointArray);


    searchData(pointArray, high, low);


    avgGrade = calculateAvg(studentCounter, pointArray);


    printData(avgGrade, high, low);




    return 0;
}




int enterStudents (int ePointArray[SIZE])
{
    char tempFname[20], tempLname[20], yesNo[2] = "y";
    int tempAvg, counter = 0;
    int *studPtr;

    struct student aStud={"\0", "\0", 0};




    while( counter < SIZE && strcmp(yesNo, "y")==0)
    {
        printf(" Enter first name: ");
        scanf("%s", tempFname);


        printf(" Enter last name: ");
        scanf("%s", tempLname);


        printf(" Enter grade average:");
        scanf("%d", tempAvg);


        strcpy(aStud.firstName, tempFname);
        strcpy(aStud.lastName, tempLname);
        aStud.average = tempAvg;


        studPtr = malloc(sizeof(struct student));


        ePointArray[counter] = *studPtr;


        counter++;


        printf("/n");
        printf(" Do you have more students? yes or no:");
        scanf("%s", yesNo);
    }


    return counter;


}

void searchData (int sPointArray[SIZE], int sHigh[3], int sLow[3])
{
    int searchCounter = 0;


    while( searchCounter = 0)
    {
        if( *sPointArray[searchCounter].average > *sPointArray[searchCounter+1].average)
        {
            sHigh[0] = &sPointArray[searchCounter].firstName;
            sHigh[1] = &sPointArray[searchCounter].lastName;
            sHigh[2] = &sPointArray[searchCounter].average;
        }

        if( *sPointArray[searchCounter].average < *sPointArray[searchCounter+1].average)
        {
            sLow[0] = &sPointArray[searchCounter].firstName;
            sLow[1] = &sPointArray[searchCounter].lastName;
            sLow[3] = &sPointArray[searchCounter].average;
        }


        searchCounter++;
    }


}


int calculateAvg( int totalStudents, int avgPointArray[SIZE])
{
    int sum = 0;
    int avgCounter;
    double overallAvg;


    for( avgCounter = 0; avgCounter < totalStudents; avgCounter++)
        sum = sum + *avgPointArray[avgCounter].average;


    overallAvg = sum/totalStudents;


    return overallAvg;
}




void printData (int pAverage, int pHigh[3], int pLow[3])
{
    printf(" Highest Grade: %s %s %d", pHigh[0], pHigh[1], pHigh[3]);
    printf("/n");
    printf(" Lowest Grade: %s %s %d", pLow[0], pLow[2], pLow[3]);
    printf("/n");
    printf(" Average Grade: %d",pAverage);


}

主要问题来自 searchData 函数。在 if 语句中,*sPointArray 和 &sPointArray 的每次出现都带有红色下划线,错误显示为

 "Error: expression must have class type" 

同样的事情也发生在 for 循环中带有 *avgPointArray 的 calculateAvg 函数中。我知道这个错误对于noobie C程序员(即我自己)来说是一个相当普遍的问题,并且它通常与将代码编写为函数而不是语句或类似的东西有关,但我不能一辈子我发现我哪里出错了。任何帮助将不胜感激。我在这方面工作了很长时间,我的视力变得模糊。

此外,对于任何在两秒钟内解决此问题并希望证明我是一个真正的白痴的人,enterStudents 函数中有一个错误,它显示 StudPtr = malloc(sizeof...)。错误显示在分配符号下并说

"Error: a value of type "void*" cannot be assigned to an entity of type "int*".

我在理论上理解这个概念,但是对于如何解决它的一些建议将不胜感激。

预先感谢您的任何帮助。

4

1 回答 1

2

您将 声明sPointArray为整数数组,但将其用作结构数组。

于 2013-04-10T07:42:49.127 回答