C++에서 입출력에 사용하는 streams
객체를 뜻함
stream
은 프로그램에서 문자들을 삽입하거나 추출하는 객체다.
기본적으로 표준 라이브러리에 여러 가지의 stream
오브젝트들이 있다.
cin
: 표준 입력 stream
cout
: 표준 출력 stream
cerr
: 표준 에러(출력) stream
clog
: 표준 로깅(출력) stream
crr, clog
은 기본적으로 cout
와 똑같이 작동되지만 에러 메세지와 로깅 용도로 사용된다는 목적을 명시한다. 개별적으로 리디렉션 될 수 있다. (확인 필요)
cout (표준 출력)
대부분의 프로그램 환경에서 “화면”을 의미함
출력 작업을 사용하기 위해서는 cout
에 삽입 연산자로 문자열을 넣어야 함. (<<)
cout << "Output sentence"; // prints Output sentence on screen
cout << 120; // prints number 120 on screen
cout << x; // prints the value of x on screen
// 여러 개의 삽입 연산자로 하나의 문장을 만들 수 있다.
// 연산자로 이어지는 문자들은 줄바꿈이나 띄어쓰기 되지 않는다.
cout << "This " << " is a " << "single C++ statement";
cout << "I am " << age << " years old and my zipcode is " << zipcode;
// 줄 바꿈은 "\n", str::endl 사용
cout << "First sentence.\n";
cout << "Second sentence.\nThird sentence.";
std::endl
조작자의 경우, \n와는 다르게 출력 버퍼를 비운다. 이는 알고리즘 문제나 일부 장치에서 시간 지연이 발생된다.
cin (표준 입력)
대부분의 프로그램 환경에서 “키보드”를 의미함
입력 작업을 하기 위해서는 cin
에 추출 연산자로 추출해야 함 (>>)
int age;
cin >> age;
// 여러 개를 한번에 추출
cin >> a >> b;
cin
에 저장된 값을 추출하고자 추출 연산자를 사용했다면 프로그램이 cin
의 입력을 기다린다. 일반적으로 유저가 문자열을 키보드로 입력하고 ENTER (RETURN)
를 누를 때까지 기다리게 된다. cin
에 추출 연산자를 사용한 변수의 타입에 따라 cin
에 있는 문자를 어떻게 해석할 것인지를 정한다. (버퍼 내의 띄어쓰기를 기준으로 차례대로 해석된다.)
타입에 따라 올바르지 않은 형식으로 써져 있으면 값을 쓰지 않아 확실하지 않은 결과를 낼 수 있다.
문자열을 추출하고 싶어서 똑같은 추출 연산자를 사용한다면 띄어쓰기, 탭, 새로운 줄에서 추출이 끝나버리게 되어 전체 문자열을 얻을 수 없게 된다.
줄 전체를 cin
를 추출하기 위해선 getline
함수에 첫 번째 인자를 cin
, 두 번째로는 저장될 문자열을 지정하여 얻을 수 있다.
getline (cin, mystr);
cout << "Hello " << mystr << ".\n";
stringstream (문자열 스트림)
표준 헤더인 <sstream>
은 문자열을 스트림으로 취급하는 stringstream
을 정의한다. 앞서 언급한 입출력 스트림처럼 입력과 추출 연산자를 통하여 똑같은 연산을 수행할 수 있어서 표준 입출력 스트림의 특수 문자에 의한 처리에 대비해 유저 입력을 직관적으로 받을 수 있게 된다.
string mystr ("1204");
int myint;
stringstream(mystr) >> myint;
// stringstreams
#include <iostream>
#include <string>
#include <sstream>
using namespace std;
int main ()
{
string mystr;
float price=0;
int quantity=0;
cout << "Enter price: ";
getline (cin,mystr);
stringstream(mystr) >> price;
cout << "Enter quantity: ";
getline (cin,mystr);
stringstream(mystr) >> quantity;
cout << "Total price: " << price*quantity << endl;
return 0;
}