• CSE207 객체지향 강좌 및 C++ 관련, 누구나 묻고 답하는 게시판 입니다.
  • CSE207 수강생이 아니여도 편안하게 질문하세요.
  • 첨부화일은 이미지 화일 혹은 zip 화일로 업로드 하기를 권합니다.

제목[re]질문입니다!2019-09-30 18:02
작성자

1. Algebra 뒤에 endl 즉, 'n'이 있어 텍스트 파일 가장 끝이 아니라서 break가 실행되지 않으므로 Algebra와 'n'가 출력됩니다.


2. 원칙상 close를 하는 것을 추천드립니다.

하지만 fstream/ifstream/ofstream은 RAII(Resource acquisition is initialization) class라서 각각의 scope가 끝나면 자동으로 파괴되기 때문에

close를 하지않아도 각각의 scope가 끝나거나 프로그램이 종료되면 메모리 leak없이 프로그램이 종료됩니다.

따라서 fstream또한 close없이 사용하려면 다음과 같이 중괄호로 scope를 만들어서 사용할 수는 있지만 이번 학기 수업에서는 그냥 close를 쓰세요. 대부분의 경우 명시적으로 close를 사용합니다.

#include<iostream>

#include<string>

#include<fstream>

using namespace std;

 

int main() {

    string s1 = "Objective Oriented Programming";

 

    {

        ofstream fout;

        fout.open("example.txt");

        fout << s1 << endl;

        fout << "Random Variable" << endl;

        fout << "Linear Algebra" << endl;

    }

 

    {

        ifstream fin;

        char ch;

        fin.open("example.txt");

        if (!fin) {

            cout << "Error: no such file exists" << endl;

            exit(100);

        }

 

        while (true) {

            fin.get(ch);

            fin >> s1;

 

            if (!fin)

                break;

 

            cout << s1 << endl;

            cout << ch << endl;

        }

    }

    return 0;

}


3. 제시한 상황에서는 둘다 character하나를 받아오는 동작을 하므로 get과 operator>>의 차이는 없습니다.

get은 ifstream의 멤버함수(멤버함수가 뭔지는 추후에 class 배울때 나옴.)로서 전달인자가 char형이거나 c-string 형태인 char*형으로만 받아오지만,

operator>>는 cin에서 사용했던것처럼 작동하기 때문에 char형 대신 int, float 등을 사용하여 해당 자료형으로 받아올 수 있습니다.


참고:

2)

https://stackoverflow.com/questions/748014/do-i-need-to-manually-close-an-ifstream 

https://stackoverflow.com/questions/4802494/do-i-need-to-close-a-stdfstream/4802506 

https://www.toptip.ca/2012/11/is-it-necessary-to-manually-close.html 

3)

http://www.cplusplus.com/reference/istream/istream/get/

http://www.cplusplus.com/reference/istream/istream/operator%3E%3E/ 



댓글
이전질문입니다!2019-09-27
다음[re][re]질문입니다!2019-09-30