I'm FanJae.

[C++] 표준 입출력 정리 본문

C++/Basic

[C++] 표준 입출력 정리

FanJae 2024. 8. 6. 12:23

※ 본 포스트는 코드누리 C++ Basic 강의 내용을 보고 정리한 포스트입니다.

 

1. C vs C++ 표준 출력의 차이

#include <cstdio>
#include <iostream>

int main()
{
    int n = 10;
    double d = 3.4;
    
    printf("%d, %f\n", n, d);
    
    std::cout << n << ", " << d << std::endl;
    
 // scanf("%d",&n);
 // std::cin >> n;
 }

 

① C는 printf 함수를 사용한 반면, C++은 std::cout이라는 객체를 사용한다. (객체가 무엇인지는 추후 다룰 예정)

 

② C는 %d, %f와 같은 포맷 지시어가 필요했으나, C++은 별도의 포맷 지시어를 사용하지 않는다.

 

③ 개행을 할때 '\n' 을 사용하는데, C++은 '\n' 또는 std::endl를 사용한다.

 

④ 입력을 받을 때는 C언어는 scanf 함수를 사용하는 반면, C++에서는 std::cin 객체를 사용한다.

 

⑤ C는 주소를 전달(&n) 하지만, C++은 주소가 아닌 n 그대로 전달한다.

 

헤더 파일은 <iostream>을 사용하면 된다.


2. io maniuplator

- 입출력시의 다양한 출력(입력) 형태를 지정하는 것을 의미

- 조정자(조작자) 함수

#include <iostream>
#include <iomanip>

int main()
{
    int n = 10;
    
    std::cout << n << std::endl;
    
    // "%x"
    std::cout << std::hex << n << std::endl;
    
    // "%d"
    std::cout << std::dec << n << std::endl;
    
    // %10d"
    std::cout << std::setw(10) << n << std::endl;
    std::cout << std::setw(10) << std::setfill('#') << n << std::endl;
    
    std::cout << std::setw(10) << std::setfill('#') << std::left << n << std::endl;
}

 

① 조정자 함수를 사용시 유의할 점은 1회성 출력이 아닌 해당 이후 계속 입출력 형태가 변환됨에 유의해야 한다.

 

② 조정자 함수의 예시

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

 

※ 이외에도 다양한 조정자 함수가 존재한다. 이는 cppreference.com에서도 확인이 가능하다.

 

③ std::cout의 단점과 이에 대한 대안

- C++ 초창기 부터 사용되던 표준 출력 객체이다. 허나, 이의 단점이 존재한다.

 

단점 1. 여러 개 변수 출력 시 코드가 복잡하다.

std::cout << "n = " << n << ", d = " << d << std::endl;

 

변수가 늘어나면, 상당히 복잡해질 수 있다.

 

단점 2. 성능이 느리다. 

 

※ 이는 이유에 대해서는 추후 별도 포스트에서 다뤄보고자 한다.

 

2-1. std::print

- C++ 23 에서 추가되는 새로운 출력 함수

#include <iostream>
#include <print>

int main()
{
    int n = 10;
    double d = 3.4;
    
    std::cout << "n = " << n << ", d = " << d << std::endl;
    
    std::println("n = {}, d = {}", n, d);
    
    std::println("{0}, {1}, {0}", n, d);
    
    std::print("Hello ");
    std::println("world");
}

 

※ 현 시점에서 std::print가 지원되지 않는 컴파일러가 다수 존재한다. 강의에서는 이에 따라 별도로 실습을 위한 print.h 헤더파일을 제공하고 있으나, 해당 예제는 std::namespace 안에 임의의 사용자 함수를 추가하여 작동하도록 만들어진 예제였다. 이는 강의에서도 절대 하면 안되는 행위임을 명시하였고, 실습을 위해 임시로 만든 헤더임을 명시하였으므로 따로 다루지 않는다.

'C++ > Basic' 카테고리의 다른 글

[C++] Function II  (0) 2024.08.08
[C++] Function I  (0) 2024.08.07
[C++] C++ 에서 새롭게 추가된 Type & Variable  (0) 2024.08.06
[C++] namespace 정리  (0) 2024.08.05
[C++] Visual Studio C++ 언어 표준 설정.  (0) 2024.08.05
Comments