newclass
2025. 3. 27. 23:04
2.3 입출력
2.3.1 표준 입출력 스트림
C++에서는 <iostream> 헤더에 정의된 스트림 객체를 통해 입출력을 처리합니다:
- std::cout: 표준 출력 (콘솔에 출력)
- std::cin: 표준 입력 (키보드로부터 입력)
- std::cerr: 표준 오류 (오류 메시지 출력)
- std::clog: 표준 로그 (로그 메시지 출력)
#include <iostream>
int main() {
// 표준 출력
std::cout << "안녕하세요!" << std::endl;
// 여러 값 연결
int age = 25;
std::cout << "나이: " << age << "세" << std::endl;
// 오류 메시지
std::cerr << "오류: 파일을 찾을 수 없습니다." << std::endl;
return 0;
}
2.3.2 스트림 조작자
출력 형식을 제어하는 조작자(manipulator):
#include <iostream>
#include <iomanip> // 조작자를 위한 헤더
int main() {
double pi = 3.14159265359;
// 고정 소수점 표기와 정밀도 지정
std::cout << "기본: " << pi << std::endl; // 3.14159
std::cout << "고정: " << std::fixed << pi << std::endl; // 3.141593
std::cout << "고정(2자리): " << std::fixed << std::setprecision(2) << pi << std::endl; // 3.14
// 과학적 표기법
std::cout << "과학: " << std::scientific << pi << std::endl; // 3.141593e+00
// 필드 너비와 채우기
std::cout << "너비(10): " << std::setw(10) << pi << std::endl; // ' 3.14'
std::cout << "채우기: " << std::setfill('*') << std::setw(10) << pi << std::endl; // '****3.14'
// 진법 변경
int num = 255;
std::cout << "10진수: " << num << std::endl; // 255
std::cout << "16진수: " << std::hex << num << std::endl; // ff
std::cout << "8진수: " << std::oct << num << std::endl; // 377
// 불리언 값 출력
bool flag = true;
std::cout << "기본: " << flag << std::endl; // 1
std::cout << "문자: " << std::boolalpha << flag << std::endl; // true
return 0;
}
2.3.3 기본 입력 처리
#include <iostream>
#include <string>
int main() {
// 정수 입력 받기
int age;
std::cout << "나이를 입력하세요: ";
std::cin >> age;
std::cout << "입력한 나이: " << age << std::endl;
// 여러 값 입력 받기
int x, y;
std::cout << "두 정수를 입력하세요: ";
std::cin >> x >> y;
std::cout << "합: " << x + y << std::endl;
// 문자열 입력 받기
std::string name;
std::cout << "이름을 입력하세요: ";
std::cin >> name; // 공백 전까지만 입력 받음
std::cout << "안녕하세요, " << name << "님!" << std::endl;
// 입력 버퍼 비우기
std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
// 공백을 포함한 문자열 입력 받기
std::string fullName;
std::cout << "전체 이름을 입력하세요: ";
std::getline(std::cin, fullName); // 한 줄 전체 읽기
std::cout << "환영합니다, " << fullName << "님!" << std::endl;
return 0;
}
2.3.4 입력 검증 및 오류 처리
#include <iostream>
#include <limits>
int main() {
int number;
bool validInput = false;
while (!validInput) {
std::cout << "양수를 입력하세요: ";
std::cin >> number;
if (std::cin.fail()) { // 입력 실패 (예: 문자를 입력)
std::cin.clear(); // 오류 상태 초기화
std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n'); // 버퍼 비우기
std::cout << "오류: 숫자를 입력하세요." << std::endl;
} else if (number <= 0) { // 논리적 오류
std::cout << "오류: 양수를 입력하세요." << std::endl;
} else {
validInput = true; // 유효한 입력
}
}
std::cout << "입력한 값: " << number << std::endl;
return 0;
}