2016-06-17 18 views
-1

ここに私のコードです。 valだけでなく、より多くのフィールドを入力させる必要があります。 これは、リストをテストするために使用しているコードなので、例としてval、name、およびsurnameを追加します。どうしたらいいですか? いくつかの用語は英語ではありませんが、コード全体が明確だと思います。リストにフィールドを追加するには

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


    struct lista{ 
    int val; 
    struct lista *next; 
    }Lista; 

    struct lista* crea(struct lista* head); 
    void stampa(struct lista* testa); 

    int main() 
    { 
    struct lista *head=NULL; 
    int insert=0; 

    while(1){ 
     printf("\n *** MENU ***\n 1.Add in list\n 2.Print\n 3.Exit\n\n Input: "); 
     scanf("%d", &insert); 
     switch(insert){ 
      case 1: 
       head = crea(head); 
       break; 
      case 2: 
       stampa(head); 
       break; 
      case 3: 
       exit(1); 
      default: 
       printf("\n Errore: scelta non valida!\n"); 
       break; 
      } 
    } 


    return 0; 
} 

struct lista* crea(struct lista* head){ 
    struct lista *nuovo=NULL; //sarà la nuova head 
    int valore=0; 
    nuovo = (struct lista*)malloc(sizeof(struct lista)); 
    printf("\nValue: "); 
    scanf("%d", &valore); 
    nuovo->val=valore; 
    nuovo->next=head; 
    head = nuovo; 
    return nuovo; 
}; 

void stampa(struct lista* head){ 
    struct lista* temp=NULL; 
    temp = head; 

    while(temp != NULL){ 
     printf("\nvalore: %d\n", temp->val); 
     temp = temp->next; 

    } 
} 
+0

フィールドを追加して、ユーザーにそれらのデータを入力させるだけです。 – MikeCAT

+0

私はして、それはクラッシュした。たぶん正しい方法ではなかったかもしれません(?) – ennedes

+2

クラッシュしたコードを表示します。また、クラッシュが何だったのか、デバッガの下で実行して自分で修復しようとしたのですか? – pm100

答えて

1

ノードに入力するよりも多くのフィールドを入力する場合は、入力する必要があります。今のところ、あなたのノードではint型の要素valと次のノードへのポインタだけです。名前や姓を入力する場合は、ノード内で宣言する必要があります。あなたの構造体は次のようになります。あなたの関数に比べ

struct lista{ 
    int val; 
    char name[20]; 
    char surname[30]; 
    struct lista *next; 
    }Lista; //if you are not typedefing than you dont need this name because you are just making the global node you will not use 

をちょうど(ものは文字列で世話をする)あなたはvalのためにやったように名と姓をユーザーに尋ねると、あなたのリストに追加します。

+0

しかし、しばらくの間、それぞれの "temp"が必要ですか? – ennedes

+0

ノードを作成するには1 tempを使用する必要がありますが、作成するノードは構造体と同じですので、ノードを塗りつぶしているときに直接入力できます:scanf( "%d"、&head - > val);または取得する(head - > name);毎回scanfの一時変数は必要ありません。 –

+0

'struct lista * crea(struct lista * head){ struct lista * nuovo = NULL; //saràla nuova head int valore = 0; nuovo =(struct lista *)malloc(sizeof(struct lista)); printf( "\ nインサーチバルコア:"); scanf( "%d"、&head-> val); printf( "\ nInserisci名:"); gets(head-> name); printf( "\ nInserisci surname:"); gets(head-> surname); nuovo-> val = valore; nuovo-> next = head; head = nuovo; return nuovo; }; 'それは名前の後にクラッシュする... – ennedes

関連する問題