Seung's Learning Record

[ C++ ] 표준 입출력 본문

프로그래밍/C++

[ C++ ] 표준 입출력

70_0ewd 2023. 10. 28. 01:08

키보드를 통해 입력하는 것을 표준 입력, 데이터를 출력해내는 것을 표준 출력이라고 한다. 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