我在下面的函数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;
}
答案 0 :(得分:7)
您可能想写
sizeof(struct student)
而不是
sizeof struct *student
答案 1 :(得分: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);