1. cin이란?
- 사용자로부터 데이터를 입력받을 때 사용한다.
- 스트림 방식으로 데이터를 가져오며, 입력받은 데이터를 특정 변수에 저장한다.
#include <iostream>
using namespace std;
int main() {
int age;
cout << "Enter your age: ";
cin >> age; // 사용자로부터 입력받아 변수 age에 저장
cout << "Your age is " << age << endl;
return 0;
}
1-1. cin의 특징
int a, b;
cin >> a >> b; // 두 변수에 각각 값 입력
- 숫자, 문자 등의 입력은 공백 또는 개행 문자로 구분된다.
2. cout란?
- 데이터를 화면에 출력할 때 사용한다.
- 스트림 방식으로 데이터를 화면에 전달한다.
#include <iostream>
using namespace std;
int main() {
cout << "Hello, World!" << endl; // 텍스트 출력
return 0;
}
2-1. cout의 특징
cout << "Age: " << 25 << ", Height: " << 170.5 << endl;
- endl은 개행을 포함하며 출력 버퍼를 비운다.
count << "Hello" << endl;은 cout << "Hello\n";과 비슷하지만 버퍼 관리에서 차이가 있다.
3. cin과 cout의 작동원리
- 스트림(stream)으로 동작하며 입출력 장치와 데이터를 주고받는다.
- 버퍼링을 통해 입출력 속도를 조정한다.
3-1. 스트림 방식
- 입력 스트림 버퍼
: 키보드 입력을 먼저 저장한 뒤, 프로그램이 데이터를 요청하면 이를 전달한다.
- 출력 스트림 버퍼
: 출력 데이터를 모아두었다가 특정 조건(endl, flush)이 충족되면 한 번에 출력한다. 
4. 주의 사항
- cin과 cout의 성능:
기본적으로 동기화된 상태에서 작동하며, C의 scanf와 pritnf보다 느릴 수 있다. 따라서 아래 코드처럼 동기화를 비활성화하는 경우가 많다.
ios::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
- 에러 처리:
입력값이 잘못되면 버퍼가 비워지지 않아 문제가 생길 수 있다. 이를 해결하려면 아래 코드처럼 버퍼를 정리해야 한다.
cin.clear(); // 에러 플래그 초기화
cin.ignore(INT_MAX, '\n'); // 남아 있는 버퍼 비우기