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

{

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

}

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

2차원 배열 동적할당 & 해제  (0) 2015.04.24
[C++] 강제 형변환 & 자동 형변환  (0) 2015.04.24
[C 기초] 자리맞춰서 출력하기  (2) 2015.04.20
중위 표기법 / 후위 표기법 이해  (0) 2015.04.16
정수 출력  (0) 2015.04.14

정수 출력2015. 4. 14. 20:57


정수의 각 자리수를 출력하는 함수를 재귀함수로 만들어보자




예제)

정수를 입력하시오 : 1234

실행 : 1 2 3 4


천의자리는 1, 백의자리는 2, 십의자리는 3, 일의자리는 4...

이렇게 차례대로 출력하면서 입력받는 숫자는 음수만 아니면 된다



1. 몫이 일의자리가 되는, 1~9 사이의 숫자를 찾는다

2. 찾은 숫자를 출력

3. 다음 계산할 숫자를 재귀함수의 매개변수로 넘겨준다


point

1~9 사이의 숫자 찾는 방법 :

10의 제곱으로 나누면서 몫이 일의자리인 숫자를 찾는다

== 가장 큰 자리 숫자


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
#include <math.h>
#include <stdio.h>
 
void main()
{
    int num;
 
    printf("정수를 입력하시오 : ");
    scanf("%d", num);
 
    
}
 
void Show_digit(int n)
{
    int k = 0; //지수
    int portion = n / (int)pow(10.0 , k);
 
    //몫이 일의자리인 수 찾기
    while(portion > 10 || portion < = 0)
    {
        k++;
        portion = n / (int)pow(10.0 , k);
    }
    
    printf("%d ", portion);
   if(k == 0)
   {
      return;
    }
    Show_digit(n % (int)pow(10.0 , k); 
}
cs


while 문이, 나눴을 때 몫이 1일 때의 가장 큰 자리수의 숫자를 찾는 반복문이다

while 문 괄호 안의 조건식이 거짓이 되면 반복문에서 벗어난다


그리고 가장 큰 자리수를 찾고 while문을 벗어났기때문에 그대로 몫을 출력해준다.

다음, 나머지를 매개변수로 다시 재귀호출을 한다


마지막으로 재귀함수이므로,

1(10의0승)으로 나누었을때 몫이 1개가 될 때를 탈출구문으로 만든다.