Здравствуйте. Вот написала одну программку(как ни странно, практически хорошо работающую
). Но вот есть одна маленькая проблемка. При повторном использовании функции введения с консоли она пропускает и не берет первую строку. Выход в принципе я нашла(если расскоментировать строку в addx то при первом использовании функции необходимо нажать enter а при последующих оно будет игнорировать именно эту строку и данные вводяться хорошо). Но вот в чем проблема как таковая я не поняла. Может кто нибудь на досуге вдруг захочет объяснить непонятливой студентке-первокурснице, какого рода полтергейст поселился в мей замечательной програмке?
Буду очень благодарна.
Вот код.
[codebox]
# include <iostream>
#include <string>
using namespace std;
class List
{
public:
struct ListItem
{
string punkt;
int nomer;
string FIO;
int den;
int mesac;
int god;
ListItem *Next;
};
ListItem *First;
public:
List(){
First=NULL;
}
List(ListItem *a)
{
First=a;
}
ListItem* addx (ListItem *a)//добавление элемента в список из проги
{
ListItem * ref=new ListItem;
ref->den=a->den;
ref->god=a->god;
ref->mesac=a->mesac;
ref->nomer=a->nomer;
ref->punkt=a->punkt;
ref->FIO=a->FIO;
ref->Next=First;
First=ref;
return First;
}
ListItem* addx()//добавление элемента в список из консоли
{
ListItem * ref=new ListItem;
//string str;
getline(cin,str);
cout<<"\nВведите Фамилию и инициалы заказчика:\n";
getline(cin,str);
ref->FIO=str;
cout<<"\nВведите пункт назначения:\n";
getline(cin,str);
ref->punkt=str;
cout<<"\nВведите номе рейса:\n";
cin>>ref->nomer;
cout<<"\nВведите дату:\n\tдень:";
cin>>ref->den;
cout<<"\n\tмесяц:";
cin>>ref->mesac;
cout<<"\n\tгод:";
cin>>ref->god;
ref->Next=First;
First=ref;
return First;
}
void List::InsertFirst(ListItem *w)//вставить в начало списка
{
ListItem *a=new ListItem;
a->punkt=w->punkt;
a->nomer=w->nomer;
a->FIO=w->FIO;
a->mesac=w->mesac;
a->den=w->den;
a->god=w->god;
a->Next=First;
First=a;
}
void deleteThis (ListItem *a)//удаление определенного элемента
{
try
{
ListItem *A=new ListItem;
A=NULL;
ListItem *p=new ListItem;
ListItem *i=new ListItem;
p=First;
i=p->Next;
if((p->FIO==a->FIO)&&(p->nomer==a->nomer)&&(p->den==a->den)&&(p->mesac==a->mesac)&&(p->god==a->god))
{
First=First->Next;
delete p;
}
else
{
while (i!=NULL)
{
if((i->FIO==a->FIO)&&(i->nomer==a->nomer)&&(i->den==a->den)&&(i->mesac==a->mesac)&&(i->god==a->god))
A=p;
p=p->Next;
i=i->Next;
}
ListItem *tmp=A->Next;
if (tmp==NULL)
throw "Нет элемента, коиорый требуется удалить!\n";
A->Next=tmp->Next;
delete tmp;
}
}
catch (char*)
{cout<<"Нет элемента, который требуется удалить!\n";}
}
void PrintData(int d,int m,int g)//поиск элементов по дате
{
int c=0;
ListItem *q;
q=First;
if (q==NULL)
cout<<"Список пуст!\n";
else
while (q!=0)
{
if((q->den==d)&&(q->mesac==m)&&(q->god==g))
{
cout<<q->FIO<<endl<<q->punkt<<endl<<q->nomer<<endl<<q->den<<"."<<q->mesac<<"."<<q->god<<"\n********\n";
c++;
}
q=q->Next;
}
if(c==0)
{
cout<<"Такого элемента нет!\n";
}
}
void PrintList()//распечатка всех элементов
{
ListItem *p=First;
int n=1;
if(p==NULL)
cout<<"Лист пуст\n";
else
while(p)
{
cout<<n<<":"<<p->FIO<<endl<<p->punkt<<endl<<p->nomer<<endl<<p->den<<"."<<p->mesac<<"."<<p->god<<"\n********\n";
n++;
p=p->Next;
}
}
};
int main()
{
setlocale (LC_ALL,".1251");
List:: ListItem a={"Англия",876,"ТТТ",17,10,2010};
List::ListItem b={"Франция",123,"MMM",17,8,2009};
List:: ListItem *r,*y;
r=&a;
y=&b;
List t®;
List list1;
list1.PrintList();
list1.addx®;
list1.addx®;
list1.PrintList();
cout<<"Добавление элемента\n";
list1.addx
;
list1.PrintList();
cout<<"Удаление элемента\n";
list1.deleteThis®;
list1.PrintList();
cout<<"Поиск элемента\n";
list1.PrintData(17,8,1990);
cout<<"**********************************\n";
t.PrintList();
list1.PrintList();
cout<<"***********NEW**********\n";
list1.addx();//добавляем в список данные сконсоли
list1.addx();
list1.PrintList();
return 0;
}
[/codebox]
Если кому-то интересно условие, то вот оно
[codebox]
Составить программу, которая содержит текущую информацию о заявках на авиабилеты.
Каждая заявка содержит:
• Пункт назначения;
• Номер рейса;
• Фамилию и инициалы пассажира;
• Желаемую дату вылета.
Программа должна обеспечивать:
• Хранение всех заявок;
• Добавление заявок в список;
• Удаление заявок;
• Вывод заявок по заданному номеру рейса и дате вылета;
• Вывод всех заявок.
Организовать ввод с консоли(можно на английском языке.
[/codebox]