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 |