일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- a tour of go
- Nebula
- JUCE 튜토리얼
- 프로그래밍
- 백준
- gui
- 연결리스트
- OS
- BOJ
- 공룡책
- go
- vim-go
- 리듬게임
- LOB
- tour of go
- 알고리즘
- go channel
- 코딩
- JUCE라이브러리
- Docker
- JUCE library
- JUCE
- C++ gui
- 운영체제
- C++
- 자료구조
- C++ gui 라이브러리
- C언어
- c++ heap
- C++ library
- Today
- Total
CafeM0ca
[C++]ios 플래그와 포멧/조직자 본문
여태까지 입출력도 제대로 못한 내가 부끄럽다 ㅠㅠ..
c++ ios클래스에 stream의 상태를 관리하는 flag(플래그)가 있다. 이 플래그들은 비트 한개로 이뤄져있다. (1인지 0인지)
ios 클래스는 ios_base를 제외한 모든 클래스의 기초 클래스가 되도록 만들어졌다.
플래그는 총 4개다.
- goodbit :스트림에 입출력이 가능할 때
- badbit : 스트림에 복구 불가능한 오류 발생
- failbit : 스트림에 복구 가능한 오류 발생
- eofbit : 입력 작업시에 EOF(end of file: 파일의 끝)에 도달시
cin.fail()는 ios에 정의되어있다. failbit, badbit가 true면 true를 반환한다.(스트림에 오류가 생겼을때 true)
cin.clear()도 ios에 정의되어있다. 인자가 없으면 플래그를 goodbit로 초기화한다.
cin.ignore(10,'\n')는 istream에 정의되어있다. 첫번째 인자만큼(10) 두번째 인자('\n')를 만날때까지 버퍼를 비운다.. 예를 들면 "Hello '\0' world\n"이 있으면 NULL문자 전까지 "Hello '\0' world"는 버퍼에서 지워지고 버퍼에는 '\n'만 남게 된다.
형식 플래그(format flag) / 조직자(manipulator)
C에서는 printf,scanf 함수안에서 포멧스트링(%c,%d,%s 등)을 지정해줘서 입출력했는데 C++은 자동으로 형식에 맞춰주다보니 PS할때 불편했었다.
ios_base 클래스에서 스트림의 입출력 형식을 바꿀 수 있다.
아래는 입력한 값을 16진수로 출력해주는 소스코드다.
1
2
3
4
5
6
7
8
9
10
11
|
#include <iostream>
using namespace std;
int main()
{
int t;
cin.setf(ios_base::hex,ios_base::basefield); //스트림의 설정을 바꿈
cin >> t;
cout << "입력한 값: " << t << endl;
return 0;
}
|
cs |
setf함수는 set format의 약자같다. setf함수는 2가지로 오버로딩되어있다. 하나는 인자를 1개만 받는것, 다른 하나는 위의 예제처럼 인자를 2개 받는것
인자 1개 받는것은 인자로 준 형식 플래그를 적용하는 것
인자 2개 받는것은 두번째 인자의 내용을 초기화하고 첫번째 인자를 적용
저것보다 편한게 있는데 바로 조작자다.
1
2
3
4
5
6
7
8
9
10
|
#include <iostream>
using namespace std;
int main()
{
int t;
cin >> hex >> t;
cout << t << endl;
return 0;
}
|
cs |
처음 ios_base::hex와 아래의 hex는 다른것이다.
처음 ios_base::hex는 상수값이지만 아래 hex는 ios에 정의되어 있는 함수다. (hex말고 oct,dec 등등..)
'Programming > C++' 카테고리의 다른 글
[딥러닝] 인공신경망 (0) | 2018.06.10 |
---|---|
[C++] 디폴트 매개변수 (0) | 2018.05.04 |
[C++]boost asio 튜토리얼 정리 (0) | 2018.04.05 |
[C++]boost asio g++ 컴파일 옵션 (0) | 2018.04.04 |
[JUCE]AudioAppComponent make 에러 (0) | 2018.03.01 |