2009-05-04 81 views
1

我有像一條線的文本文件:輸入到陣列

James Dean   10 Automotive  27010.43 

,我需要讀取該文件,並把上述各4的成陣列。

char nameArray[MAX][NAME_MAX]; 
int yearArray[MAX]; 
char departmentArray[MAX][DEP_MAX]; 
double payArray[MAX]; 


while(i < MAX && infile) { 

     infile.getline(nameArray[i], 20); 
     infile >> yearArray[i]; 
     infile.getline(departmentArray[i], 15); 
     infile >> payArray[i]; 

     cout << nameArray[i] << " " << yearArray[i] << " " << departmentArray[i] << " " << fixed << setprecision(2) << payArray[i] << endl; 
     i++; 
    } 

代碼是剛切下來給你什麼,我試圖做一個想法,但是當我運行它,我得到這樣的:

James Dean   -858993460 -92559631349317830000000000000000000000000000 
000000000000000000.00 

感謝您的幫助。

====編輯========================================= =

我從getline變成了,謝謝你。我必須使用get而不是>>,因爲我閱讀的部分內容不僅僅是「James Dean」,他們長達20個字符......例如:「William K. Woodward」是另一個。因此,如果我只是使用get,那麼它讀取第一行的罰款,但是然後我得到第二行相同的文本。

下面是代碼:

infile.get(nameArray[i], 20); 
    infile >> yearArray[i]; 
    infile.get(departmentArray[i], 15); 
    infile >> payArray[i]; 
+0

您應該使用一些分隔符,還是使用製表符?如果您使用空格,那麼如果您允許姓名或部門的號碼,則會導致問題。 – schnaader 2009-05-04 16:02:40

回答

2

getline功能獲取輸入流和寫爲字符串。所以,兩行getline調用讀取兩行。您的輸入機制被破壞。要麼使用getline,要麼使用流提取操作符(即>>),但不能同時使用兩者。

如果您打算使用getline,則需要將字符串(實際上是一行輸入)解析爲tokes,然後將它們存儲在適當類型的數組中。第二個和第四個標記是數字,因此您需要將它們從字符串轉換爲intdouble

operator >>方法:

string name, surname; 
int year; 
double pay; 
while (infile) { 
    infile >> name >> surname >> year >> department >> pay; 
    namearray[ i ] = name + " " + surname; 
    // ... 
    payarray[ i ] = pay; 
    ++i; 
} 

getline方法:

string line; 
while (getline(infile, line)) { 
    parse(line, tokens); 
    namearray[ i ] = token[ 0 ] + " " + token[ 1 ]; 
    // ... 
    payarray[ i ] = strTodouble(token[ 4 ]); 
    ++i; 
} 

// parse definition 
void parse(string line, vector<string>& token) { 
    // roll your own 
} 

double strToDouble(string s) { 
    // ... 
} 
0

我沒有看到你定義INFILE,但我會認爲這是一個ifile的。在這種情況下,你應該像使用cin一樣使用它來獲得輸入。

爲什麼要做getline()? 該函數僅在'\ n'字符處或EOF字符處停止。所以這意味着,你開始讀取行結束後的int,一些隨機數據。

如果我錯了,請糾正我,但在數字(10)之前,第一個字符串(James Dean)中是否有20或19個字符?