2012-12-18 6 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

첫째, 원시 int 배열 대신 std::vector<int> ID;을 사용해야합니다

여기 내 코드입니다.

두 번째 루프는 더 다음과 같아야합니다

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/)를 호출하는 것이 좋습니다. cpp/container/vector/reserve)를 사용하여 많은 재 할당을 피할 수 있습니다. – BoBTFish

관련 문제