do-while 루프를 사용하는 데 어려움을 겪고 있습니다. 파일 끝에 도달하면 을 멈추어야합니다. 여기에 루프 코드는 다음과 같습니다feof (FILE * f)를 사용하는 방법?
do {
if (pcompanyRow[0] != '#' && pass == 1) {
strtok(pcompanyRow, ":");
pcompanyName = strcpy(pcompanyName, strtok(NULL, ""));
pass = 2;
fgets(pcompanyRow, 1024, f);
}
if (pcompanyRow[0] != '#' && pass == 2) {
strtok(pcompanyRow, ":");
pcompanySMSPrice = strcpy(pcompanySMSPrice, strtok(NULL , ""));
pass = 3;
fgets(pcompanyRow, 1024 , f);
}
if (pcompanyRow[0] != '#' && pass == 3) {
strtok(pcompanyRow, ":");
pcompanyMMSPrice = strcpy(pcompanyMMSPrice, strtok(NULL, ""));
pass = 4;
fgets(pcompanyRow, 1024, f);
}
if (pass == 4) {
AppendCompanyNode(pcompanyList, pcompanyName, pcompanySMSPrice, pcompanyMMSPrice);
pass = 1;
}
} while (!feof(f));
디버거를 실행 한 후, 나는 그것이 전체 라인에 도달하는 경우에도이 루프 밖으로 이동하지 않기 때문에 내가 가진 모든 충돌 문제가있는 것으로 나타났습니다.
어떻게 올바르게 작성해야합니까?
답변에 따르면 간결한 대답은 "당신은 feof()를 사용하지 않습니다"입니다. 'feof()'를 사용하는 유일한 경우는 기본 입력 함수 (예 : fgets())에서 오류 또는 오류 표시가 나타나고 EOF와 오류를 구별하기로 결정한 경우입니다. 가장 자주, 대부분의 사람들은이 두 가지 (특히, 내가 본 코드 중 대부분)를 구별하지 않습니다. 나는'feof() '를 전혀 사용하지 않았다는 것을 기억합니다. 즉, 나는 C 프로그램의 지난 25 세기 동안 두 번이나 사용했을 것입니다. –
@Jonathan : 오류가 발생했는지 알고 싶다면'feof (f) '보다는'ferror (f)'를 확인하는 것이 훨씬 더 합리적이라고 생각합니다. 때로는 'feof'가 do-while 루프에서 유용하지만 대부분의 경우에는 쓸모가 없다고 동의합니다. –
@R .. : 네,'feof()'보다'ferror()'를 사용하는 것이 더 합리적입니다 만, 나는 자주 사용하지 않는다고 고백합니다. 하지만 제 의견에 그렇게 말 했어야했는데 - 아니면 공간이 부족한 이후로 두 번째 것을 추가해야했습니다. –