본문 바로가기

Programing/C++

[C++] 표준 입출력

728x90
반응형

 

C 언어와 C++ 언어의 표준 입출력의 차이점에 대해서 알아보자

 

 

먼저 아래 구문을 통해 C언어 스타일의 입출력 표기 하는 방법과 C++ 언어의 입출력 표기하는 방법을 비교해보려고 한다

 

먼저 각 언어 스타일마다 표기법을 살펴보자

 

[C언어 Style]

 

#include <cstdio>

int main(int argc, const char * argv[]) {
    
    int n = 10;
    double d = 3.4;
    
    printf("%d, %f\n", n, d);
    
    scanf("%d", &n);
    
}

 

 

[C++ 언어 Style]

 

#include <iostream>

int main(int argc, const char * argv[]) {
    // insert code here...
    
    int n = 10;
    double d = 3.4;
    
    std::cout << n << ", " << d << std::endl;
    std::cin >> n;
}

 

 

어떤가? C 언어 스타일 보다 훨씬 간단하게 표기 할 수 있고 출력할때 변수의 type을 지정하지 않아도 잘 출력 되는 차이점을 확인 할 수 있다.

 

자 이제 C 언어와 C++표준 출력의 차이점의 핵심을 정리 하면 아래와 같다

 

 

  C C++
출력 printf 함수 std::cout 객체
변수값 출력 %d, %f 필요 format 지시어 필요 없음
특징   << 를 연속적으로 사용 가능
개행 '\n' '\n' 또는 std::endl
입력 scanf 함수 std::cin 객체
특징 주소를 전달(&n) 주소가 아닌 "n"로 전달
헤더 파일 <cstdio> <iostream>

 

 

 

io manipulator

다음은 io manipulator에 대해 알아보자. io manipulator는 입출력시의 다양한 출력(입력) 형태를 지정 하는 것이다.

조장자 (조작자) 함수라고도 불린다. 이를 사용 하기 위해서는 <iostream>, <iomanip> 등의 헤더가 필요하다.

 

예시를 보면,

 

#include <iostream>
#include <iomanip>

int main(int argc, const char * argv[]) {
    // insert code here...
    
    int n = 10;
    
    
    std::cout << n << std::endl;
    
    // 16 진수 표기법
    std::cout << std::hex<< n << std::endl;
    
    std::cout << n << std::endl;
}

 

※ 16진수 표기법 : std::hex 함수

 

요렇게 표기를 하면 출력은 다음과 같이 나온다.

 

 

위와 같이 출력값을 다양한 형태로 지정해서 출력하는 것을 io manipulator라고 한다.

주의할 점은 분명 마지막 코드는 16진수로 표기를 하지 않았는데도 마지막의 출력이 위의 16진수 표기법을 그대로 따라간다는 점이다

 

16진수 외에 표기법에 대해서 간단하게 나열하면, 

 

std::dec 변수 값을 10진수로 표현
std::hex 변수 값을 16진수로 표현
std::setw 문자열 출력시 개수 지정
std::setfill 공백을 채울 문자 지정
std::left 왼쪽 정렬

 

 

하나만 더 예시를 들어보면,

 

10진수, 16진수를 표기하고 10자리의 출력 개수를 지정 후 공백을 #으로 채우는 예제 이다.

 

#include <iostream>
#include <iomanip>

int main(int argc, const char * argv[]) {
    // insert code here...
    
    int n = 10;
    
    
    std::cout << n << std::endl;
    
    // 16 진수 표기법
    std::cout << std::hex<< n << std::endl;
    
    
    // 10진수
    std::cout << std::dec << n << std::endl;
    
    std::cout << std::setw(10) << std::setfill('#') << n << std::endl;
}

 

잘 출력 되는 것을 볼 수 있다.

 

 

제일 마지막의 숫자를 10######### 로 변경을 하고 싶으면 살짝만 변경 하면 된다.

 

아래 예시를 보자, 

 

std::left 구문만 추가해주면 원하는 결과를 얻을 수 있다.

 

#include <iostream>
#include <iomanip>

int main(int argc, const char * argv[]) {
    // insert code here...
    
    int n = 10;
    
    
    std::cout << n << std::endl;
    
    // 16 진수 표기법
    std::cout << std::hex<< n << std::endl;
    
    
    // 10진수
    std::cout << std::dec << n << std::endl;
    
    std::cout << std::setw(10) << std::setfill('#') << std::left << n << std::endl;
}

 

 

 

 

 

 

지금까지 C++ 표준 입출력에 대해 C언어와 비교, 그리고 C++ Style의 표준입출력에 대해 공부해보았다.

 

끝~

반응형