대표적으로 cin과 scanf가 있다. cin은 개행문자 직전 까지 입력을 받고 scanf는 형식을 지정해서 입력을 받는다.
cin, scanf Usage
int a;
int main()
{
cin >> a;
scanf("%d", &a);
return 0;
}
ps) cin은 개행문자(space, enter) 이후는 입력받지 않는다.
ps2) scanf의 타입들
ps3) getline >> 개행 문자까지 포함하여 입력을 받는다
string s;
int main()
{
getline(cin, s); // cin 스트림의 입력을 문자열 s에 받는다.
cout << s << '\n';
return 0;
}
여러 줄의 문자열을 받을때에는 bufferflush를 통해 버퍼를 초기화 시켜준 뒤 입력을 받아야 한다.
(초기 cin으로 받을 때, 개행문제 직전까지 입력을 받게되기 때문에, 버퍼에 개행문자가 남게 된다.)
int T;
string s;
int main()
{
cin >> T;
string bufferflush;
getline(cin, bufferflush); // bufferflush(null)
for(int i = 0; i < T; i++) {
getline(cin, s);
cout << s << "\n";
}
return 0;
}
출력은 cout 과 printf가 있다. 마찬가지로 printf는 형식을 지정해서 출력하게 된다.
string a = "dddd";
string b = "eeee";
int main() {
cout << a << endl; //endl = '\n'
cout << a << " " << b << endl;
printf("%s\n", a);
return 0;
}
ps) cout의 실수 소수자리 조정
cout.precision(자릿수 + 1)을 사용하여 조절 가능(반올림)
double a = 1.23456789;
cout.precision(4);
cout << a << endl; //1.23
ps) printf의 실수 소수자리 조정
double a = 1.23456789;
int b =12;
int c = 2;
printf("%.6lf\n", a); /// 1.234567
printf("%02d\n"); //12
printf("%02d\n"); //02
```
### pair & tuple
pair와 tuple은 타입이나 자료구조가 아닌, C++에서 제공하는 utility 라이브러리 헤더의 템플릿 클래스이다.
pair는 first와 second라는 멤버 변수를 가지며, 두가지 값을 담아야 할때 쓴다.
tuple은 세가지 이상의 값을 담을 때 쓰는 클래스이다.
1. tie
tie는 pair나 tuple로 부터 값을 가져올 때 사용한다. (a = pi.first 같이 멤버 접근자로도 가져올 수 있다. 다만, tie는 다른 방식을 제공한다.)
tuple은 (get<0>, get<1> get<int(타입이 아닌 인덱스 값을 의미> tie 없이 꺼낼 수 있다.
```
pair<int, int> pi;
tuple<int, int, int> tl;
int a, b, c;
int main()
{
pi = {1, 2}; // tuple에 멤버 할당 (first -> 1, second -> 2)
tl = make_tuple(1, 2, 3); // make_tuple 함수를 이용하여 생성하여 할당.
tie(a, b) = pi; // tie함수를 이용하여, a, b에 각각 pi로 부터 first, second 할당.
cout << a << " : " << b << "\n";
tie(a, b, c) = tl; // 마찬가지로 순서대로 a, b, c 에 할당.
...
a = get<0>(tl); // tuple의 첫번째 원소
b = get<1>(tl); // tuple의 두번째 원소
}
```
### auto 타입
auto는 타입추론을 하여 결정되는 타입이다. 자동으로 타입을 추론해준다. 주로 복잡하고 긴 타입의 변수명을 대신할 때 쓰인다.
```
int main()
{
vector<pair<int, int>> = v; // pair의 vector
for(int i = 1; i <= 5; i++)
{
v.push_back({i, i});
}
for(auto it : v) { // auto it를 이용해 벡터의 요소 타입을 추론
cout << it.first << " : " << it.second << '\n';
}
return 0;
}
```