C에서의 표준 출력 printf가 있었듯이, C++에서는 표준 출력 cout이 있다.

cout은 표준입출력 iostream의 namespace std에 정의되어 있으며, 출력하고 싶은 내용을 << 연산자로 넣어주듯이 입력하면 화면에 출력한다. << 연산자로 출력이 가능한 것은 클래스에서 연산자 오버로딩을 해서 그런데, 직접 cout 클래스를 만들어보면 이해할 수 있다. 여기서는 cout을 사용하는 법만 다룬다.



printf는 변수 내용을 출력할 때 변수 자료형에 따라 %c, %f, %d 등을 맞춰서 써야 오류가 일어나지 않았지만, cout은 자료형을 신경 쓰지 않고 << 를 통해 넣어주면 자료형에 맞게 출력할 수 있다.



printf에서 출력 시 진법이나 자리수를 조정할 수 있듯이, cout에서도 조정 가능한 데 다소 번거롭다.


std::oct, std::dec, std::hex

cout에 << 로 입력하여 다음 출력할 변수의 형태를 변화시킬 수 있다.



width를 통해 최소 너비를 정하고, fill(char) 를 통해 최소 너비에 빈 공간을 채울 문자를 지정한다.
이때 std::left를 cout에 넣으면 숫자를 왼쪽으로 맞추고, std::right를 cout에 넣으면 숫자를 오른쪽부터 맞춘다.


출력결과

    32

32

123341

3123kkkkkkkkkkk

xxxxxxxxxxx1234



비트마스크 ios_base::fmtflags 를 입력하여 원하는 설정을 세팅할 수 있다. 비트마스크이므로 여러 설정을 동시에 하려면 bit or 연산자 | 를 사용한다.



출력결과

100 74

      0x64 0x4a 


ios_base::setf


이 함수도 flags와 비슷하게 원하는 설정을 세팅하는데 사용에 약간 차이가 있다.

setf는 두 가지로 오버로딩 되어있는데, 각각 의미하는 바가 다르다.

1. fmtflags setf (fmtflags fmtfl);

이것은 현재 설정된 플래그들 (flags() 함수의 출력값으로 알 수 있다.) 에 추가로 fmtfl을 설정한다. 즉, flags(fmtfl | flags() ) 이 된다.

2. fmtflags setf (fmtflags fmtfl, fmtflags mask);

이것은 mask와 fmtfl에 동시에 설정된 설정들만 적용하고, 동시에 적용되지 않은 설정들은 clear한다. 즉, flags( (fmtfl & mask) | (flags() & ~mask() ) 이 된다.


개인적으로 출력 형식을 바꿔야 할 경우에나 여러 변수 사이에 문자열을 끼워넣어야 하는 경우 오히려 printf 가 더 간단해서 printf를 사용한다.


'프로그래밍 > C++' 카테고리의 다른 글

인라인 함수  (0) 2017.10.08
함수 오버로딩  (0) 2017.10.08
디폴트 파라미터  (0) 2017.10.08
printf 형식지정자  (0) 2017.10.03
표준 입력 cin  (0) 2017.08.06

+ Recent posts