C++ 표준 입출력


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;
}

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다