attendu expression before 'struct'
J'obtiens le message d'erreur "expected expression before 'struct'" sur la première ligne de la fonction allouer() ci-dessous. Je ne peux pas comprendre pourquoi.
Je dois dire que j'ai été chargé de faire ce travail de code avec la structure /fonction des en-têtes fournis.
Toute aide est très appréciée!
#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;
}
OriginalL'auteur Tanner | 2013-04-16
Vous devez vous connecter pour publier un commentaire.
Vous pouvez écrire
au lieu de
;
dans votre réponse.Qui l'a fait! J'espère qu'un de ces jours je vais commencer à obtenir ces pointeurs / allocation dynamique de la mémoire.
merci d'édition.
Le mieux est
sizeof *stud
OriginalL'auteur Krishnabhadra
Votre problème est dans
sizeof struct *student
. Lors de l'utilisation de lasizeof
opérateur sur un nom, vous devez parenthesize la typename. En outre, comme Jonathan Leffler identifiés dans les commentaires de cette réponse, le placement de*
dansstruct *student
est erronée, et l'utilisation destruct student *
serait incorrect dans le contexte du présent code. Peut-être que vous avez voulu dire:sizeof (struct student)
.Sinon, vous pouvez utiliser
sizeof
sur une expression, et vous n'aurez pas besoin de la parenthèse. Ce serait préférable, parce que si vous choisissez de modifier le type destud
ensuite, vous n'aurez pas besoin de remplacer un supplément de typename lorsque vous procédez ainsi:struct student *stud = malloc(10 * sizeof *stud);
struct *student
est une faute de frappe pourstruct student *
. Bien sûr, si vous de toujours utiliser des parenthèses autour de l'argument desizeof()
, vous n'avez pas rencontré de nombreux problèmes.En effet! Je n'avais pas repéré que. Édité. Merci 🙂
OriginalL'auteur autistic