(Связанный список) Мой код компилируется, но ничего не печатается - PullRequest
0 голосов
/ 05 апреля 2020

Я опубликовал этот вопрос ранее, и в комментарии было предложено создать класс Link и другие предложения (хотя я не смог сделать их все). Я попытался это сделать, и теперь мой код по крайней мере компилируется, но ничего не печатается. Буду признателен за помощь.

Итак, мой проект - получить файл с именем "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;
}

1 Ответ

3 голосов
/ 05 апреля 2020

ОК, вот в чем проблема

typedef int ElementType;

ElementType - это целое число.

Вот данные

Angelina M. Pierre 212 555 1234

Данные представляют собой три строки, за которыми следуют три целые числа.

И вот переменные, которые вы пытаетесь прочитать данные в

ElementType fi, mi, la, ph, ph1, ph2;

Все переменные являются целыми числами, но некоторые из ваших данных являются строками. Таким образом, ваши чтения не удаются!

Даже самый короткий период отладки должен был сказать вам это. Простое выражение cout << ... внутри вашего чтения l oop скажет вам, что случилось. Я знаю, что программирование сложно, но ты учишься только на практике. Постарайся быть более самостоятельным.

...