2017-08-11 1 views
-5

Quelqu'un peut-il m'aider à comprendre cela. J'ai un projet de classe où je devais programmer un Bill Casewell dans la classe et la liste chaînée. Je ne peux pas comprendre jusqu'à ce que j'ai trouvé ce lien. Il sort très awesomely, mais Idk comment ajouter une entrée d'utilisateur de cin >>, comme le nombre d'adultes et calcule le total de nourriture. J'ai essayé de le réparer mais cela ne fonctionne pas correctement http://www.sourcetricks.com/2008/07/c-singly-linked-lists.html#.WYzSxneGOHoSimple programme C++ avec la classe et la liste liée

// ---------------------------- ---------

#include <iostream> 
#include <cstdlib> 
#include <cstring> 

using namespace std; 

class List 
{ 
    private: 
     int number; 
     char* word; 
     List* next; 
    public: 
     void inserts(int num, char* text); 
     void removes(int num); 
     void print(); 
}; 
List* first; 

void List::print() { 
    cout <<"This is our list:"<<endl; 

    // Temp pointer 
    List *tmp = first; 

    // No nodes 
    if (tmp == NULL) { 
     cout << "EMPTY list" << endl; 
     return; 
    } 

    // One node in the list 
    if (tmp->next == NULL) { //on the first node of the list 
     cout <<"NUMBER:\t "<< tmp->number; 
     cout <<"\tWORD:\t"<< tmp->word << endl; 
     cout <<"--------------------------------"<<endl; 

    } 
    else { 
    // Parse and print the list 
     while (tmp != NULL){ //the rest of the list 
       cout <<"NUMBER:\t"<< tmp->number; 
       cout <<"\tWORD:\t"<< tmp->word << endl; 
       cout <<"--------------------------------"<<endl; 

      tmp = tmp->next; 
     } 
    } 
} 

void List::inserts(int num, char* word){ 
    // Create a new list 
    List* newlist = new List; 
    newlist->number=num; 

    newlist->word=word; 


    newlist->next=NULL; 

    // Create a temp pointer 
    List *tmp = first; 

    if (tmp != NULL) { 
     // Nodes already present in the list 
     // Parse to end of list 
     while (tmp->next != NULL) { 
      tmp = tmp->next; 
     } 

    // Point the last node to the new node 
     tmp->next=newlist; 
    } 
    else { 
     // First node in the list 
     first = newlist; 
    } 
} 

void List::removes(int num){ 
    int k = 0; 
    List* tmp=first; 

    if(tmp==NULL) { 
     return; 
     //Last node of the list 
    } 

    if (tmp->next == NULL && tmp->number==num) { 
     delete tmp; 
     first = NULL; 
    } 
    else { 
     //Parse thru the nodes 
     List* prev; 
     prev = new List; 
     while (tmp != NULL) { 
      if (tmp->number == num && k == 0) { 
       first = first->next; 
      } 
      if (tmp->number == num){ 
       break; 
       prev = tmp; 
       tmp = tmp->next; 
       k++; 
      } 
     }//end of while 

     //Adjust the pointers 
     prev->next=(tmp->next); 
     //Delete the current node 
     delete tmp; 
     delete prev; 
    }//end of else 
}//end of void remove 


int main() 
{ 

    first->print(); 
    first->inserts(1200,"endian"); 
    first->print(); 
    first->inserts(10,"endianness"); 
    first->inserts(1200,"PEEK"); 
    first->inserts(1200,"POKE"); 
    first->inserts(1200,".MIL"); 
    first->print(); 
    first->removes(100); 
    first->print(); 
    getchar(); 
} 

et sorties avec des avertissements

5 warnings generated. 
This is our list: 
EMPTY list 
This is our list: 
NUMBER:  1200 WORD: endian 
-------------------------------- 
This is our list: 
NUMBER: 1200 WORD: endian 
-------------------------------- 
NUMBER: 10 WORD: endianness 
-------------------------------- 
NUMBER: 1200 WORD: PEEK 
-------------------------------- 
NUMBER: 1200 WORD: POKE 
-------------------------------- 
NUMBER: 1200 WORD: .MIL 
-------------------------------- 
+0

C'est beaucoup de code mal dentelée. Vous prenez des contributions à un endroit, pourquoi ne pouvez-vous pas en ajouter d'autres? –

+1

La façon dont vous essayez d'utiliser 'Node.number' suggère que vous devriez relire les premiers chapitres de votre manuel. C++ n'est pas un langage tolérant pour les non préparés. – user4581301

+0

int nombre cout << "Ajouter un nombre \ n"; cin >> numéro; double produit = nombre * 2; liste.Append (nombre); list.Print(); liste.Append (produit); list.Print(); –

Répondre

0

Je suppose que vous essayez juste d'utiliser cin, pour que vous devrez déclarer le type défini d'entrée que vous voulez .Par exemple, comme vous avez dit que vous avez besoin de numéro, il peut être int Utilisation de cin

List list; 
int number; 
cout<<"Append a number \n"; 
cin>>number; 
double product = number * 2; 

