[C] 파일 읽는거 마지막 줄이 중복 출력 되네요

stargt의 이미지

#include <stdio.h>

main()
{
      FILE *fp;
      char s[256];
      int i = 1;
      
      fp = fopen("abc_.txt", "r");
      if(fp == NULL)
            return;
      while(feof(fp) == 0){
            fgets(s, 255, fp);
            printf("%04d: %s", i, s);
            i++;
      }
      fclose(fp);
}

위의 코드대로 작성한다음

abc_.txt 파일을

abcdefg[엔터]
hijklmn[엔터]
opqrstu[엔터]
vwxyz[엔터]

이렇게 한후 실행했더니 결과가 원래

0001: abcdefg
0002: hijklmn
0003: opqrstu
0004: vwxyz

이렇게 나와야 정상인데

0001: abcdefg
0002: hijklmn
0003: opqrstu
0004: vwxyz
0005: vwxyz

이렇게 나옵니다.

그래서 abc_.txt 파일의 마지막에 있는 [엔터]를 제거했더니 원하던데로 나오고요...

그런데 진짜 책에는 끝에 엔터 넣으라고 나와있는데;

이거 또 성안당(출판사) 책이 이상한건가요? 그게 맞으면 성안당 책에서 코드 오류 6번째 발견한거 되는데;

monpetit의 이미지

#include <string.h>     
      ...
      while(feof(fp) == 0){ 
            memset(s, 0, 256);
            fgets(s, 255, fp); 
            printf("%04d: %s", i, s); 
            i++; 
      } 
      ...

fgets()를 사용하기 전에 memset()으로 버퍼를 초기화시켜 주시면 어떨까요?

cinsk의 이미지

stargt의 이미지

흠... 감사합니다

#include <stdio.h>

int main()
{
while(1)
printf("0");
return 0;
}