본문 바로가기
-----ETC-----/C++ 마스터 시리즈

[C++ 마스터] Day 22: 파일 입출력

by cogito21_cpp 2024. 8. 1.
반응형

파일 입출력 (File I/O)

파일 입출력은 프로그램이 파일과 데이터를 주고받는 기능을 말합니다. C++에서는 파일 입출력을 위해 <fstream> 헤더를 사용합니다. 주요 클래스에는 ifstream (입력 파일 스트림), ofstream (출력 파일 스트림), fstream (입출력 파일 스트림)이 있습니다.

 

1. 파일에 데이터 쓰기 (Writing to a File)

파일에 데이터를 쓰기 위해 ofstream 클래스를 사용합니다.

#include <iostream>
#include <fstream>

using namespace std;

int main() {
    ofstream outFile("example.txt");  // 파일 열기
    if (!outFile) {
        cout << "Error opening file for writing." << endl;
        return 1;
    }

    outFile << "Hello, World!" << endl;  // 파일에 데이터 쓰기
    outFile << "This is a test file." << endl;

    outFile.close();  // 파일 닫기

    return 0;
}

 

2. 파일에서 데이터 읽기 (Reading from a File)

파일에서 데이터를 읽기 위해 ifstream 클래스를 사용합니다.

#include <iostream>
#include <fstream>
#include <string>

using namespace std;

int main() {
    ifstream inFile("example.txt");  // 파일 열기
    if (!inFile) {
        cout << "Error opening file for reading." << endl;
        return 1;
    }

    string line;
    while (getline(inFile, line)) {  // 파일에서 한 줄씩 읽기
        cout << line << endl;
    }

    inFile.close();  // 파일 닫기

    return 0;
}

 

3. 파일에 데이터 추가 (Appending to a File)

기존 파일에 데이터를 추가하기 위해 ofstream 클래스의 ios::app 모드를 사용합니다.

#include <iostream>
#include <fstream>

using namespace std;

int main() {
    ofstream outFile("example.txt", ios::app);  // 파일 열기 (추가 모드)
    if (!outFile) {
        cout << "Error opening file for appending." << endl;
        return 1;
    }

    outFile << "Appending a new line." << endl;  // 파일에 데이터 추가

    outFile.close();  // 파일 닫기

    return 0;
}

 

예제 문제

문제 1: 사용자 입력을 파일에 저장하는 프로그램 작성

사용자로부터 여러 줄의 텍스트를 입력받아 파일에 저장하는 프로그램을 작성하세요. 사용자가 "END"를 입력하면 입력을 중지하고 파일을 닫습니다.

 

해설:

#include <iostream>
#include <fstream>
#include <string>

using namespace std;

int main() {
    ofstream outFile("user_input.txt");
    if (!outFile) {
        cout << "Error opening file for writing." << endl;
        return 1;
    }

    string line;
    cout << "Enter text (type 'END' to stop):" << endl;
    while (getline(cin, line)) {
        if (line == "END") {
            break;
        }
        outFile << line << endl;
    }

    outFile.close();
    return 0;
}

 

이 프로그램은 사용자로부터 여러 줄의 텍스트를 입력받아 파일에 저장하고, "END"를 입력하면 파일을 닫습니다.

 

문제 2: 파일에서 데이터를 읽어와 콘솔에 출력하는 프로그램 작성

파일에서 데이터를 읽어와 콘솔에 출력하는 프로그램을 작성하세요. 파일 이름은 사용자가 입력합니다.

 

해설:

#include <iostream>
#include <fstream>
#include <string>

using namespace std;

int main() {
    string filename;
    cout << "Enter filename to read: ";
    cin >> filename;

    ifstream inFile(filename);
    if (!inFile) {
        cout << "Error opening file for reading." << endl;
        return 1;
    }

    string line;
    while (getline(inFile, line)) {
        cout << line << endl;
    }

    inFile.close();
    return 0;
}

 

이 프로그램은 사용자가 입력한 파일 이름을 열어 데이터를 읽어와 콘솔에 출력합니다.

 

문제 3: 파일에 데이터를 추가하는 프로그램 작성

사용자로부터 추가할 텍스트를 입력받아 파일에 추가하는 프로그램을 작성하세요. 사용자가 "END"를 입력하면 입력을 중지하고 파일을 닫습니다.

 

해설:

#include <iostream>
#include <fstream>
#include <string>

using namespace std;

int main() {
    ofstream outFile("append_example.txt", ios::app);
    if (!outFile) {
        cout << "Error opening file for appending." << endl;
        return 1;
    }

    string line;
    cout << "Enter text to append (type 'END' to stop):" << endl;
    while (getline(cin, line)) {
        if (line == "END") {
            break;
        }
        outFile << line << endl;
    }

    outFile.close();
    return 0;
}

 

이 프로그램은 사용자로부터 추가할 텍스트를 입력받아 파일에 추가하고, "END"를 입력하면 파일을 닫습니다.

 

다음 단계

22일차의 목표는 C++의 파일 입출력에 대해 학습하는 것이었습니다. 다음 날부터는 간단한 콘솔 게임 프로젝트를 시작할 것입니다.

 

내일과 그 다음 날은 "프로젝트: 간단한 콘솔 게임 만들기"에 대해 다룰 예정입니다. 질문이나 피드백이 있으면 댓글로 남겨 주세요!

반응형