파일 입출력인데 리스트에 있는 명부를 쭉 읽어서 처리하는 것입니다.
각각 ,로 분리 되어 있는데
while( fin != NULL )
{
getline(fin, Name, ',');
getline(fin, StudentID, ',');
getline(fin, BirthDay, ',');
getline(fin, Phone, ',');
getline(fin, Email, ',');
getline(fin, Address, '\n');
StudentData sData(Name, StudentID, BirthDay, Phone, Email, Address);
sList.push_back(sData);
if(count == MAXSTUDENTS) break; // MAXSTUDENTS = 10000
if(count == 9999) cout << sData.GetName();
if(count == 10000) cout << sData.GetName();
if(count == 10001) cout << sData.GetName(); // 10001명이 찍히는지 테스트
count++;
}
명부수는 딱 10000명입니다.
그런데...몇번이나 테스트를 해봐도 10001번째가 존재하며 그 10001번째의 요소는...
10000번째의 데이터를 그대로 가지고 있습니다.
그래서 list의 size를 찍으면 무조건 10001이 나옵니다.
간단하게 if(count == MAXSTUDENTS) break;
이런식으로도 해결 볼 수 있습니다만...
10000명의 명부를 던져놓고 10001명이 처리되는 이 현상은 해결해야 될 문제라고 생각합니다.
구조적인 문제인것 같은데 파일 입출력 시스템은 저도 아는게 없다 시피해서 이렇게 질문을 던집니다.
저 10001번째 요소는 어디에서 나타나는 것일까요?
ps
약간의 테스트를 더 해봤습니다.
일단 읽는것에 문제가 있는건 맞습니다.
예를 들자면
aaaaaaa, aaaaaaaaaa, aaaaaaaaaa, aaaaaaaaa, aaaaaaaaaaa, aaaaaaaaa
________________________________________________________________________
저런식으로 마지막 스트링 밑에 아무것도 없는 뉴라인이 존재할 경우에는 리스트의 마지막은 제일 앞 요소가 빠진채로 저장이 됩니다.
aaaaaaa, aaaaaaaaaa, aaaaaaaaaa, aaaaaaaaa, aaaaaaaaaaa, aaaaaaaaa
,aaaaaaaaaa, aaaaaaaaaa, aaaaaaaaa, aaaaaaaaaaa, aaaaaaaaa
이런식으로 말입니다.
그리고
aaaaaaa, aaaaaaaaaa, aaaaaaaaaa, aaaaaaaaa, aaaaaaaaaaa, aaaaaaaaa
딱 이 상태로 끝날 경우엔 마지막라인이 그대로 저장되어 붙습니다.
출력할 시에는
aaaaaaa, aaaaaaaaaa, aaaaaaaaaa, aaaaaaaaa, aaaaaaaaaaa, aaaaaaaaa
aaaaaaa, aaaaaaaaaa, aaaaaaaaaa, aaaaaaaaa, aaaaaaaaaaa, aaaaaaaaa
이렇게 되어 버립니다.
파일 입출력 객체 사용에 제가 문제가 있는것 같은데 이에 대해서 해결할 수 있는 방법 좀 알려주셨으면 합니다.