У меня есть база данных связанных списков с использованием шаблонов, которые компилируются отлично и позволяет мне распечатывать список всех состояний и позволяет мне искать человека и печатать все данные этих лиц (поскольку эти методы работают, Я оставил их ниже, чтобы сэкономить место).Операции со связанными списками C++
Ниже у меня есть метод print_people_in_state
, что мне нужно, чтобы сделать это (с учетом пользовательского ввода состояния) распечатать информацию обо всех людях из этого конкретного состояния. Однако сейчас, когда я запускаю его, ничего не происходит. Как я могу это исправить?
Если вы хотите запустить код самостоятельно здесь ссылку на файл, который я назвал data.txt (http://rabbit.eng.miami.edu/class/een118/labs/152/dbfile1.txt)
#include <iostream>
#include <string>
#include <string.h>
#include <fstream>
using namespace std;
struct person
{
int dob,ss_number;
string fname, lname,state;
person()
{ }
person(int a, int b, string c, string d, string e)
{dob=a; ss_number=b; fname=c; lname=d; state=e;}
};
struct state
{
string sname;
person*P;
state()
{}
state(string a)
{sname=a;}
};
template<typename T>struct Link
{
T*data;
Link*extradata;
Link*next;
Link()
{}
Link(T*a,Link<T>*C=NULL)
{
data=a;
next=C;
}
};
template<typename T>
struct List
{int length;
Link<T>*Head,*tail;
List(Link<T>*h=NULL, Link<T>*t=NULL)
{
Head=h;
tail=t;
length=0;
}
void add(T*object)
{
{ if (Head == NULL && tail == NULL)
{ Link<T> * newlink = new Link<T>(object);
Head = newlink;
tail = Head; }
else
{ Link<T> * newlink = new Link<T>(object);
tail->next = newlink;
tail=newlink;} }
}
void print_people_in_state(string search)
{
Link<state>*temp=Head;
if(temp!==NULL)
{
if(temp->data->P->state==search)
{
cout<<temp->data->P->fname<<endl;
}
// temp=temp->next;
}}
};
List<person>*person_from_file(string file)//reads file
{
List<person>* newlist=new List<person>();
// Link<T> * head=NULL;
// Link<T> * temp=NULL;
ifstream fin;
fin.open("data.txt");
if (fin.fail())
cout<<"file not found\n";
if (!fin.fail())
{
while(true)
{
int a,b;
string c,d,e;
fin>>a>>b>>c>>d>>e;
if (fin.fail())break;
person * p=new person(a,b,c,d,e);
newlist->add(p);
}
}
else
cout<<"Can't open file";
fin.close();
return newlist;
}
List<state>*state_from_file(string file)//reads file
{
List<state>* newlist=new List<state>();
// Link<T> * head=NULL;
// Link<T> * temp=NULL;
ifstream fin;
fin.open("data.txt");
if (fin.fail())
cout<<"file not found\n";
if (!fin.fail())
{
while(true)
{
int a,b;
string c,d,e;
fin>>a>>b>>c>>d>>e;
if (fin.fail())break;
state * s=new state(e);
newlist->add(s);
}
}
else
cout<<"Can't open file";
fin.close();
return newlist;
}
int main()
{List<person>*A = person_from_file("data.txt");
List<state> *B= state_from_file("data.txt");
B->print_people_in_state("TX");
return 0;
}
Вам придется перебирать связанный список в 'print_people_in_state()', я думаю. – 101010
используйте отладчик. – pm100
Строка 'if (state == search)' вам нужно использовать 'if (state.compare (search)'. Я считаю – jiveturkey