2017-04-22 8 views
0

私は出力を出力するユーザ定義関数を作る方法にちょっと固執しています。私はまた、各ノードのデータを追加して合計を印刷するユーザー定義関数を作成する必要がありますが、正しく加算されていないので、フォーマットも少しずれています。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; 
} 
+1

挿入がうまくいかないのは分かっています:(ここでは、 'here-> next'をどこにでも上書きしないで、つまりリークしません。実際にはリンクされています:) – ThingyWotsit

+0

最初の反復で戻り値を返すときに、関数 'sum'の' for'ループのポイントは何ですか? –

+0

なぜ関数の戻り値の型が 'printout''char'ですか? – BLUEPIXY

答えて

1

あり、エラーの連祷はここですが、ちょうど最も重要な肉に焦点を当ててみましょう:

あなたは

sum(head); // This is how you call most linked list functions. 
すなわち、()関数の和にリストの頭に合格する必要がありますあなたはこれが配列でない

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

にヘッダを変更してくださいすることにより

。リンクされたリストを正しくトラバースする必要があります。

私はすべてのコードを表示することはできません。これは、あなたの教授があなたに教えて欲しいものです。

しかし、あなたはこれらの

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

するのではなく、これらの

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

を使用する必要がありますあなたはまた、

ここにあなたのmalloc-とフィルと-ランドループに前進するのを忘れ= here-> 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); 

コードを空白にするのではなく、まずコードが達成しようとしていることを考えてみてください。 それはあなたを助けるでしょう。がんばろう!

+1

私はそれに気付かなかった。ヒントもありがとう。私はプログラミングで本当に新しいです、そして、これは私の最初の学期でもあります。あなたが私に教えなければならなかったのは残念です。 – Viridian

+0

私の答えを読んで、私の言葉が少しばかげば謝ります。 私はポインタを介し苦しん多くの人々はCS1、およびリンクされたリストは、運悪くその悪夢をreawakenedされる知っている:( 私の経験から、彼らは、アレイへの各操作の類推を行うことによってより速く学びました。 私はあなたがすべてから学ぶ願っていますこれらは:) – Karl

+1

私は本当に私が得ることができるすべてのヘルプに感謝します。 – Viridian

関連する問題