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

파이썬으로 배우는 알고리즘 트레이딩을 참고해서 xingAPI에 파이썬으로 로그인하는 걸 해보려는데, 다음과 같은 에러메시지가 발생하면서 실패한다.


1
2
3
pywintypes.com_error: (-2147221021, '작업을 사용할 수 없습니다.', None, None)
 
pywintypes.com_error: (-2147221164, '클래스가 등록되지 않았습니다.', None, None)
cs


검색을 해보니 이 글을 통해서 원인이 python이 64bit 버전이어서 그렇다는 것을 알 수 있었다.


이것을 해결하기 위해선 이 글과 같이 ANACONDA의 환경 옵션을 통해서 32bit python을 쓰는 환경을 만들어주면 된다.

해당 글의 내용을 살짝 바꿔 python 3.5 32bit version을 아래와 같이 설정했다.


1
2
3
set CONDA_FORCE_32BIT=1
conda create -n py32bit python=3.5
activate py32bit
cs

이것을 다 설정하고 나니 아래와 같이 로그인 성공 메시지를 볼 수 있었다. 
1
2
3
4
5
6
7
8
ID:
Password:
Certification:
로그인 ok
 
계좌 갯수 = 1
계좌번호 =
------END--
cs


로그인용 코드는 다음 두 페이지에, 아이디와 패스워드를 저장해놓는 대신 input과 getpass.getpass를 이용해서 입력받는 것으로 하였다.
https://wikidocs.net/4126
http://freeprog.tistory.com/341


+ Recent posts