삶의 공유
[C++] 표준 입출력 본문
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의 표준입출력에 대해 공부해보았다.
끝~
'Programing > C++' 카테고리의 다른 글
[C++] Const, Return, Rvalue - Reference (1) | 2024.02.06 |
---|---|
[C++] Reference (1) | 2024.02.03 |
[C++] Pointer(포인터)[상] (0) | 2021.12.25 |
[C++][Study] 내가 만드는 문자열 클래스(연산자오버로딩, 복사생성자) (0) | 2021.12.25 |
[C++][Study] 내가 만드는 String 문자열 (0) | 2021.12.16 |