2017-04-22 1 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 = node_sum +s; // what are s and node_sum anyway? 

의 대신이

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

, 합계;

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 알고, 그리고 연결리스트는 불행하게도 내 경험에서 그 악몽 :( 을 재 각성. 난 당신이 모든 배울 희망 이 :) – Karl

+1

그것은 내가 얻을 수있는 모든 도움을 정말로 고맙다. – Viridian