2017-11-29 5 views
0

Ich lese eine Datei und speichert die Daten in einem Vektor eines Strukturtyps. Ich habe 3 verschiedene Funktionen:Versuch, einen Vektor eines Strukturtyps, aber keine Konsolenausgabe zu übergeben

  1. readfile (insert arg here) // liest eine Textdatei und bekommt einen Namen und Stunden während der Woche gearbeitet.
  2. BubbleSort (`mehr ARG) // selbsterklärend
  3. Ausgang (` Arg ') // gibt Inhalt des Vektors

Funktionsprototypen:

void readFile(vector<Employee *> workers, int numOfEmployees); 
void bubbleSort(vector<Employee *> workers, int numOfEmployees); 
void output(vector<Employee *> workers, int numOfEmployees); 

Struct:

struct Employee 
{ 
    string name; 
    vector<int> hours; 
    int totalHours; 
} 

Main:

vector<Employee *> workers; 
int numOfEmployees = 0; 

readFile(workers, numOfEmployees); 
bubbleSort(workers, numOfEmployees); 
output(workers, numOfEmployees); 
cout << endl; 

system("pause"); 
return 0; 

readfile:

ifstream fin; 
fin.open("empdata4.txt"); 
if (fin.fail()) 
{ 
    cout << "File failed to open. Program will now exit.\n"; 
    exit(1); 
} 

fin >> numOfEmployees; 
workers.resize(numOfEmployees); 

for (int row = 0; row < numOfEmployees; row++) 
{ 
    workers[row] = new Employee; 
    workers[row]->hours.resize(7); 

    fin >> workers[row]->name; 

    for (int i = 0; i < 7; i++) 
    { 
     fin >> workers[row]->hours[i]; 
    } 
} 

// aus offensichtlichen Gründen Blase Art ohne

Ausgabe:

for (int i = 0; i < numOfEmployees; i++) 
{ 
    cout << workers[i]->name << " "; 
    for (int x = 0; x < 7; x++) 
    { 
     cout << workers[i]->hours[x] << " "; 
    } 
    cout << endl; 
} 

Die Konsolenausgabe ist leer, minus der cout << endl; in Haupt- und system("pause"); Ich glaube, ich setze alles zum größten Teil richtig auf, aber ich weiß es immer noch nicht. Danke für jede Hilfe!

EDIT: Added Funktionsprototypen und struct

+0

Bitte versuchen, eine erstellen [Minimal, *** *** Vollständige und prüfbare Beispiel] (http://stackoverflow.com/ help/mcve) um uns zu zeigen. Einschließen der Funktionskopfzeilen (Deklarationen). Die Funktionsdeklarationen sind hier eigentlich wichtig! –

+0

Und mit der Funktionsdeklaration ist das Problem offensichtlich: Sie übergeben den Vektor * nach Wert *. Das bedeutet, dass der Vektor kopiert wird und Sie nur an der Kopie arbeiten, niemals am Original. Ich schlage vor, Sie [erhalten ein paar gute Anfänger Bücher] (http://stackoverflow.com/questions/388242/the-definitive-c-book-guide-and-list) und lesen Sie über das Übergeben von Argumenten durch * Verweis *. –

+0

Wie sieht Ihre Eingabedatei aus? Ohne dies kann ich nicht entscheiden, wo es falsch ist. –

Antwort

1

ändern Ihre Funktion Header

void readFile(vector<Employee *>& workers, int& numOfEmployees); 
void bubbleSort(vector<Employee *>& workers, int& numOfEmployees); 
void output(vector<Employee *>& workers, int& numOfEmployees); 

Ohne die Referenz &, sind vorbei Sie nach Wert, also unabhängig von Änderungen, die Sie an den Vektor tat und int in Ihrem Die Funktion hat keinen Einfluss auf Ihren Vektor und int in Ihrem main und daher ist Ihr Vektor in main immer leer.

Noch besser, brauche nicht einmal numOfEmployees.

void readFile(vector<Employee *>& workers); 
void bubbleSort(vector<Employee *>& workers); 
void output(vector<Employee *>& workers); 

Wenn Sie die Anzahl der Mitarbeiter benötigen, rufen Sie einfach workers.size()

Verwandte Themen