我对如何创建一个打印输出的用户定义函数有点困惑。我还必须创建一个用户定义的函数,它将在每个节点中添加数据并打印出总数,但它没有正确加起来,格式也有点偏差。
#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;
}
答案 0 :(得分:1)
这里有一连串的错误,但我们只关注最重要的肉类:
您应该将列表的头部传递给函数sum(),即
sum(head); // This is how you call most linked list functions.
您应该将标题更改为
int sum(struct node *head)
{ ... }
这不是一个数组。您应该正确遍历链接列表。
我无法为您显示所有代码,因为这是您的教授希望您学习的内容。
但你应该使用这些
for( struct node*p = head; p!=NULL; p=p->next)
而不是这些
for( s=0; s<=100; s++)
你也忘记了在malloc-and-fill-with-rand循环中前进
here = here-&gt; next; //在链表中这是我在++中做的数组
和这个
sum_all += p->number; // p->number is analogous to array[i]
而不是
sum_all = node_sum +s; // what are s and node_sum anyway?
另外,如果你坚持要求退还一些东西, 它应该返回,总和;
return sum_all;
不要在函数
中打印printf("The sum of all nodes is %d.\n",sum_all); // please don't
因为你已经在外面打印了。
total = sum(head);
printf("%2.2d", total);
请首先考虑您的代码将要完成的内容,而不是将代码置于空白处。 它会帮助你很多。祝你好运!