2015-04-05 4 views
1

Так что у меня возникла проблема с моим кодом со структурой, которую я использую. Я бы хотел, чтобы моя структура могла добавлять, извлекать или сортировать, но у меня возникает много проблем с . структура Это будет работать, если я использую только номер, но мне нужно пользователь 3 строки One для FirstName, и фамилии PHONENUMBER, но я не могу понятьLinkedList with Char (String Issue

Это код, который я имею сейчас:..

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

struct node 
{ 
    int data; 
    char first[15]; 
    char last[15]; 
    char phone[12]; 
    struct node *next; 
}*head; 



void append(int num, char f[15], char l[15],char p[12]) 
{ 
    struct node *temp, *right; 
    temp = (struct node *)malloc(sizeof(struct node)); 
    temp->data = num; 
    strcpy(temp->first, f); 
    strcpy(temp->last, l); 
    strcpy(temp->phone, p); 
    right = (struct node *)head; 
    while (right->next != NULL) 
     right = right->next; 
    right->next = temp; 
    right = temp; 
    right->next = NULL; 
} 



void add(int num, char f[15], char l[15],char p[12]) 
{ 
    struct node *temp; 
    temp = (struct node *)malloc(sizeof(struct node)); 
    temp->data = num; 
    strcpy(temp->first, f); 
    strcpy(temp->last, l); 
    strcpy(temp->phone, p); 
    if (head == NULL) 
    { 
     head = temp; 
     head->next = NULL; 
    } 
    else 
    { 
     temp->next = head; 
     head = temp; 
    } 
} 
void addafter(int num, char f[15], char l[15],char p[12],int loc) 
{ 
    int i; 
    struct node *temp, *left, *right; 
    right = head; 
    for (i = 1; i<loc; i++) 
    { 
     left = right; 
     right = right->next; 
    } 
    temp = (struct node *)malloc(sizeof(struct node)); 
    temp->data = num; 
    strcpy(temp->first, f); 
    strcpy(temp->last, l); 
    strcpy(temp->phone, p); 
    left->next = temp; 
    left = temp; 
    left->next = right; 
    return; 
} 



void insert(int num, char f[15], char l[15],char p[12]) 
{ 
    int c = 0; 
    struct node *temp; 
    temp = head; 
    if (temp == NULL) 
    { 
     add(num,f,l,p); 
    } 
    else 
    { 
     while (temp != NULL) 
     { 
      if (temp->data<num) 
       c++; 
      temp = temp->next; 
     } 
     if (c == 0) 
      add(num,f,l,p); 
     else if (c<count()) 
      addafter(num,f,l,p, ++c); 
     else 
      append(num,f,l,p); 
    } 
} 



int delete(int num) 
{ 
    struct node *temp, *prev; 
    temp = head; 
    while (temp != NULL) 
    { 
     if (temp->data == num) 
     { 
      if (temp == head) 
      { 
       head = temp->next; 
       free(temp); 
       return 1; 
      } 
      else 
      { 
       prev->next = temp->next; 
       free(temp); 
       return 1; 
      } 
     } 
     else 
     { 
      prev = temp; 
      temp = temp->next; 
     } 
    } 
    return 0; 
} 


void display(struct node *r) 
{ 
    r = head; 
    if (r == NULL) 
    { 
     return; 
    } 
    while (r != NULL) 
    { 
     printf("%d ", r->data); 
     r = r->next; 
    } 
    printf("\n"); 
} 


int count() 
{ 
    struct node *n; 
    int c = 0; 
    n = head; 
    while (n != NULL) 
    { 
     n = n->next; 
     c++; 
    } 
    return c; 
} 


int main() 
{ 
    int i, num; 
    char fname[15], lname[15], phone[12]; 
    struct node *n; 
    head = NULL; 
    while (1) 
    { 
     printf("\nList Operations\n"); 
     printf("===============\n"); 
     printf("1.Insert\n"); 
     printf("2.Display\n"); 
     printf("3.Retrieve\n"); 
     printf("4.Delete\n"); 
     printf("5.Exit\n"); 
     printf("Enter your choice : "); 
     if (scanf("%d", &i) <= 0){ 
      printf("Enter only an Integer\n"); 
      exit(0); 
     } 
     else { 
      switch (i) 
      { 
      case 1:  
       printf("Enter the id, first, last and phone (Separte with space) : "); 
       scanf("%d %s %s %s", &num,fname,lname,phone); 
       insert(num,fname,lname,phone); 
       break; 
      case 2:  
       if (head == NULL){ 
        printf("List is Empty\n"); 
       }else{ 
        printf("Element(s) in the list are : "); 
       } 
       display(n); 
       break; 
      case 3:  
       //To be made 
       //scanf("Retrieve this : %d\n", count()); 
       break; 
      case 4:  
       if (head == NULL){ 
        printf("List is Empty\n"); 
       }else{ 
        printf("Enter the number to delete : "); 
        scanf("%d", &num); 
        if (delete(num)) 
         printf("%d deleted successfully\n", num); 
        else 
         printf("%d not found in the list\n", num); 
       } 
       break; 
      case 5:  
       return 0; 
      default:  
       printf("Invalid option\n"); 
      } 
     } 
    } 
    return 0; 
} 

Спасибо за всех, кто мог бы объяснить мне проблему и/или устранить ее.

ответ

0

Везде, где у вас есть:

temp->data = num; 

добавить строки

strcpy(temp->first, f); 
strcpy(temp->last, l); 
strcpy(temp->phone, p); 
+0

Теперь программа работать благодаря вам. Но сразу, когда я добавляю что-то вставить. Мне нравится 1 тестовый тест 132-456-7891, и после этого он ничего не делает. Когда я ввожу что-то еще, программа сбой. –

+0

Я исправил его спасибо! –

+0

@ Жан-Матье, это здорово. –