Game !

파일입출력을 사용할때 eof에 대해 이해해보자

 

eof 는 f

stream 

객체가 EOF를 만나면 상수 -1 로서, 참값을 반환한다. (조건식에서 0은 거짓, 나머지는 참)

 

eof 는 파일의 끝에 도달하면 반환(-1)을 한다

== 파일의 끝에 도달하면 eof 가 반환이 된다


파일입출력에 대한 예제코드를 보자

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
#include <iosteam>
/**/
#include <fstream>
using namespace std;
 
ofstream fout; //화면에서 파일로
ifstream fin; //파일에서 화면으로
 
void main()
{
    /* 배열을 어디까지 사용했는지 idx 변수 */
    int accNum;
    /* 파일 읽기를 위한 변수 */
    int count = 0;
 
    accNum = takeFile(accArr, count); //accArr은 클래스 변수
    
    switch(num)
    {
        case EXIT:
        fout.open("accountInfo.txt");
        break;
    }
}
 
void takeFile(Account* acc, int* _count)
{
    /* 프로젝트 안에 있는 파일을 부를 시, 그냥 파일이름만 쓰면 된다
아닐시, 모든 경로를 적어주어야 한다. */
    fin.open("accountInfo.txt");
 
    while(1)
    {
        /* 파일에서 1개를 읽어옵니다 */
        fin >> accArr[_count].user_Name >> accArr[_count].user_ID >> accArr[_count].money;
        /* 읽을 것이 없다면 루프를 빠져나갑니다. 
[예제부분] */
        if( fin.eof() )
        {
            cout << "no data.." <<endl;
            break;
        }
        /* 몇개를 읽었는지 배열 idx 카운트다운 해줍니다. */
        _count++;
    }
    fin.close();
}
 cs

 

예제 코드 조건문에서

 

 

 

if( fin.eof())  // if eof 가 참이라면 == 파일의 끝에 도달했다면

 

 

 

으로 이해할 수 있다

 

(cf. if의 조건식에서, 0은 거짓이고 나머지는 모두 참으로 인식한다)

 

 

반대로,

 

! fin.eof() 는 eof 의 반대이므로

( cf. ! 는 논리 NOT 연산자 / 참 일 경우 거짓을, 거짓 일 경우 참을)

 

파일의 끝에 도달하지 않았다면

으로 이해할 수 있다

 

 

 

/* C 에서 EOF */

 

 

if( fscanf("~", ~) != EOF)

{

//문자열 끝에 도달하지 않았다면

}

else

{

//문자열 끝에 도달했다면

}

'C++' 카테고리의 다른 글

[C++] 템플릿 이것저것(정리중...)  (0) 2017.12.27
[C++] 메세지 패싱  (0) 2015.09.17
[C++] 싱글톤에 대한 정리  (0) 2015.09.02
[C++] 함수로 주소값 전달하는 방법  (0) 2015.08.25
[C++] 강제 형변환 & 자동 형변환  (0) 2015.04.24