code correctement indentées avec entrée (en utilisant cin)

#include <iostream> 
using namespace std; 

// Node class 
class Node { 
    int data; 
    Node* next; 

public: 
    Node() {}; 
    void SetData(int aData) { data = aData; }; 
    void SetNext(Node* aNext) { next = aNext; }; 
    int Data() { return data; }; 
    Node* Next() { return next; }; 
}; 

// List class 
class List { 
    Node *head; 
public: 
    List() { head = NULL; }; 
    void Print(); 
    void Append(int data); 
    void Delete(int data); 
}; 

/** 
* Print the contents of the list 
*/ 
void List::Print() { 

    // Temp pointer 
    Node *tmp = head; 

    // No nodes 
    if (tmp == NULL) { 
     cout << "EMPTY" << endl; 
     return; 
    } 

    // One node in the list 
    if (tmp->Next() == NULL) { 
     cout << tmp->Data(); 
     cout << " --> "; 
     cout << "NULL" << endl; 
    } 
    else { 
     // Parse and print the list 
     do { 
      cout << tmp->Data(); 
      cout << " --> "; 
      tmp = tmp->Next(); 
     } 
     while (tmp != NULL); 

     cout << "NULL" << endl; 
    } 
} 

/** 
* Append a node to the linked list 
*/ 
void List::Append(int data) { 

    // Create a new node 
    Node* newNode = new Node(); 
    newNode->SetData(data); 
    newNode->SetNext(NULL); 

    // Create a temp pointer 
    Node *tmp = head; 

    if (tmp != NULL) { 
     // Nodes already present in the list 
     // Parse to end of list 
     while (tmp->Next() != NULL) { 
      tmp = tmp->Next(); 
     } 

     // Point the last node to the new node 
     tmp->SetNext(newNode); 
    } 
    else { 
     // First node in the list 
     head = newNode; 
    } 
} 

/** 
* Delete a node from the list 
*/ 
void List::Delete(int data) { 

    // Create a temp pointer 
    Node *tmp = head; 

    // No nodes 
    if (tmp == NULL) 
     return; 

    // Last node of the list 
    if (tmp->Next() == NULL) { 
     delete tmp; 
     head = NULL; 
    } 
    else { 
     // Parse thru the nodes 
     Node *prev = nullptr; 
     do { 
      if (tmp->Data() == data) break; 
      prev = tmp; 
      tmp = tmp->Next(); 
     } while (tmp != NULL); 

     // Adjust the pointers 
     prev->SetNext(tmp->Next()); 

     // Delete the current node 
     delete tmp; 
    } 
} 

int main() 
{ 
    // New list 
    List list; 
    int number; 
    cout<<"Append a number \n"; 
    cin>>number; 
    double product = number * 2; 

    list.Append(number); 
    list.Print(); 

    list.Append(product); 
    list.Print(); 
    // Append nodes to the list 
    list.Append(100); 
    list.Print(); 
    list.Append(200); 
    list.Print(); 
    list.Append(300); 
    list.Print(); 
    list.Append(400); 
    list.Print(); 
    list.Append(500); 
    list.Print(); 

    // Delete nodes from the list 
    list.Delete(400); 
    list.Print(); 
    list.Delete(300); 
    list.Print(); 
    list.Delete(200); 
    list.Print(); 
    list.Delete(500); 
    list.Print(); 
    list.Delete(100); 
    list.Print(); 
} 

de sortie

Append a number 
2 
2 --> NULL 
2 --> 4 --> NULL 
2 --> 4 --> 100 --> NULL 
2 --> 4 --> 100 --> 200 --> NULL 
2 --> 4 --> 100 --> 200 --> 300 --> NULL 
2 --> 4 --> 100 --> 200 --> 300 --> 400 --> NULL 
2 --> 4 --> 100 --> 200 --> 300 --> 400 --> 500 --> NULL 
2 --> 4 --> 100 --> 200 --> 300 --> 500 --> NULL 
2 --> 4 --> 100 --> 200 --> 500 --> NULL 
2 --> 4 --> 100 --> 500 --> NULL 
2 --> 4 --> 100 --> NULL 
2 --> 4 --> NULL 
Program ended with exit code: 0 
+0

Comment supprimer les 2 et 4? –

+0

Je voudrais juste pouvoir avoir une classe qui a les variables suivantes: numberOfAdults, costPerAdult et adultTotalCost. 1))) A cout << "Combien d'adultes?"; cin >> numberOfAdults 2))) Un constructeur qui va initialiser la valeur de costPerAdult Dès que le nombre de Adultes est entré, je veux qu'il calcule le AdultTotalCost et ensuite le sortir. 3))) Lorsque le projet de loi est terminé, il sortira la facture finale, destructeur qui supprimera la facture, puis posera une question de cout qui saisira soit y/n si l'utilisateur aimerait encore créer une autre facture.Si oui que commencer un nouveau projet de loi –

+0

@SamuelFolledo il suffit d'utiliser la fonction de suppression que vous avez créé –