2012-12-18 112 views
3

我正在嘗試讀取文本文件並將其存儲在數組中,但我的程序一直處於無限循環中。將數據文件讀入數組

這裏是我的代碼:

int main() { 
    const int size = 10000; //s = array size 
    int ID[size]; 
    int count = 0; //loop counter 
    ifstream employees; 

    employees.open("Employees.txt"); 
    while(count < size && employees >> ID[count]) { 
     count++; 
    } 

    employees.close(); //close the file 

    for(count = 0; count < size; count++) { // to display the array 
     cout << ID[count] << " "; 
    } 
    cout << endl; 
} 
+4

你試過在調試器中運行它嗎? – anishsane

+0

您確定這是您的確切代碼嗎?我只是試了一下,它的工作。 – BoBTFish

+0

無限循環?你的代碼每個循環最多可產生10000次迭代... – Geoffroy

回答

2

首先,你應該使用std::vector<int> ID;代替原始int陣列。

其次,你的循環應該看起來更像是這樣的:

std:string line; 
while(std::getline(employees, line)) //read a line from the file 
{ 
    ID.push_back(atoi(line.c_str())); //add line read to vector by converting to int 
} 

編輯:

你在上面的代碼問題是這樣的:

for(count = 0; count < size; count++) { 

你重用你的計數變量您之前使用過的記錄可以保留從文件中讀取的項目數量。

應該是這樣的:

for (int x = 0; x < count; x++) { 
    std::cout << ID[x] << " "; 
} 

這裏,我們使用您的count變量,以從文件中讀取的項目數。

+0

1.你不知道所有的員工ID是分開的行;原始代碼將在空間分離時起作用。 (你可以給'std :: getline一個不同的分隔符,我想)。 2.這並沒有回答這個問題(雖然不錯的做法可以幫助避免愚蠢的錯誤)。雖然我同意'std :: vector'通常是一個好主意,即使大小總是固定的,在這種情況下,調用['reserve']將會是一個好主意(http://en.cppreference.com/ w/cpp/container/vector/reserve)來避免大量重新分配。 – BoBTFish