C语言中的用户定义函数和链表

C语言中的用户定义函数和链表,c,linked-list,C,Linked List,我有点被困在如何制作一个用户定义的函数来打印输出上。我还必须创建一个用户定义的函数,将每个节点中的数据相加并打印出总数,但相加不正确,格式也有点不正确 #include <stdio.h> #include <stdlib.h> #include <time.h> char printout(); int sum(); typedef struct node { int number; struct node*next; } node; c

我有点被困在如何制作一个用户定义的函数来打印输出上。我还必须创建一个用户定义的函数,将每个节点中的数据相加并打印出总数,但相加不正确,格式也有点不正确

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

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; i<100; i++)
    {
        here->next=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;
}
#包括
#包括
#包括
字符打印输出();
int sum();
类型定义结构节点
{
整数;
结构节点*下一步;
}节点;
字符打印输出()
{
};
整数和()
{
int s,sum_all=0,node_sum=0;
对于(s=0;s=100;s++)
{
sum\u all=节点\u sum+s;
返回printf(“所有节点的总和为%d.\n”,全部总和);
};
};
int main()
{
srand(时间(空));
int i,总计=0;
结构节点*head=malloc(sizeof(结构节点));
head->number=rand()%100;
printf(“节点#%d包含%d。\n”,0,头部->编号);
结构节点*此处=头部;
对于(i=1;inxt=malloc(sizeof(struct node));
此处->编号=rand()%100;
printf(“节点#%d包含%d。\n”,i,here->number);
};
总数=总和(此处->数字);
printf(“%2.2d”,总计);
返回0;
}

这里有一连串的错误,但让我们只关注最重要的部分:

您应该将列表的头传递给函数sum(),即

您应该通过它将标题更改为

int sum(struct node *head)
{ ... }
这不是数组。应正确遍历链接列表

我不能为你展示所有的代码,因为这是你的教授想要你学习的

但是你应该用这些

for( struct node*p = head; p!=NULL; p=p->next)
而不是这些

for( s=0; s<=100; s++)
而不是

sum_all = node_sum +s; // what are s and node_sum anyway?
还有,如果你坚持要sum归还一些东西, 它应该返回,嗯,总数

return sum_all;
不要在函数内部打印它

printf("The sum of all nodes is %d.\n",sum_all); // please don't
因为你已经在外面打印了

total = sum(head);
printf("%2.2d", total);
请试着先想想你的代码将要完成什么,而不是把代码放在空白处。
这将对你有很大帮助。祝你好运!

我不知道插入是如何工作的:(你在循环中每次都覆盖“here->next”,而不将其存储在任何地方,即泄漏。链表的问题是,元素必须实际链接:)当你在第一次迭代中执行返回时,函数
求和中的
循环的
意义何在!为什么函数
打印输出的返回类型是
字符
呢?我甚至没有注意到这些。也感谢你的提示。我对编程非常陌生,这也是我的第一个学期,很抱歉你这么做了d来教我。回读我的答案,如果我的话有点言不由衷,我很抱歉,混蛋。我知道很多人遭受指针攻击的是CS1,而链表不幸地再次唤醒了那场噩梦:(根据我的经验,他们通过将每个操作与数组进行类比来学习得更快。我希望你能从中学习:)没问题,我真的很感激能得到的所有帮助。
printf("The sum of all nodes is %d.\n",sum_all); // please don't
total = sum(head);
printf("%2.2d", total);