c언어 파일입출력 질문드립니다.
글쓴이: sks93 / 작성시간: 수, 2016/11/02 - 2:08오후
c언어에서 파일입출력을 할때
feof이나 eof로
파일의 끝을 확인하는걸로 알고있습니다.
그런데 만약 파일이 바로 지금 읽어들일 내용이 EOF일 때 0이 아닌 값을 리턴하고
이미 EOF에 도달했거나 넘어섰다면 0을 리턴한다고 알고있습니다.
시작할때 먼저파일을 읽고 그 파일에 제가 찾고자하는 값이 없을경우 파일에 데이터를 넣고 다시 파일을 읽는형식으로 하려합니다.
이때 만약 파일이 비어있는경우 eof를 어떻게 해야하나요?
eof이 파일이 비어있을때도 0을 리턴하기에 좀 애를먹고있네요
Forums:


feof() 는 그런 함수가 아닙니다. 매뉴얼 읽기
feof() 는 그런 함수가 아닙니다. 매뉴얼 읽기 귀찮으면 검색이라도 해보세요.
#include <stdio.h>
#include <stdio.h> int main(void){ int state; char a; //데이터를 읽기위한 스트림 생성 FILE* fp = fopen("D:\\mystory.txt", "rt"); /* fopen함수는 오류발생시 NULL을 리턴하므로 파일 개방 중 오류발생시 프로그램을 종료 */ if (fp == NULL){ printf("스트림 생성시 오류발생"); return 1; } /* 파일에 얼마의 데이터가 있는지 모른다고 가정 무한루프를 돌면서 계속 데이터를 출력 파일에 끝에 도달하면 feof함수에 의해 반복문 탈출 */ while (1){ if (feof(fp) != 0){ printf("파일의 끝에 도달했습니다.\n"); break; } //한글자씩 꺼내서 출력 a = fgetc(fp); printf("%c", a); } /* fclose함수는 종료시 오류가 발생하면 0이 아닌 다른값을 리턴하므로 비정상 종료로 판단되면 안내후 프로그램을 종료 */ state = fclose(fp); if (state != 0){ printf("스트림 제거시 오류발생"); return 1; } return 0; }코드만 올리시고 별다른 언급이 없어서 추측하건데,
코드만 올리시고 별다른 언급이 없어서 추측하건데,
위의 코드는 '잘못된 활용의 예'일거라고 믿습니다.
마지막으로 실행되는
a = fgetc(fp);
는 a 에 -1 을 집어넣습니다. (EOF 값이 -1 입니다)
따라서 변수 a의 타입은 char 가 아니라 int 가 되어야 합니다.
fgetc 의 함수원형은 다음과 같구요.
int fgetc ( FILE * stream );
그리고 예로 드신 코드에서 fgetc 가 EOF 를 반환하기 이전이라면
feof함수는 별다른 도움이 안됩니다.
안녕하세요?
진짜 잘 이해가 안되서 너무 궁금하네요..
fgetc의 EOF 값이 -1 이기때문에 a의 타입이 char가 아니라 int가 되어야 하는 이유는 무엇인가요?
조금은 이상하게 적어 놔서 죄송합니다.
조금은 이상하게 적어 놔서 죄송합니다.
char 가 아니라 int 가 되어야 하는 이유는...
1. fgetc 는 int 타입을 반환합니다.
int fgetc ( FILE * stream );
2. fgetc 반환값을 char 로 받을 경우,
스트림에서 읽어들인 데이터 0xff 와 EOF(=-1) 를 서로 구별할 수 없습니다.
댓글 달기