2013-04-03 96 views
2

我目前正在爲我的210課程開展一個項目,該課程涉及一個文件,我需要從中提取全名,飛行類型,乘客類型,會員級別,袋子,以及這些袋子的尺寸/重量。 它變得非常複雜的軍事獎勵和里程俱樂部,免費袋和超大行李,客運型,等等... ...等for循環的困難,從文件中讀取和寫入

文件看起來就像這樣:

Mark Spitz E RP NO 2 21.5 24.2 18 6 30 26 20.5 7.5 
Michael Jordan B RP M4 3 53.7 14.1 9.2 15.0 24.2 5.2 9.3 16.2 109.2 12.1 9.6 23.0 
Dorothy Hamill E RP NO 2 55.8 27.1 17.2 18.6 15.0 35.2 21.3 9.2 

這表明馬克施皮茨是一個普通旅客旅遊經濟艙,並不是里程俱樂部的成員。他正在檢查兩包:第一包重21.5磅,長24.2英寸,寬18英寸,高6英寸;第二個重30磅,長26英寸,寬20.5英寸,高7.5英寸。

我已經用循環從infiles之前讀取,但從來沒有這樣的。 我已經完全停下來,需要一些嚴肅的幫助解決這個問題,因爲我似乎無法找到很多答案。 任何和所有的幫助,非常感謝! 這裏是我的代碼電流:

#include <iostream> 
#include <string> 
#include <fstream> 
#include <iomanip> 
#include <cmath> 

using namespace std; 

int main() 
{ 
int newline, firstname, lastname, flighttype, status, membership, numberofbags=0, regularpass, militarypass, militaryorder, member1, member2, member3, member4, nomember; 

ifstream infile; 
infile.open("data3.txt"); 

ofstream outfile; 
outfile.open("charges.txt"); 

     infile >> newline; 
     for(int a=0; a<newline; a++) 
     { 
      infile >> firstname >> lastname; 
      outfile << firstname <<" " << setw(10) << left << lastname; 
     } 

return 0; 
} 
+0

*「閱讀和寫作也來自文件」*這是沒有意義的,請修復。 – m0skit0

+3

@ m0skit0:爲什麼它沒有意義?代碼打開一個文件並從中讀取;它會打開另一個文件並寫入它,不是嗎?其餘的只是'使用英語',這可能不是OP的母語。 –

+0

你已經讀過這個名字;你需要閱讀三個char字段。那麼你需要閱讀包的數量;對於每個包,你需要閱讀重量,長度,寬度,高度。當有人沒有托運行李時會發生什麼? –

回答

0

由於正在使用的錯誤類型之前說明。你正在將字符串讀入整數變量,這是行不通的。

for(int a=0; a<newline; a++) 

通過文件循環的方式沒有任何意義。請參閱下面的參考。

ifstream reference

而且......你是不是在所有領域的閱讀試圖移動到下一個記錄之前。您的數據顯示一些記錄的字段比其他字段更多。這會導致你的技術無法工作。如果練習是讀取長度相同的記錄,則這是正確的代碼,但如果是讀取長度可變的記錄,則此代碼不起作用。您將需要使用getline來執行可變長度記錄。

看到後約翰的評論以上我可以看到爲什麼記錄長度是可變的。您需要提供將決定應讀取多少字段的邏輯。我想我現在可以在我的200級CS課程中回想這種練習。