2016-06-17 5 views
-1

Вот мой код. Мне нужно, чтобы пользователь вводил больше полей, а не только val. Это всего лишь код, который я использую для проверки списков, поэтому, например, я хочу, чтобы пользователь добавил val, имя и фамилию. Как мне это сделать? Некоторые термины не написаны на английском языке, но я думаю, что общая часть кода понятна.Как добавить еще поле в список

#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

Если вы хотите ввести больше полей, то вам нужно ввести их в свой узел. Прямо сейчас, в вашем узле есть только элемент val, который имеет тип int и указатель на следующий узел. Если вы хотите, чтобы пользователь вводил имя или фамилию, вам нужно объявить их внутри узла. Ваша структура должна выглядеть следующим образом:

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

Но, к примеру, мне нужно иметь «темп» для каждого из них? – 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 ("\ nInserisci valore:"); scanf ("% d", & head-> val); printf ("\ nInserisci name:"); получает (head-> name); printf ("\ nInserisci surname:"); получает (head-> фамилия); nuovo-> val = valore; nuovo-> next = head; head = nuovo; return nuovo; }; он падает после имени ... – ennedes

Смежные вопросы