본문 바로가기

c++

기본 입출력 cin / cout

c언어에서는 <stdio.h>를 통해 scanf, printf와 같은 표준 입출력 함수들을 제공한다.
마찬가지로 c++에서는 <iostream> 파일을 통해 cin과 cout 개체를 사용하여 표준 입출력을 수행할 수 있다.

<iostream>은 STL(Standared Template Library, 표준 템플릿 라이브러리)에서 제공하는 클래스이다. STL에서 제공하는 클래스를 사용하기 위해서는 namespace std를 사용해야한다. 따라서 using문을 이용하여 이를 사용하겠다는 것을 명시해야 한다.

iostream은 말그대로 해석하면 입출력 스트림, 문자의 연속적인 흐름을 의미한다. iostream은 프로세스의 데이터를 다른 장치에 읽고 쓸 때 사용하는 클래스를 정의하고있다. 이 중 키보드로 입력받고 콘솔 화면에 출력하는 데 쓰이는 것이 바로 cincout이다. 사용법은 다음과 같다.

#include <iostream>
using namespace std;

void testInAndOut();
int main() 
{
	testInAndOut();
	return 0;
}

void testInAndOut() 
{
	char *name = (char *)malloc(256*sizeof(char));
	int stdID;
	cout << "이름과 학번을 입력하세요 : " << endl; // endl 대신 '\n'를 사용하면 flush를 불필요하게 호출하지 않아 속도가 빨리진다
	cin >> name >> stdID;
	cout << "이름 : " << name << " 학번 : " << stdID << endl;
}

 

위 코드처럼 using namespace std;를 호출하면 std::cin, std::endl과 같이 앞에 std::를 붙여주어야하는 불편함을 덜어준다. 더 자세하게 알아보아야하지만 일단 namespace의 역할은 이정도로만 알아보자

cin과 cout의 단점은 기존의 scanf, printf보다 수행시간이 더 길어진다.
줄바꿈을 할 때 사용되는 endl을 '/n'으로 대체하면 출력 속도를 높일 수 있다.
이 외에도 ios::sync_with_sdio(false); cin::tie(NULL); 을 호출하면 cin, cout 수행속도를 c의 입출력 속도만큼 빠르게 만들어준다.
다만 이와같이 호출할 경우 scanf, printf 등의 C 표준 입출력을 사용할 수 없게되고 멀티스레딩을 할 수 없게된다. 따라서 기본 변수 입출력 시에는 scanf(문자열의 경우 fgets(*string))와 printf를 사용하는 것이 일반적이다.