키보드를 통해 입력하는 것을 표준 입력, 데이터를 출력해내는 것을 표준 출력이라고 한다. c++에서는 이 표준 입출력이 어떻게 이루어지는지 확인해보자!
#include <iostream>
c에선 표준 입출력 함수 사용을 위해 stdio.h 헤더파일을 include해준다. c++에서 이와 같은 역할을 해주는것이 바로 iostream이다.
c++에서 사용자 정의 헤더를 제외한 표준 헤더 파일을 가져올땐 .h를 붙이지 않는점을 주의하자.
cin, cout
c언어의 표준 입출력 방식과 가장 큰 차이점은 아무래도 변수의 형식을 신경써도되지 않는다는 점이 아닐까싶다.
c++의 표준 입출력 함수를 사용할 땐 사용하려는 변수의 자료형을 알지 못하여도 사용할 수 있다. 컴파일러가 가장 알맞은 자료형을 선택해서 적용해주기 때문에 사용자의 실수로 인한 문제 발생 가능성이 낮아지는 이점이 있다.
#include <iostream>
using namespace std;
int main(void){
int a;
cin >> a;
int b=30;
cout << a << endl;
return 0;
}
공백을 포함한 문자열 입력
c++은 c언어보다 문자열을 입력하는게 훨씬 간단하다. 하지만 cin을 사용하여 공백을 포함한 문자열을 입력하면 공백 앞에서 문자열이 끊긴채 저장이 된다.
string s;
getline(cin,s);
cout << s;
그럴땐 getline을 사용하여 문자열을 입력받을 수 있다.
ios::sync_with_stdio(false), cin.tie(nullptr)
cin, cout을 사용할 때 입출력으로 인한 시간초과를 막기위해서 저 두 명령어를 사용한다.
ios::sync_with_stdio(false)
c언어에서의 입출력함수와 c++에서의 입출력함수는 서로 다른 stream을 사용한다. 사용자는 두 스트림이 다르든말든 신경을 쓸 필요가 없기에 시스템 자체에서 두 스트림을 동기화시켜 동시에 사용할 수 있게해준다. 하지만 c++만 사용할 것이면 굳이 동기화 하는데에 많은 시간을 쏟을 필요가 없는데 이때 쓸 수 있는게 동기화를 끊어주는 sync_with_stdio(0)명령어이다.
cin.tie(nullptr)
문자가 출력될 땐 콘솔이 아닌 출력버퍼에 먼저 저장된 후, 버퍼에서 지워지면서 콘솔에 보여지게 된다. 입력도 마찬가지로 입력버퍼에 어느정도 모인뒤에 값이 들어가게된다. 이때, 입출력이 번갈아 이루어지면 버퍼의 존재로 인해 순서가 꼬이게 될 수 있다. 이를 방지하기 위해서 기본적으론 cin명령어 수행전에 cout버퍼를 비워준다. 하지만 여러 코테사이트를 보면 출력값만 판단을 하는데 이는 곧 입출력값의 순서가 좀 뒤바뀐다고 문제가 오답처리가 되는게 아니라는걸 뜻한다. 따라서 출력 버퍼를 비우는 과정을 무시해주는 명령어 cin.tie(0)을 사용함으로써 약간의 시간을 아낄 수 있다.
비슷한 결로 endl 명령어 역시 가급적이면 피해주는것이 좋다. endl명령어는 개행을 출력하고 출력버퍼를 비워라 라는 명령어이기 때문에 이 역시 출력버퍼를 비우는데 시간이 할당되게 된다. 굳이 줄바꿈이 필요하다면 \n을 쓰는걸 추천!
'프로그래밍 > C++' 카테고리의 다른 글
[ C++ ] 함수 (Function) (0) | 2023.10.29 |
---|---|
[ C++ ] 조건문 (1) | 2023.10.28 |
[ C++ ] 데이터의 형변환 (1) | 2023.10.26 |
[ C++ ] 상수와 const (0) | 2023.10.08 |
[C++] char형과 bool형 (0) | 2023.10.08 |