C++ (链表)我的代码可以编译,但它';It’没有打印任何东西
我在早些时候发布了这个问题,一条评论建议我创建一个链接类和其他建议(尽管我不能全部做到)。我尝试这样做,现在我的代码至少可以编译了,但它没有打印出任何内容。我将非常感谢你的帮助 因此,我的项目是获取一个名为“contacts.txt”的文件,读入数据并将数据放入一个节点。然后,我将该节点放入一个列表中。我清除重复项并打印出结果列表。我试图先读取数据和打印部分,但打印列表时遇到问题 联系方式如下所示:C++ (链表)我的代码可以编译,但它';It’没有打印任何东西,c++,linked-list,nodes,C++,Linked List,Nodes,我在早些时候发布了这个问题,一条评论建议我创建一个链接类和其他建议(尽管我不能全部做到)。我尝试这样做,现在我的代码至少可以编译了,但它没有打印出任何内容。我将非常感谢你的帮助 因此,我的项目是获取一个名为“contacts.txt”的文件,读入数据并将数据放入一个节点。然后,我将该节点放入一个列表中。我清除重复项并打印出结果列表。我试图先读取数据和打印部分,但打印列表时遇到问题 联系方式如下所示: Angelina M. Pierre 212 555 1234 我的代码是: #include
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。我不确定他为什么要用那种方式。哦,明白了。我不同意他的立场,但我完全理解需要遵守老师的命令。谢谢你的澄清!谢谢你的帮助。我一直在做这件事我一个人做了一段时间的项目,但已经过期几天了,因为我一直被困在那里,不知道该怎么办。这太令人沮丧了。我真的很感激这一点。