2017-03-12 25 views
0

これで、scanf(cmd入力リダイレクト)を使用してtxtファイルの要素を読み取るプログラムを作成しています。ファイル内のすべてのエントリに対して新しいノードを作成し、リストの末尾に追加する必要があります。ここに私のコードは、これまでのところです:それを初期化します.txtファイルの各エントリに新しいノードを作成します。

struct Elem{ 
    int Atnum; 
    char Na[31]; 
    char Sym[4]; 
}; 


struct nodeTag { 
    struct Elem entry; 
    struct nodeTag *pNext; // pointer to the next node 
}; 

typedef struct nodeTag Node; 

機能はこれです:

Node * 
InitializeList(Node *pFirst, int n) 
{ 
    int i; 
    Node *head, *temp = 0; 

    pFirst = 0; 

    for (i=0; i<n; i++){ 
     head = (Node *)malloc(sizeof(Node)); 
     scanf("%d", &head->entry.AtNum); 
     scanf("%s", head->entry.Na); 
     scanf("%s", head->entry.Sym); 

     if (pFirst != 0) 
     { 
      temp->pNext = head; 
      temp = head; 
     } 
     else 
     { 
      pFirst = temp = head; 
     } 
     fflush(stdin); 
     temp->pNext = 0; 
    } 

    return pFirst; 
} 

そして最後に、今

void 
Print(Node *pFirst) 
{ 
    Node *temp; 
    temp = pFirst; 
    printf("\n status of the linked list is\n"); 
    while (temp != 0) 
    { 
     printf("%d %s %s", temp->entry.AtNum, temp->entry.Na, temp->entry.Sym); 
     temp = temp -> pNext; 
    } 

} 

にそれを印刷し、私はプログラムを取得することはできません適切に実行する。実行時エラーは発生しませんが、出力はゴミと思われます。私はこれのために何時間も働いていて、私はその頭の中に頭を浮かべていません。ご協力ありがとうございました!

+1

逆順に並べるので、 'InitializeList()'から* pFirst *ではなく* temp *を返す必要があります。そして、 'temp-> pNext = 0;'と 'pFirst = temp'という行の上に与えられたものは間違っています。 – 0andriy

+0

[fflush(stdin) 'の使用](http://stackoverflow.com/questions/2979209/using-fflushstdin)に注意してください。あなたがWindows上にいなければ、必ずしもあなたが望む/期待していることはしません。 –

+0

お元気ですか、あなたはまだ返信していないと言いましたので、あなたは私の答えについてのフィードバックをくれますか?私はあなたを助ける準備ができている – UrbiJr

答えて

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

struct Elem 
{ 
    int AtNum; 
    char Na[31]; 
    char Sym[4]; 
}; 

struct nodeTag 
{ 
    /* entry must be a pointer in order to not lose the values 
    and/or encounter memory conflicting errors 
    */ 
    struct Elem *entry; 
    struct nodeTag *pNext; 
}; 

typedef struct nodeTag Node; 

// insert node at the first location 
Node *insertFirst(Node *head, struct Elem *data) 
{ 

    Node *node = (Node *) malloc(sizeof(Node)); 

    // fill in data 
    node->entry = data; 

    /* point it to old first node 
     in simple words: "put this node before the head" 
    */ 
    node->pNext = head; 

    // point first to new first node 
    head = node; 

    return head; 

} 

Node *InitializeList(int n) 
{ 
    int i; 
    Node *head = NULL; 
    struct Elem *data; 

    for (i = 0; i < n; i++) 
    { 
     // allocate memory for the struct Elem of each node 
     data = (struct Elem*) malloc(sizeof(struct Elem)); 
     scanf("%d", &data->AtNum); 
     scanf("%s", data->Na); 
     scanf("%s", data->Sym); 
     head = insertFirst(head, data);   
    } 

    return head; 
} 

//display the list 
void printList(Node *head) 
{ 
    Node *ptr = head; 

    printf("\nStatus of the linked list is:\n"); 

    //start from the beginning 
    while(ptr != NULL) 
    { 
     printf("%d %s %s", ptr->entry->AtNum, ptr->entry->Na, ptr->entry->Sym); 
     printf("\n"); 
     ptr = ptr->pNext; 
    } 

} 

int main(int argc, char *argv[]) 
{ 
    Node *head; 

    head = InitializeList(3); 
    printList(head); 

    return 0; 
} 

私はあまりにも遅く来なかったことを願っています!そうでない場合は、解決策としてこの回答を確認してください、ありがとう! :-)

関連する問題