Fonctions définies par l’utilisateur et listes liées en C

Je suis un peu coincé sur la façon de créer une fonction définie par l’utilisateur pour imprimer la sortie. Je dois également créer une fonction définie par l’utilisateur qui additionnera les données de chaque nœud et imprimera le total, mais l’addition ne correspond pas correctement et le format est également légèrement différent.

#include  #include  #include  char printout(); int sum(); typedef struct node { int number; struct node*next; } node; char printout() { }; int sum() { int s,sum_all=0, node_sum=0; for(s=0;s=100;s++) { sum_all=node_sum+s; return printf("The sum of all nodes is %d.\n",sum_all); }; }; int main() { srand (time(NULL)); int i, total=0; struct node*head=malloc(sizeof(struct node)); head->number = rand()%100; printf("Node #%d contains %d.\n", 0, head->number); struct node*here=head; for (i=1; inext=malloc(sizeof(struct node)); here->number=rand()%100; printf("Node #%d contains %d.\n", i, here->number); }; total=sum(here->number); printf("%2.2d", total); return 0; } 

Il y a ici une multitude d’erreurs, mais concentrons-nous simplement sur la viande la plus importante:

Vous devriez passer la tête de la liste à la fonction sum (), c.-à-d.

 sum(head); // This is how you call most linked list functions. 

par lequel vous devriez changer l’en-tête à

 int sum(struct node *head) { ... } 

Ce n’est pas un tableau. Vous devez parcourir correctement la liste liée.

Je ne peux pas vous montrer tout le code, car c’est ce que votre professeur souhaite que vous appreniez.

Mais vous devriez utiliser ces

 for( struct node*p = head; p!=NULL; p=p->next) 

au lieu de ceux-ci

 for( s=0; s<=100; s++) 

Vous avez également oublié d'avancer dans votre boucle malloc-and-fill-with-rand

ici = ici-> suivant; // cela fait dans les listes liées ce que i ++ fait dans les tableaux

et ça

 sum_all += p->number; // p->number is analogous to array[i] 

au lieu de

 sum_all = node_sum +s; // what are s and node_sum anyway? 

En outre, si vous insistez pour que la sum retourne quelque chose, elle devrait retourner, eh bien, la sum;

 return sum_all; 

Et ne l'imprimez pas dans la fonction

 printf("The sum of all nodes is %d.\n",sum_all); // please don't 

Parce que vous l'imprimez déjà à l'extérieur.

 total = sum(head); printf("%2.2d", total); 

Essayez d’abord de penser à ce que votre code va accomplir au lieu de le mettre à blanc. Cela vous aidera beaucoup. Bonne chance!