gpt4 book ai didi

C++ 打印链表

转载 作者:行者123 更新时间:2023-11-28 03:22:04 26 4
gpt4 key购买 nike

我是 C++ 的新手,我的打印功能有问题。这可能是一个非常简单的问题,但我找不到解决方法。

在我开始编写代码之前,我可能会添加这应该是一个循环列表。

首先,这是我的链表结构

struct CL;

typedef CL* list_type;

struct person
{
string last_name;
string first_name;
string tel_nr;
};

struct CL
{
person data;
list_type next;
};

如您所见,我希望列表包含一个数据和一个指针。数据是一个人(姓氏、名字和电话号码(作为字符串))。

我的主程序是这样的

int main ()
{
list_type list;
list_type first;
string line;
person info;
ifstream myfile ("INFILE.TXT");
if (myfile.is_open())
{
while (myfile.good())
{
getline (myfile,line,',');
info.last_name=line;
getline(myfile,line,' ');
getline(myfile,line,':');
info.first_name=line;
getline(myfile,line);
info.tel_nr=line;
if(first==0)
{
list = new CL;
first = list;
list->data = info;
list->next = 0;
}
else
{
list->next = new CL;
list = list->next;
list->data = info;
list->next = 0;
}

}

list->next = first;
print(list);
myfile.close();
}
else cout<<"Unable to open file.";
return 0;
}

现在我遇到问题的部分是打印功能。

void print(CL* cur)
{
list_type first;
first=cur;
int x;
do
{
cout<<"\n"<<"Your Data is: ";
cout<<cur->data.last_name<<cur->data.first_name<<cur->data.tel_nr;
//I guess this is where the fault lies ^.
cur = cur->next;
}
while(cur != first);
}

如果可能的话,我希望得到解释,而不仅仅是正确的代码。

谢谢

编辑。 我得到的结果是很多奇怪的字符,例如:

ê,(,?,ý and alot of other characters I don't know how to type.

我期待的结果是这样的

Robertson Linda 0838-2345
Brown Charles 068-24567
etc until the end of list

编辑2。

已解决,非常感谢。

最佳答案

第一个问题

int main ()
{
list_type list;
list_type first; // uninitialized value
// ...
if(first==0) // ???
{

您需要显式初始化 first 才能执行您期望的操作:

int main ()
{
list_type list;
list_type first = 0;
// ...
if(first==0)
{

第二个问题

首先,您的链表代码很脆弱,因为您并没有真正编写(惯用的)C++。即使不使用 STL,您的列表也可以(并且应该)提供一定程度的抽象。正确编写它实际上更容易,因为您的数据结构逻辑不会与您的测试工具或问题域逻辑混淆。

例如,

class PersonList {
CL *head;
CL *tail;

public:
PersonList(); // think about how to initialize an empty list

void push_back(Person const&); // head & tail modified in here
// etc.
};

请注意,如果您不允许使用 class,则这是相同的:

struct PersonList {
private:
CL *head;
// ... as above ...

如果您根本不允许使用构造函数和方法,那么一个好的 C 风格等效项可能是:

struct PersonList {
CL *head;
CL *tail;
};
struct PersonList * new_list();
void push_back(struct PersonList *, Person const &);

这仍然将您的数据结构代码集中在一个地方,远离您的业务逻辑/问题域/测试工具代码。

关于C++ 打印链表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15140345/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com