C++ (链表)我的代码可以编译,但它';It’没有打印任何东西

C++ (链表)我的代码可以编译,但它';It’没有打印任何东西,c++,linked-list,nodes,C++,Linked List,Nodes,我在早些时候发布了这个问题,一条评论建议我创建一个链接类和其他建议(尽管我不能全部做到)。我尝试这样做,现在我的代码至少可以编译了,但它没有打印出任何内容。我将非常感谢你的帮助 因此,我的项目是获取一个名为“contacts.txt”的文件,读入数据并将数据放入一个节点。然后,我将该节点放入一个列表中。我清除重复项并打印出结果列表。我试图先读取数据和打印部分,但打印列表时遇到问题 联系方式如下所示: Angelina M. Pierre 212 555 1234 我的代码是: #include

我在早些时候发布了这个问题,一条评论建议我创建一个链接类和其他建议(尽管我不能全部做到)。我尝试这样做,现在我的代码至少可以编译了,但它没有打印出任何内容。我将非常感谢你的帮助

因此,我的项目是获取一个名为“contacts.txt”的文件,读入数据并将数据放入一个节点。然后,我将该节点放入一个列表中。我清除重复项并打印出结果列表。我试图先读取数据和打印部分,但打印列表时遇到问题

联系方式如下所示:

Angelina M. Pierre 212 555 1234
我的代码是:

#include <iostream>
#include <stdlib.h>
#include <fstream>
#include <sstream>

using namespace std;
typedef int ElementType;


class Node
{
private:
  ElementType first, mid, last, phone;
  Node *next;

  friend class List;
public:
/*  Node(Element){
    first = "";
    mid = "";
    last = "";
    phone = "";
  }; */
  Node(ElementType f, ElementType mi, ElementType sur, ElementType ph){
        first = f;
        mid = mi;
        last = sur;
        phone = ph;
        next = NULL;
  };

  Node* getNext()
  {
    return next;
  }

  void setFirst(ElementType firstName){
    first = firstName;
  }
  ElementType getFirst()
  {
    return first;
  }

  void setMid(ElementType middleI){
    mid = middleI;
  }
  ElementType getMid()
  {
    return mid;
  }

  void setLast(ElementType lastName){
    last = lastName;
  }
  ElementType getLast()
  {
    return last;
  }

  void setPhone(ElementType phoneNum){
    phone = phoneNum;
  }
  ElementType getPhone()
  {
    return phone;
  }

void printNode(){
  cout << first << " " << mid << "" << last << "" << phone;
}


};
typedef Node* NodePointer;

/*------------------------------------------------------*/

class List {
private:
  Node* first;

public:
List(){
  first = NULL;
}

NodePointer getFirst(){
  return first;
};

/*--------------------------------------------------------*/

void insert(ElementType fir, ElementType midd, ElementType las, ElementType phon, NodePointer pos){
  NodePointer pN;
  if(pos == first){
    pN = new Node(fir, midd, las, phon);
    pN->next = pos;
    first = pN;
  }

  else{
    pN = new Node(fir, midd, las, phon);
    pN->next = pos->next;
  }
}

/*--------------------------------------------------------------*/

void remove(NodePointer pos){
  NodePointer pN;
  if(pos == NULL){
    return;
  }
  else {
    if(pos == first){
      first = first->next;
      delete pos;
    }
    else{
      pN = first;
      while(pN->next != pos){
        pN = pN->next;
        pN->next = pos->next;
        delete pos;
      }
    }
  }
}


//Accessor
//bool empty();
void printContactList(){
    NodePointer pN;
    for(pN = first; pN != NULL; pN = pN->next){
      pN->printNode();
      cout << endl;
    }
  }
  friend void copyList (List &L, List &M);
};



void readData(){
  List L;
//I had to do multiple ph (phone numbers) because when I would read it in, it would only take the first three numbers and not the entire phone number. 
  ElementType fi, mi, la, ph, ph1, ph2;
  ifstream fin;
  fin.open("C:\\Users\\owner\\Documents\\contacts.txt");

  fin >> fi >> mi >>la >> ph >> ph1 >> ph2;

  while(!fin.eof()){
  L.insert(fi, mi, la, ph, L.getFirst());
  fin >> fi >> mi >>la >> ph >> ph1 >> ph2;
  //fin >> fi;

}
  L.printContactList();

}
int main()
{

    readData();
    return 0;
}

#包括
#包括
#包括
#包括
使用名称空间std;
typedef int元素类型;
类节点
{
私人:
ElementType first、mid、last、phone;
节点*下一步;
好友类列表;
公众:
/*节点(元素){
第一个“”;
mid=“”;
last=“”;
电话=”;
}; */
节点(元素类型f、元素类型mi、元素类型sur、元素类型ph){
第一个=f;
mid=mi;
最后=南;
电话=ph;
next=NULL;
};
节点*getNext()
{
下一步返回;
}
void setFirst(ElementType firstName){
first=firstName;
}
ElementType getFirst()
{
先返回;
}
void setMid(元素类型middleI){
mid=MIDLI;
}
ElementType getMid()
{
中途返回;
}
void setLast(ElementType lastName){
last=lastName;
}
ElementType getLast()
{
最后返回;
}
void setPhone(ElementType phoneNum){
phone=phoneNum;
}
ElementType getPhone()
{
回电话;
}
void printNode(){
cout next=pos->next;
删除pos;
}
}
}
}
//存取器
//bool empty();
作废打印联系人列表(){
节点间pN;
对于(pN=first;pN!=NULL;pN=pN->next){
pN->printNode();
cout>fi>>mi>>la>>ph>>ph1>>ph2;
而(!fin.eof()){
L.插入(fi、mi、la、ph、L.getFirst());
fin>>fi>>mi>>la>>ph>>ph1>>ph2;
//fin>>fi;
}
L.打印联系人列表();
}
int main()
{
readData();
返回0;
}
好的,问题出在这里

typedef int ElementType;
ElementType
是一个整数

这是数据

Angelina M. Pierre 212 555 1234
数据是三个字符串,后跟三个整数

这是您试图读取数据的变量

ElementType fi, mi, la, ph, ph1, ph2;
所有变量都是整数,但有些数据是字符串。因此读取失败


即使是最短的调试时间也应该告诉你这一点。只需输入一个
cout,我关于
!infle.eof()
被认为是错误的小贴士在这里仍然很重要。我相信你会因此陷入无限循环中。如果没有,请阅读该链接。相反,你需要类似
的东西(infle>>item1>>item2>…>>itemN){/*code*/}
,因此条件在语义上是“我可以从我的文件中读取更多信息吗?”@Shaavin当我第一次提交我的项目时,我的教授告诉我不应该放置while(infle>>item1>>item2)(我在将其更改为.eof之前就这样做了)他说如果我用那种方式提交代码,他会把它标错。这就是我为什么要用。eof。我不确定他为什么要用那种方式。哦,明白了。我不同意他的立场,但我完全理解需要遵守老师的命令。谢谢你的澄清!谢谢你的帮助。我一直在做这件事我一个人做了一段时间的项目,但已经过期几天了,因为我一直被困在那里,不知道该怎么办。这太令人沮丧了。我真的很感激这一点。