C ++ Struct узел, как вставить строку и удалить конкретный узел?

0

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

#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() ?
Теги:

2 ответа

0
Лучший ответ

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

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

  • 0
    printf («Вставить имя клиента:»); std :: string name; std :: getline (std :: cin, name); (Insertnode-> CusName, имя); я попробовал это .. но в конечном итоге на выходе он показывает какой-то странный символ. или, может, я написал с неправильным путем? или когда я ошибся, когда вставить его в узел?
  • 0
    То, что вы делаете, правильно, проблема сейчас где-то в другом месте.
Показать ещё 1 комментарий
0

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

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

  • 0
    мой код теперь функционирует уже ... теперь осталась только одна ошибка ... что происходит при удалении первого узла ... у него есть ошибка ... могу ли я отправить вам свой код, а вы помогаете мне проверить?
  • 0
    конечно. отправьте его на [email protected]. не забудьте упомянуть вашу проблему

Ещё вопросы

Сообщество Overcoder
Наверх
Меню