表达式必须具有类类型错误

时间:2013-04-10 07:39:56

标签: c

我正在完成一项家庭作业,我遇到了一堵砖墙。我想我拥有所需的所有代码,我只需要编译程序即可。作业的目的是

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

然后:

编写将执行以下操作的程序:

  
    

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和&amp; 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*".

我在理论上理解这个概念,但是如何解决它的一些建议将受到高度赞赏。

提前感谢您的帮助。

1 个答案:

答案 0 :(得分:2)

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