C

时间:2017-04-22 20:38:24

标签: 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;

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;
}

1 个答案:

答案 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);

请首先考虑您的代码将要完成的内容,而不是将代码置于空白处。 它会帮助你很多。祝你好运!