C++ 입출력 마스터: 콘솔 I/O부터 fstream 파일 제어까지
안녕하세요! Coding by Head입니다. C++ 프로그래밍의 시작은 사용자와 소통하는 '입출력'에서 시작됩니다. 오늘은 표준 입출력 라이브러리인 <iostream>의 핵심 사용법과 실무에서 자주 발생하는 문제들을 해결하는 방법을 정리해 보겠습니다.

1. C++ 표준 입출력 스트림 (Standard Streams)
C++은 스트림(Stream)이라는 개념을 통해 데이터를 주고받습니다. 데이터가 흐르는 통로라고 이해하면 쉽습니다.
- std::cin: 표준 입력 (키보드)
- std::cout: 표준 출력 (모니터)
- std::cerr: 표준 에러 (버퍼를 거치지 않고 즉시 출력)
- std::clog: 로그 출력 (버퍼링을 거치는 로그용)
2. 기본 출력과 형식 제어 (cout, iomanip)
cout은 << (삽입 연산자)를 사용해 데이터를 출력합니다. 이때 데이터의 모양을 예쁘게 만들기 위해 <iomanip> 라이브러리를 함께 사용합니다.
소수점 자릿수 조절 예제
#include <iostream>
#include <iomanip> // 형식 제어용 헤더
int main() {
double pi = 3.1415926535;
std::cout << "기본 출력: " << pi << std::endl;
// 소수점 고정 및 2자리까지 출력
std::cout << std::fixed << std::setprecision(2);
std::cout << "고정 소수점(2자리): " << pi << std::endl;
return 0;
}
3. 입력의 함정: cin vs getline
많은 초보자가 std::cin을 사용하다가 공백(Space)이 포함된 문자열에서 입력을 멈추는 현상을 겪습니다.
- std::cin >> var;: 공백이나 엔터를 기준으로 단어 하나만 읽습니다.
- std::getline(std::cin, var);: 한 줄 전체(공백 포함)를 읽습니다.
실전 팁: 버퍼 비우기
cin 다음에 getline을 쓸 때는 버퍼에 남아있는 '엔터(\n)'를 제거해야 합니다. 이때 std::cin.ignore()를 사용하세요.
std::cin >> age;
std::cin.ignore(); // 버퍼에 남은 엔터 제거
std::getline(std::cin, fullName);
4. 파일 입출력 (fstream)
로그 저장이나 데이터 로드를 위해 파일 제어는 필수입니다. <fstream> 헤더를 사용합니다.
파일 쓰기/읽기 통합 예제
#include <iostream>
#include <fstream>
#include <string>
int main() {
// 1. 파일 쓰기 (ofstream)
std::ofstream outFile("data.txt");
if (outFile.is_open()) {
outFile << "Coding by Head - C++ 포스팅" << std::endl;
outFile.close();
}
// 2. 파일 읽기 (ifstream)
std::ifstream inFile("data.txt");
std::string line;
if (inFile.is_open()) {
while (std::getline(inFile, line)) {
std::cout << "파일 내용: " << line << std::endl;
}
inFile.close();
}
return 0;
}
💡 알고리즘 성능 최적화 (Fast I/O)
코딩 테스트나 대량의 데이터를 다룰 때 cout이 느리게 느껴진다면, 아래 코드를 main 함수 최상단에 추가하세요. C 표준 스트림과의 동기화를 끊어 속도를 획기적으로 높여줍니다.
ios_base::sync_with_stdio(false);
cin.tie(NULL);
💡 std::endl vs \n
std::endl은 줄을 바꾸고 출력 버퍼를 강제로 비우는(flush) 작업을 수행합니다. 단순히 줄바꿈만 필요하다면 성능상 \n을 사용하는 것이 더 빠릅니다.
마치며
이번 포스팅에서는 C++ 입출력의 기초부터 실무 팁까지 다뤘습니다. 특히 공백 입력 처리와 출력 형식 제어는 매우 자주 쓰이는 기술이니 꼭 직접 코딩해 보시기 바랍니다.
다음 포스팅에서는 프로그램의 두뇌가 되는 연산자와 조건문에 대해 알아보겠습니다. 궁금하신 점은 댓글로 남겨주세요!
'Core Programming > Modern C++ & System Design' 카테고리의 다른 글
| C++ 함수 완벽 가이드: 선언과 정의부터 매개변수 전달 방식(Call by Reference)까지 (0) | 2024.12.18 |
|---|---|
| C++ 반복문 완벽 가이드: for, while, do-while 차이점과 활용법 (0) | 2024.12.18 |
| C++ 조건문 완벽 가이드: if, else if, switch문 사용법 및 성능 비교 (0) | 2024.12.17 |
| C++ 기초: 데이터 타입 총정리 및 변수 선언법 (int, double, static 변수) (0) | 2024.12.17 |
| C++ 시작하기: Windows & Linux 개발 환경 설정부터 Hello World까지 완벽 가이드 (0) | 2024.12.17 |