학습일지/C와 C++

C++ Console IO

Tsukino Ren 2026. 3. 8. 01:04

Console IO란 ?

Console IO는 프로그램이 콘솔 창(터미널, 명령 프롬프트) 을 통해 사용자와 데이터를 주고받는 것을 말한다.

  • Input(입력) : 사용자에게 값을 입력받음
  • Output(출력) : 사용자에게 입력받은 값을 화면에 보여줌

C++에서는 이와 같이 사용한다.

  • std::cout → 출력
  • << → 출력 연산자
  • std::cin → 입력
  • >> → 입력 연산자
  • std::endl → 줄바꿈

iostream

Console IO를 사용하기 위해선 헤더를 포람해야 된다.

#include <iostream>

이 헤더를 사용함으로 cout, cin , endl 즉 콘솔 입출력 기능에 포함된 키워드를 사용할 수 있다.


cout

cout은 console output 의 줄임말로 콘솔에 데이터를 출력하는 객체이다.

<< 연산자

<< 이 연산자는 삽입 연산자 (insertion operator)라고 하며 오른쪽 데이터를 왼쪽 스트림으로 보낸다 라는 뜻한다.

예시

#include <iostream>

int main(void)
{
	std::cout << "Hello World";
}

출력


endl

줄바꿈 기능이 있고 버퍼를 강제로 비우는 기능이 있다.

\n

줄바꿈 기능만 수행하며 버퍼는 시스템 판단하에 자동으로 비워진다.

예시

int main(void)
{
	std::cout << "이름 : " << "Taskino Ren" << std::endl;
	std::cout << "나이 : " << "Secret\n";
	std::cout << "끝";
}

출력

endl; 주의점

버퍼를 비우는 작업은 시스템 자원 소모가 많다고 하기에 endl를 남발하게 되면 프로그램의 속도가 현저히 느려져서 성능 저하가 될수 있다.


cin

cin은 console input의 줄임말로 사용자에게 값을 입력받을 때 사용한다.

>> 연산자

입력에서 사용하는 연산자로 추출 연산자 (extraction operator) 라고 하며 입력 스트림에서 데이터를 꺼내 변수에 저장한다.

예시

int main(void)
{
	std::string name;
        std::cin >> name;
	
	std::cout << "이름 : " << name << "\n";
	std::cout << "끝";
}

출력

추가

std::string name; 같이 문자열을 받는 것을 사용할 때 는 이 헤더를 포함해야된다.

#include <string>

getline

cin >> 은 공백 전까지만 입력받는다. 이때 사용하는게 getline 이다.

예시

int main(void)
{
	std::string name;

	std::getline(std::cin, name);

	std::cout << "이름 : " << name << "\n";
	std::cout << "끝";
}

출력

cin + getline 문제점

예시

int main(void)
{
	int age;
	std::string name;

	std::cin >> age;
	std::getline(std::cin, name);

	std::cout << "이름 : " << name << "\n";
	std::cout << "나이 : " << age << "\n";
	std::cout << "끝";
}

출력

이렇게 하게되면 name 이 빈 문자열이 되게 된다.

cin >> age 입력후 버퍼에는 18\n 이 저장되고 cin 은 순자만 가져가고 \n이 getline 에서 읽어버리기에 발생하는 문제다.


clear(), ignore(), fail()

cin + getline 의 문제를 해결할 구원 투수들이다.


fail()

입력이 실패했는지 확인하는 함수로 cin이 정상적으로 값을 읽었는지 검사한다.

예시

int main(void)
{
	int age;

	std::cin >> age;

	if (std::cin.fail())
	{
		std::cout << "입력을 실패하였습니다.\n";
	}
	else
	{
		std::cout << "나이 : " << age << "\n";
	}
}

출력


clear()

입력 스트림의 오류 상태를 제거하는 함수로 입력이 실패하면 cin은 fail state가 된다. 이 상태에서는 더 이상 입력을 받을 수 없기에

clear() 로 초기화를 해야한다.

예시

int main(void)
{
	int age;

	std::cin >> age;
	
	std::cin.clear();

	if (std::cin.fail())
	{
		std::cout << "입력을 실패했습니다." << "\n";
	}
	else
	{
		std::cout << "나이 : " << age << "\n";
	}
}

출력


ignore()

입력 버퍼에 남아있는 데이터를 버리는 함수로 사용자가 입력한 값이 버퍼에 남아 있을 수 있는데

남아 있는 값으로 다음 입력이 생략되고 진행되던게 그 데이터를 지워버려서 다음 입력이 가능하게끔 해주는 장치이다.

예시

int main(void)
{
	int age;
	int num;

	std::cin >> age;

	std::cin.clear();
	std::cin.ignore(LLONG_MAX, '\n');

	std::cin >> num;

	std::cout << "나이 : " << age << "\n";
	std::cout << "좋아하는 숫자 : " << num << "\n";
}

출력


버퍼 (Buffer)

입력과 출력은 버퍼 라는 임시 저장 공간을 사용한다. 비유하자면 잠시 휴게소에 들렀다가 다시 출발하는 것처럼

데이터도 버퍼라는 공간에 잠시 저장된 후 프로그램으로 전달된다.

버퍼가 필요한 이유

  • 디스크 / 네트워크는 상대적으로 느림, CPU는 매우 빠름 그래서 데이터를 버퍼에 잠시 모아서 처리하기 위함
  • 데이터를 하나씩 보내면 비효율적이기 때문에 버퍼에 모았다가 한번에 효율적인 데이터 처리를 하기 위함

마무리

2026.03.16 내용을 전반적으로 복습하면서 추가하고 갈아엎으며 작성하다보니 내가 알고있던 것보다 더 많은 내용이 담겨있음을 배웟고 여태 쓰라니까 썻지~ 라는 상태엿으면 아 이래서 써야됫구나 라는 상태까지 오게 되었다.

'학습일지 > C와 C++' 카테고리의 다른 글

C/C++ 전직  (0) 2026.03.10
C/C++ Class  (0) 2026.03.09
C/C++ 지금까지 배운 C 문법 활용해보기!  (0) 2026.03.06
C/C++ 상태창 구현<과제>  (0) 2026.03.06
C/C++ 함수  (0) 2026.03.05