我在下面的函数allocate()的第一行收到错误“'struct'之前的预期表达式”。 我无法弄清楚为什么。

我应该说我的任务是使这个代码与提供的结构/函数头一起工作。

任何帮助深表感谢!

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <assert.h>
#include <time.h>

struct student{
    int id;
    int score;
};

struct student* allocate(){
     /*Allocate memory for ten students*/
     struct student *stud =  malloc(10 * sizeof struct *student);
     assert (stud !=0);

     return stud;
}

void generate(struct student *students){
     /*Generate random ID and scores for ten students, ID being between 1 and 10, scores between 0 and 100*/
     srand(time(NULL));

     // Generate random ID's
     int i;
     for(i=0; i<10; i++){
        students[i].id = rand()*10+1;
     }

     //Generate random scores
     for(i=0; i<10; i++){
        students[i].score = rand()*10+1;
     }
}

void output(struct student* students){
     //Output information about the ten students in the format:

     int i;
     for(i=0; i<10; i++){
        printf("ID-%d Score-%d\n", students[i].id, students[i].score);
        }
}

void summary(struct student* students){
     /*Compute and print the minimum, maximum and average scores of the ten students*/
     int min = 100;
     int max = 0;
     int avg = 0;
     int i;
     for(i=0; i<10; i++){
        if(students[i].score < min){
            min = students[i].score;
        }
        if(students[i].score > max){
            max = students[i].score;
        }
        avg = avg + students[i].score;
    }
    avg = avg/10;
    printf("Minimum score is %d, maximum score is %d, and average is %d.", min, max, avg);

}

void deallocate(struct student* stud){
     /*Deallocate memory from stud*/
     free (stud);
}

int main(){
   struct student *stud = NULL;

    /*call allocate*/
    stud = allocate();

    /*call generate*/
    generate(stud);

    /*call output*/
    output(stud);

    /*call summary*/
    summary(stud);

    /*call deallocate*/
    deallocate(stud);

    return 0;
}

===============>>#1 票数:7 已采纳

你可能想写

sizeof(struct student)

代替

sizeof struct *student

===============>>#2 票数:1

你的问题是sizeof struct *student 在typename上使用sizeof运算符时,需要将typename括起来。 另外,正如Jonathan Leffler在对这个答案的评论中所指出的那样, *struct *student是错误的,并且在这段代码的上下文中使用struct student *是不正确的。 也许你的意思是: sizeof (struct student)

或者,您可以在表达式上使用sizeof ,而不需要括号。 这是首选,因为如果你选择改变stud的类型,那么当你这样做时你不需要替换额外的类型名: struct student *stud = malloc(10 * sizeof *stud);

  ask by Tanner translate from so

未解决问题?本站智能推荐:

1回复

'struct'之前的预期表达式-错误

我使用CrossStudio IDE制作了一个简单的函数原型,该原型为STM32F30x ARM处理器初始化UART波特率和其他参数。 函数原型的目标只是从初始化外围设备(stm32f30x.c)打印波特率,因此我希望使用'9600'。 而是返回错误“'USART_Init'之前的预期表达式
1回复

list_for_each教程中'struct'之前的预期表达式

我在行的expected expression before 'struct'得到以下错误expected expression before 'struct' struct my_obj *obj = list_entry(i, struct my_obj, node); 在以下代码的底部:
3回复

C中的不完整类型'struct'错误

我有这个问题,无法看到错误在哪里,所以我希望有人可以帮助解决它。 我从编译源代码得到的错误是: 我在头文件中有结构定义 - client.h: 这是client.c的源代码: 谢谢!
1回复

错误:结构之前的预期表达式

我试图返回一个指向结构的指针,但我不断收到这个奇怪的错误bboard.c:35: error: Expecte expression before 'BBoard'没有人对可能导致这种情况的任何想法。 我对C语言还很陌生,所以我对此表示歉意。
2回复

C“自'struct'之前的预期表达式”错误,因为使用了typedef或header

我对C编程非常陌生(之前没有做过lazarus和Java,但是没有市长),并且我尝试编写一些text-rpg来学习基础知识。 现在我在编译时遇到了一个奇怪的错误,因为我试图将程序的一部分作为标题。 同时我停止在任何地方编写struct并使用typedef,因此错误也可能源自那里。 这是我的
3回复

预期的'struct matrix_t *'但参数的类型为'struct matrix_t *'?_? 没有不同

第6行是matrix_multiply函数 这是我的代码,从74行开始 这是我的功能原型和结构 我真的不明白这些错误消息。 请帮我 :)
2回复

表达式必须是可修改的左值(指向struct的指针)

我看过类似的问题,但还没有真正找到我问题的答案。 在我的程序中,我有一个函数sortdata,如下所示: 我在此行收到问题中描述的错误: temp无法识别为可修改的左值。 为什么是这样? 我在程序的另一个函数中有以下代码: 我以前没有初始化arr [](arr
1回复

表达式必须具有结构或联合类型

我正在尝试在C中使用堆栈/链表实现。 我在堆栈的pop函数上苦苦挣扎。 这是我的堆栈/链表实现的样子: 这是pop函数: 我不明白我做错了什么。 (*list).head是一个struct cell_s所以我next应该可以访问该属性? 但是编译器不允许我这样做。
3回复

C中volatile表达式中的指针

说我有一个结构 现在如果我声明这个结构的实例是volatile的 - 我使用volatile指针来访问这个volatile结构。 如果我尝试这样做: ptrToField也应该是易变的吗? 编译器是否知道prtToField在没有明确提及的情况下是易失性的,因
4回复

struct node和struct node *之间的'->'有什么区别?

我是指针的新手,这里有用于合并链表的代码。 在这里,它已将虚拟节点声明为struct node dummy; 并且虚拟节点的下一个节点为NULL,因此我们使用dummy.next = NULL;进行设置dummy.next = NULL; 。 我知道,如果它是struct node