[C++언어-막코딩] 3장 C++의 출력 서식표현

in #kr-dev5 years ago (edited)

[C++ 언어-막코딩] 3장 C++의 출력 서식표현



C언어에서는 출력 서식문자로 정수응 '%d', 문자는 '%c'로 해서 출력형태를 표현했지만 C++에서는 좀 다른 방식을 취한다. 해당 서식문자의 위치에 다이렉트로 변수명을 붙여서 서식문자가 생략이 된다. 하지만 일부 서식표현은 C++이 C보다 좀 복잡한 형식을 취하고 있다. 어떤 형식을 취하는지 간단히 살펴보도록 하죠.

1. C++ 서식 표현


C언어와 비교하여 살펴보도록 하자.

[C언어]

printf("A값은 %d 입니다.\n",a);

[C++]

cout<<"A값은 "<<a<<"입니다."<<endl;

이런혀 서식문자를 안쓰고 cout은 문자열과 변수를 다이렉트로 표현하여 출력을 합니다. 이건 지난시간에 살펴 본 내용입니다. 여기서, 다른 서식표현을 살펴보면 C언어가 C++보다 서식 표현에서 더 편하다는 것을 비교할 수 있습니다.

[C언어]

printf("%#x \n",a);

[C++]

cout<<showbase<<hex<<a<<endl;

이렇게 C에서는 서식문자 형태만 간단히 표기하면 된다. 하지만 C++에서는 일일히 어떤 형태인지 해당 명령을 다 표현해야 한다. 또 C++에서는 하나의 코딩 형태만 있는 것이 아니다.

[C++]

hex(cout); //16진수 
cout<<a<<endl;

이렇게 표현이 가능하다.

[C++]

cout.setf(ios::showbase); //접두어 0 or 0x 표기
cout<<hex<<a<<endl;

이런식으로 seft()함수로 해서 하나의 인자로 출력 서식표현이 가능하다.
[C++]

cout.setf(ios::hex,ios::showbase); //대문자표기 
cout<<a<<endl;

이렇게 seft()함수로 2개의 서식 인자를 표현 함으로 서식 표현이 가능하다. 코딩 표현이 너무 많죠.

서식표현을 선언 시 주의


서식표현을 showbase(0 or 0x) 표현을 선언해 주면 그 이후로 나오는 모든 출력은 이 표현에 적용 받게 된다. 16진수로 출력하든 8진수로 출력하든 계속 접두어가 붙게 된다. 이 말은 특정 서식으로 출력을 할거라도 표현하고 나서 그 출력이 끝난 뒤에 다른 출력은 다른 형식으로 출력을 해야 한다고 했을 때 출력 서식을 코딩하고 난 뒤에 수정하지 않으면 그 서식을 그대로 적용 받고 출력하기 때문에 원치 않는 출력을 하게 된다. 그래서 주의해서 코딩을 해야 한다는 점에서는 좀 C++은 불편하다.

서식표현


[기본]
dec - 10진수
oct - 8진수
hax - 16진수
fixed - 고정소숫점
scientific - 지수표기
left - 왼쪽정렬
right - 오른쪽정렬
internal - 왼쪽전 부호, 오른쪽정렬 값

[추가]
showbase - 0 or 0x 표기
showpoint - 생략 된 소숫점 자리숫를 0으로 채움
showpos - 부호 표기
uppercase - 진수 대문자 표기

precision(3 ) : 소숫점 3자리 까지 표기함.

이 외에도 더 알아 보기 바랍니다.

2. 코딩


위 기준으로 한번 실습을 해보도록 하죠.

[전체소스]


#include <iostream>
using namespace std;

int main(int argc, char** argv) {
    
    int a;
    float b = 3.123123123;
        
    cout<<"정수를 입력하시오? ";
    cin>>a;
        
    printf("%#x \n",a);
        
    cout<<oct<<a<<endl; //8진수 
    
    cout<<hex<<a<<endl; //16진수 
    cout<<showbase<<hex<<a<<endl; //showbase 접두어 0 or 0x 
    
    
    oct(cout); //8진수 
    cout<<a<<endl;
    
    hex(cout); //16진수 
    cout<<a<<endl;
    
    cout.setf(ios::hex,ios::uppercase); //대문자표기 
    cout<<a<<endl;
    
    
    cout.setf(ios::uppercase); //대문자표기 
    cout<<hex<<a<<endl;
    cout<<oct<<a<<endl;
    
    cout<<fixed;
    cout.precision(3); //자릿수 
    cout<<b<<endl;
    
    return 0;
}

위 코딩은 의미가 없는 코딩입니다. 그냥 출력서식을 대충 아무거나 테스트 한 소스입니다. 위와 같이 코딩 할 필요는 없고 대충 아무 숫자나 입력을 받거나 선언 한 후 이 숫자를 어떤식으로 출력 할지 서식표현을 보고 선택하여 출력 테스트만 해주시기 바랍니다.

위 코딩은 정수는 입력을 받고 실수는 선언하여 두 값을 출력하는 테스트였네요.
[결과]
a1.jpg

마무리


C++은 코딩이 다 마음에 드는 서식 표현에서 좀 불편함이 있습니다. 정해진 하나의 표현이 있는게 아니라 같은 결과라도 같은 명령어 쓰더라도 위에서 살펴보았듯이 다양한 스타일의 코딩이 나오기 때문입니다. 그리고 일일히 서식 명령어를 앞에 붙여줘야하고 또 서식 명령어가 선언 되가 그 뒤로 사용하는 cout에서 같은 서식이 적용 받기 때문에 신경써서 코딩해야 한다는 점이 불편하게 느껴졌었죠.
아무튼 이런것들이 있다는 것과 너무 복잡하게 생각하지 마시고 입문자분들은 대충 8진수는 oct로 16진수는 hex가 붙는다 소숫점 자리는 fixed와 cout.precision(자리수)정도만 이해 하시면 대충 무난하게 사용 하실 수 있을 거라 생각 되네요. 사실 서식 표현이 처음 C++입문자분들에게 어렵습니다. 일일히 스타일 명령어와 앞뒤 cout값들에 미치는 영향까지 다 고려해서 표현하기 때문에 C보다는 코딩 표현이 어렵습니다. 하지만 입문자 코딩에서는 그렇게 까지 복잡한 서식표현을 쓰는 경우는 드물기 때문에 간단히 이해할 수 있는 범위까지만 이해하시고 넘어가세요.


Sponsored ( Powered by dclick )

dclick-imagead

Coin Marketplace

STEEM 0.30
TRX 0.12
JST 0.034
BTC 64136.70
ETH 3128.20
USDT 1.00
SBD 3.94