C에서의 표준 출력 printf가 있었듯이, C++에서는 표준 출력 cout이 있다.
cout은 표준입출력 iostream의 namespace std에 정의되어 있으며, 출력하고 싶은 내용을 << 연산자로 넣어주듯이 입력하면 화면에 출력한다. << 연산자로 출력이 가능한 것은 클래스에서 연산자 오버로딩을 해서 그런데, 직접 cout 클래스를 만들어보면 이해할 수 있다. 여기서는 cout을 사용하는 법만 다룬다.
printf는 변수 내용을 출력할 때 변수 자료형에 따라 %c, %f, %d 등을 맞춰서 써야 오류가 일어나지 않았지만, cout은 자료형을 신경 쓰지 않고 << 를 통해 넣어주면 자료형에 맞게 출력할 수 있다.
cout에 << 로 입력하여 다음 출력할 변수의 형태를 변화시킬 수 있다.
width를 통해 최소 너비를 정하고, fill(char) 를 통해 최소 너비에 빈 공간을 채울 문자를 지정한다.
이때 std::left를 cout에 넣으면 숫자를 왼쪽으로 맞추고, std::right를 cout에 넣으면 숫자를 오른쪽부터 맞춘다.
출력결과
32 32 123341 3123kkkkkkkkkkk xxxxxxxxxxx1234 |
비트마스크
ios_base::fmtflags 를 입력하여 원하는 설정을 세팅할 수 있다. 비트마스크이므로 여러 설정을 동시에 하려면 bit or 연산자 | 를 사용한다.
출력결과
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를 사용한다.