2010-11-06 17 views
0

我一直在爲C++進行類分配,我們需要從文本文件獲取輸入並將這些值分配給數組....一個是字符串,第二個是int,第三個是double。在C++中使用getline的多個實例

我們只被引入到數組中,並且我還不知道有關指針或鏈表或任何高端的東西,所以我覺得我的選擇有限。我一整天都在努力想辦法從文本文件中獲取輸入並將其分配給適當的數組。我試着用getline來讀取輸入文件,並設置一個分隔符來分隔每一段數據,但是當我嘗試多次使用它時出現錯誤。從我讀過的內容來看,這與我如何重載函數有關,但我在解決這個問題時不知所措。我讀過的每一個解釋都超出了我目前的熟悉程度。現在,我專注於代碼的部分:

for (int i = 0; i < EMP_NUM; i++) // Get input from text file for names. 
    getline(inFile, nameAr[i], '*'); 

for (int i = 0; i < EMP_NUM; i++) // Input for hours. 
    getline(inFile, hoursAr[i], '*'); 

for (int i=0; i < EMP_NUM; i++) // Input for hourly rate. 
    getline(inFile, hrateAr[i], '*'); 

我試圖使用函數getline三次,將數據寫入到三個獨立的數組,然後進行一系列的計算與他們後來並輸出到另一個文本文件。 getline的第一個實例不會產生任何編譯器錯誤,但後兩者會這樣做。我不太確定將數據存入我的陣列的另一個解決方案,所以我不知所措。任何幫助將是偉大的!

+1

如何輸入文件看? – wilhelmtell 2010-11-06 07:39:28

+0

我們可以自由構建輸入文件,只要它包含所有正確的數據。我已經安排了它,以便它包含三行,一個帶有一組名稱,另一個帶有小時,第三行帶有小時費率。這些名字有第一個姓和名,後面跟着一個星號作爲分隔符。例如:J. Doe * J. Doee * .....後兩行是由空格字符分隔的普通數字。我選擇使用第一行的分隔符,因爲第一個姓和名都包含空格字符。 – Strata 2010-11-06 14:43:52

回答

0

1)代替三個不同的迭代,只用一個

2)傳遞字符串對象函數getline代替指針

string buf; 
for (int i = 0; i < EMP_NUM; i++) // Get input from text file for names. 
{ 
    getline(inFile, buf, '*'); 
    nameAr[i] = buf; 
    getline(inFile, buf, '*'); //assuming delimiter is again * 
    hoursAr[i] = atoi(buf.c_str()); //C way to doing it...however in c++ u have to use stringstreams.... 
    getline(inFile, buf); 
    hrateAr[i] = atof(buf.c_str());; 
} 
1

如果我理解正確,你只是在文件中有三個值:一個字符串,一個int和一個double。我假設他們被空白分隔。

如果是這樣,那麼你不需要std::getline()。相反,使用提取運算符:

std::ifstream file("input.txt"); 
std::string s; 
if(! (file >> s)) { // a single word extracted from the file 
    // failure 
} 
int n; 
// ... 
0

什麼的編譯錯誤說?你確定錯誤是由getline造成的嗎?也許這不是因爲getline調用,而是因爲多個聲明i

+0

'i'是代碼發佈中的一個循環變量,它的範圍應該限制在它聲明的for循環中。在這種情況下(沒有大括號),每次都在它下面的行。 – rubenvb 2010-11-06 08:05:32

+0

是的,正如您正確指出的那樣:它*應該*限於它所聲明的'for'循環。但是存在編譯器,它們將這些變量添加到for循環的作用域而不是for '只循環自己。由於我們不知道正在使用的編譯器,我們不能排除這種行爲。 – Flinsch 2010-11-06 08:12:20

+0

第二個和第三個數組是'int'和'double'。 'hourAr [i]'和'hrateAr [i]'都不是'getline'的有效參數,所以我猜這個問題就在那裏。這是很久以前,因爲我已經看到一個編譯器與破環for(VC6?) – 2010-11-06 11:38:25