2011-12-09 8 views
2

C++で私のプログラムに深刻な問題があります。これは、すべてのWorkerクラスの1つのインスタンスに格納されなければならないユーザ入力の読み込みと保存に問題があります

Bill Jones 20 07:30 09:30 08:00 14:00  00:00 00:00 10:00 13:00 00:00 00:00 

:私のようなユーザーが入力した情報の行に読む必要があります。私が問題を抱えているのは、セミコロンを使用しているからです。私は完全に立ち往生してどこでも見てきましたが、助けを見つけることはできません。 、次のコードブロックで

#include <iostream> 
#include <string> 
using namespace std; 

class Time; 
class Worker; 

ostream &operator << (ostream &, const Time &); 
istream &operator >> (istream &, Time &); 

class Time 
{ 
private: 
    int hour; 
    int minute; 
public: 
    Time(); 

    void setHour(int a) 
    { hour=a; } 

    void setMinute(int a) 
    { minute=a; } 

    int getHour() const 
    { return hour; } 

    int getMinute() const 
    { return minute; } 

    Time operator + (const Time &); 
}; 

class Worker 
{ 
public: 
    int start; 
    int end; 
    string fName; 
    string lName; 
    double payrate; 
    double payment; 

    Time monday,tuesday,wednesday,thursday,friday; 
    friend istream &operator >> (istream &, Time &); 
    friend ostream &operator << (ostream &, const Time &); 
}; 

Time::Time() 
{ 
    hour = 0; 
    minute = 0; 
} 

ostream &operator << (ostream &strm, const Worker &obj) 
{ 
    strm << obj.fName << " " << obj.lName << " " << obj.payrate; 
    return strm; 
} 

istream &operator >>(istream &strm, Worker &obj) 
{ 
    strm >> obj.fName; 
    strm >> obj.lName; 
    strm >> obj.payrate; 
    string token; 
    int h,m; 
    string t; 
    for (int i=0; i<token.size(); i++) { 
     if(token[i]==':') 
     { 
      h = atoi (t.c_str()); 
      t.clear(); 
     } 
     else 
     { 
      t=t+token[i]; 
     } 
     m=atoi(t.c_str()); 
    } 

    obj.monday1.setHour(h); 
    obj.monday1.setMinute(m); 
    return strm; 
} 

Time Time::operator+ (const Time &right) 
{ 
    Time temp; 
    temp.hour = hour + right.hour; 
    temp.minute = minute + right.minute; 
    return temp; 
} 

int main() 
{ 
    Time time1, time2; 
    Worker worker[100]; 
    int num; 
    cout << "Please enter the number of workers on the payrole: "; 
    cin >> num; 
    cout << "Please input the worker’s last name, first name, pay rate, start time, and end time from "<< endl; 
    cout << "Monday through Friday separated by space." << endl; 
    for (int i=0; i<num; i++) 
    { 
     cin >> worker[i]; 
    } 
    for (int i=0; i<num; i++) 
    { 
     cout << worker[i]; 
    } 

    return 0; 
} 
+0

私は持っていません最近はC++で作業しましたが、入力文字列を分割する文字列関数があると思います - 擬似コード 'splitStringBy(" "、toArray [13]);'? –

答えて

3

以前にそれらの値を初期化せずにtokentの内容を使用している:これは私がこれまで持っているコードです

string token; 
int h,m; 
string t; 
for (int i=0; i<token.size();i++){ 
    if(token[i]==':') 
    { 
     h = atoi (t.c_str()); 
     t.clear(); 
    } 
関連する問題