2013-11-24 3 views
0

Любой может помочь с моим кодом? im не удалось вставить строковый текст с пробелом. , кроме этого .. функция удаления для удаления последнего узла не работает хорошо. в основном это двусвязный список, сохраняющий 3 элемента в узле, который представляет собой 2 строки и 1 integer.it требует, чтобы пользователь вводил каждый элемент и поместите его в узел. * как мне нужно объявить строку Cusname внутри struct node?Узел C++ Struct, как вставить строку и удалить определенный узел?

#include <stdio.h> 
#include <stdlib.h> 
#include <iostream> 
#include <string> 
using std::string; 


void AddToStart(); 
void RemoveNodeAt(); 
void createlist(); 
void PrintList(); 
void AddToEnd(); 
void menu(); 
int option,num; 
char name[50], tran[200], delname[50]; 

struct node 
{ 
    struct node *previous; 
    char CusName[50]; 
    int Customer_Number; 
    char Trans[200]; 
    struct node *next; 
}*insertnode,*list,*next,*prev,*temp,*tmpdisplay,*del,*Lnode; 


void main() 
    { 
createlist(); 

do 
{ 
    menu(); 
    switch (option) 
    { 
    case 1: AddToStart();break; 
    case 2: AddToEnd();break; 
    case 3: PrintList();break; 
    case 4: RemoveNodeAt();break; 
    case 5: exit(1);break; 
    } 
}while (option !=5); 

} 

void createlist() 
{ 
    list=NULL; 

} 

void menu() 
{ 
printf("\n=====================================================\nCustomers' Transactions\n"); 
printf("1-- Insert at Begining\n"); 
printf("2-- Insert at End\n"); 
printf("3-- Print List\n"); 
printf("4-- Remove a Customer\n"); 
printf("5-- Quit Programe\n"); 
printf("Select your option : "); 
scanf("%d",&option); 
} 
void AddToStart() 
{ 
insertnode=(struct node*) malloc (sizeof(struct node)); 


printf("Insert Customer Name : "); 
scanf("%s",&name); 
strcpy(insertnode->CusName,name); 
printf("Insert Customer Number : "); 
scanf("%d",&num); 
insertnode->Customer_Number=num;  
printf("Enter Customer Transaction Description : \n"); 
scanf("%s",&tran); 
strcpy(insertnode->Trans,tran); 

insertnode->next=NULL; 
insertnode->previous=NULL; 
if (list==NULL) 

    list=insertnode; 

else 
    { 
     insertnode->next=list; 
     list=insertnode; 

} 
} 


void RemoveNodeAt() 
{ 
    printf("Customer to delete : "); 
    scanf("%s",delname); 

    if (list==NULL) 
    printf("\nList is empty \n\n"); 

    else 
    { 

     if (strcmp(delname,list->CusName)==0) //only first node 
      //list=NULL; 
      printf("DONE"); 

     else if (strcmp(delname,Lnode->CusName)==0)//last node 
      Lnode->previous->next =NULL; 

     else 

      del=list; 
      while (strcmp(del->CusName,delname)!=0) 
      { 
       prev=del; 
       del=del->next; 
      } 
      { 
      prev->next=prev->next->next; 
      del->next=del->previous; 
      } 

    } 
} 
+0

Что такое проблема с 'RemoveNodeAt()'? – theharshest

ответ

0

Для того, чтобы строки с пространством в качестве входных данных, вы можете использовать getline

http://www.cplusplus.com/reference/string/string/getline/

+0

printf («Вставить имя клиента:»); std :: string name; std :: getline (std :: cin, name); (insertnode-> CusName, имя); Я пробовал это ... но в конечном итоге вывод его показывает какой-то странный символ. или mayb я написал неправильно, или когда я ошибся, когда вставляем его в узел? – user3026515

+0

Что вы делаете правильно, вопрос сейчас где-то еще. – theharshest

+0

спасибо .. hmm..any idea? Am Я правильно определяю узел? Я имею в виду это (insertnode-> CusName, name); – user3026515

0

вы можете использовать получает(); а также получить строку с пробелами. Вы можете подробнее рассказать о проблеме с удалением узлов.

также вы можете посетить http://basiccodings.blogspot.in/

+0

мой код теперь функционирует уже .. теперь левая только одна ошибка..что при удалении первого узла .. у него есть ошибка ... может мне нравится отправить u мой код, и вы поможете мне проверить? – user3026515

+0

уверен. отправьте его на адрес [email protected] не забудьте указать вашу проблему –

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