2017-11-29 3 views
0

私はファイルを読み込み、構造体型のベクトルにデータを格納しています。私は3つの異なる機能を持っています:struct型のベクトルは渡しますが、コンソール出力は行いません

  1. readFile(insert arg here)//テキストファイルを読み込んで、その週を通して働いた名前と時間を取得します。
  2. バブルソート( `以上のarg ')//自明
  3. 出力(`引数')//前記ベクター

関数プロトタイプの出力内容:

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

構造体:

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

メイン:

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]; 
    } 
} 

//

出力明白な理由のために、バブルソートを除く:

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; 
} 

コンソール出力が空白で、マイナス私は私だと思うメインでcout << endl;system("pause");をほとんどの場合、すべてを正しく設定しますが、私はまだ分かりません。助けてくれてありがとう!

EDIT:参照&なく追加の関数プロトタイプと

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

+0

は、[最小、***完全***、かつ検証例](http://stackoverflow.com/を作成してみてください呼び出しますヘルプ/ mcve)を使用してください。関数ヘッダー(宣言)を含む。実際に関数の宣言がここで重要です! –

+0

関数の宣言では、問題は明らかです。ベクトル*を値*に渡します。これは、ベクターがコピーされ、オリジナルではなくコピーでのみ動作することを意味します。私はあなたに[良い初心者の本をいくつか入手してください](http://stackoverflow.com/questions/388242/the-definitive-c-book-guide-and-list)、* reference *で引数を渡すことについてお読みください。 –

+0

入力ファイルはどのようなものですか?これがなければ、どこが間違っているのか判断できません。 –

答えて

1

変更あなたの関数のヘッダ構造体には、あなたは、このようにあなたはベクトルにしたとの内部でint型どのような修正、値で渡しているあなた関数はあなたのベクトルとあなたのメインのintに影響しませんので、mainのベクトルは常に空です。

さらに、numOfEmployeesも必要ありません。あなたは従業員の数が必要な場合は

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

、ちょうどworkers.size()

関連する問題