2017-03-29 4 views
0

2つの整数で構成されるノードでリンクリストを作成するプログラムを作成しようとしています。それはノードの数を求めます。Cでリンクリストを作成しようとしましたが、要求されたノードの半分しか作成されていません。

偶数のノードを入力すると、プログラムはその半分しか作成しませんが、奇数を入力するとノードの半分の後でクラッシュします。ここで

は私のコードです:

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

struct node{ 

    int student; 
    int exam; 
    struct node *link; 
}; 

int main(void){ 

    int student_num, exam_num, node_num, i; 
    struct node *start; 
    struct node *next; 
    struct node *temp; 

    printf("How many nodes?: "); 
    scanf("%d",&node_num); 


    temp = malloc(sizeof(struct node)); 
    start = temp; 

    start->link = NULL; 

    next = start; 

    //Creates node_num nodes 
    for(i=1;i<=node_num;i++){ 

     temp = malloc(sizeof(struct node)); 

     next->link=temp; 

     next=temp; 
     next->link=NULL; 
    } 

    next=start->link; 

    //Fills in the numbers 
    for(temp=start;temp->link!=NULL;temp=next->link){ 

     printf("\nStudent number: "); 
     scanf("%d",&student_num); 

     temp->student=student_num; 

     printf("Exam number: "); 
     scanf("%d",&exam_num); 

     temp->exam=exam_num; 

     next=temp->link; 
    } 

    next=start->link; 

    //Shows the result 
    for(temp=start;temp->link!=NULL;temp=next->link){ 

     printf("\nStudent number: %d\tExam number: %d\n",temp->student,temp->exam); 
     next=temp->link; 
    } 
} 
+0

デバッガでコードをステップ実行し、変数が間違っているかどうかを確認します。 – Barmar

答えて

1

あなたは二回、リスト内の次のノードになるだろう。あなたはfor()ループヘッダでそれを行う:

ループの底に
for(temp=start;temp->link!=NULL;temp=next->link){ 
           ^^^^^^^^^^^^^^^ 

とも:

next=temp->link; 

ただ、どちらか一方ではなく、両方を行います。ヘッダーを次のように変更します。

for(temp=start;temp->link!=NULL;temp=temp->link){ 

末尾の行を削除します。

0

私はあなたのプログラムを修正しました。あなたはn + 1ノードを作成しようとしていて、間違った方法で反復していました。あなたがNULL値に達するまで、開始と停止から1つの変数を使用してください。もしあなたがそれの一部を理解していないのならば教えてください。

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

struct node{ 

    int student; 
    int exam; 
    struct node *link; 
}; 

int main(void){ 

    int student_num, exam_num, node_num, i; 
    struct node *start; 
    struct node *next; 
    struct node *temp; 

    printf("How many nodes?: "); 
    scanf("%d",&node_num); 

    if(node_num == 0) { 
     return 0; 
    } 

    temp = (node*)malloc(sizeof(struct node)); 
    start = temp; 

    start->link = NULL; 

    next = start; 

    //Creates node_num nodes 
    for(i=1;i<node_num;i++){ 

     temp = (node*)malloc(sizeof(struct node)); 

     next->link=temp; 

     next=temp; 
     next->link=NULL; 
    } 

    //Fills in the numbers 
    for(temp=start;temp!=NULL;temp=temp->link){ 

     printf("\nStudent number: "); 
     scanf("%d",&student_num); 

     temp->student=student_num; 

     printf("Exam number: "); 
     scanf("%d",&exam_num); 

     temp->exam=exam_num; 

    } 

    //Shows the result 
    for(temp=start;temp!=NULL;temp=temp->link){ 

     printf("\nStudent number: %d\tExam number: %d\n",temp->student,temp->exam); 
    } 

} 
関連する問題