본문 바로가기

코드^학습/메모한 지식

C feof 함수에서 알아두고 넘어갈 부분

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이아닌 값을 리턴하게 됩니다.

그래서 반복문에서 한번 더 동작하는 것이지요. 이를 알고 넘어가야 할 것입니다.

'코드^학습 > 메모한 지식' 카테고리의 다른 글

C++ 복사 생성자에 대해  (0) 2016.02.02
inline 함수 by MSDN  (0) 2016.01.22
Sleep대신 이렇게도 써볼까?  (2) 2016.01.12
sizeof 연산의 리턴값의 자료형은?  (0) 2016.01.12
C 꼬리 재귀, Tail Recursion  (0) 2016.01.11