코드^학습/메모한 지식
C feof 함수에서 알아두고 넘어갈 부분
청년박군
2016. 1. 18. 11:28
C에서 파일 읽기를 할때 feof로 파일의 끝을 알아내는 함수를 사용합니다.
그래서 코드를 이렇게 작성하게 됩니다.
while ( feof(fp) == 0 )
{
fscanf(fp, "%d", &read);
fscanf(fp, "%c", &c);
if ( read != 0 )
{
add_node_list(read);
}
read = 0;
}
이 코드를 보면 feof의 리턴값이 0인 상태, 즉 아직 파일의 끝이 아닐 때는 파일에서 내용을 읽어옵니다.
그러면 파일에서 마지막 내용을 읽어 왔을 때 함수를 정지할 것이라 예상할 수 있겠죠?
그런데... 사실 돌려보면 한번 더 읽어오지는 않지만 이전에 있었던 값이 남아 있어서 if ( read != 0 ) 이 조건문이 아니라면 add_node_list()는 한번 더 동작하게 됩니다.
왜 그런걸까요?
이는 feof를 제대로 이해하지 못한 부분이 원인입니다. feof는 파일의 끝을 만나도 0을 리턴하고 끝을 지나야만이 0이아닌 값을 리턴하게 됩니다.
그래서 반복문에서 한번 더 동작하는 것이지요. 이를 알고 넘어가야 할 것입니다.