2016-06-17 3 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과 다음 노드에 대한 포인터입니다. 사용자가 이름이나 성을 입력하도록하려면 노드 내부에서 이름이나 성을 선언해야합니다. 귀하의 구조체는 다음과 같이한다 : 단지 이름과 성 (姓)에 대한 사용자 요청하고 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 

함수보다 (알아서 사람들이 문자열).

+0

그러나 예를 들어 잠시 동안 각각의 "temp"가 필요합니까? – ennedes

+0

노드를 만들기 위해 1 개 온도를 사용해야하지만, 당신이 만드는 노드는 노드를 채우기 위해 노력하고 그렇게 할 때 구조체와 동일합니다, 당신은 예를 들어 직접 입력 할 수는 scanf ("% d 개", & 머리를 -> val); 또는 gets (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 name :"); gets (head-> name); printf ("\ n 인슐린 성"); gets (head-> surname); nuovo-> val = valore; nuovo-> next = head; head = nuovo; return nuovo; 가} 대신 그 사용 온도의> 이름 - - -> 발 또는 머리 '그것은 이름 ... – ennedes

관련 문제