2011-09-04 2 views
1

텍스트 파일에서 텍스트를 읽었지만 eof에 도달하지 않아 무한 루프가 발생합니다.ifstream (cpp)을 사용하여 eof에 도달하지 마십시오

는 여기에 내가 한 줄을 처리 내가 addStudents를 호출 루프의

static ifstream inF; 
inF.open(file,ifstream::in); 
cin.rdbuf(inF.rdbuf()); 
while (inF.good() && !inF.eof()) 
{ 
    addStudent(students); 
} 
if (inF.is_open()) 
{ 
    inF.close(); 
    inF.clear(); 
} 

모든 반복을

을 쓴거야. 그게 잘 작동 해. 기본적으로 나는 D의 형태로 라인을 RAD 98 76.5 66 45 (아마도) 12000 여기에 코드입니다 : (무효 반환)

내가 루프가 계속 실행 파일의 끝 부분에 도착
static void addStudent(vector<Student*> students) 
{ 
char institution; 
unsigned short id; 
double gAverage, pGrade, salary; 
cin >> institution; 

switch (institution) 
{ 
case ALICE: 
    cin >> id >> gAverage >> salary; 
     students.push_back(new Student(institution,id,gAverage,salary)); 
     return; 
case BOB: 
    cin >> id >> gAverage >> salary; 
    students.push_back(new Student(institution,id,gAverage,salary)); 
    return; 
case COLIN: 
    cin >> id >> gAverage >> pGrade >> salary; 
    students.push_back(new     CollegeStudent(institution,id,gAverage,pGrade,salary)); 
    return; 
case DANNY: 
cin >> id >> gAverage >> pGrade >> salary; 
    students.push_back(new CollegeStudent(institution,id,gAverage,pGrade,salary)); 
    return; 
} 
} 

및 addStudents 아무것도하지 않는다. 어떤 아이디어가 필요한가? 감사합니다.

+0

'addStudent'에 대한 코드를 게시하십시오. –

+3

또한 addStudents를 볼 필요가 있습니다. 원래 ifstream의 위치를 ​​늘리지는 않을 것입니다. 항상 시작 부분에 있으며 항상 good() 및! eof()에 대해 true를 반환합니다. – Will

답변

2

파일 스트림의 스트림 버퍼를 cin (으)로 공유 할 수 있지만 플래그를 공유하지 않습니다. 따라서 cin의 operator>>을 사용하여 읽었을 때 파일 끝에 도달하면 cin은 자신의 eof 플래그를 설정하지만 ifstream에 플래그를 설정하지 않습니다 (어떻게 알 수 있습니까?).

파일을 읽는 방법이 너무 어리석은 이유는 무엇입니까? istream 참조를 addStudent 함수에 전달하고 읽는 것이 어떨까요?

+0

글쎄, 파일로, 그래서 내가 한 것입니다. ifstream.getLine() 사용할 수 있지만 리디렉션 오른쪽 사용하지 않는거야? – yotamoo

+0

@yotamoo : 당신이 지금하고있는 것처럼 할 수 있습니다, 당신은 그냥 –

+0

선생님이 아마 cin을 직접 처리하길 원했을 것입니다. 그래서 다른 작업의 출력을 처리하기 위해 리다이렉트 할 수 있습니다 (파이프의 일부분을 파이프와 같이 만드는 등).) 당신이 다른 스트림에 cin을 넣었던 것은 실제로 프로그램 적으로별로 의미가 없습니다 : / –

관련 문제