[모던C++입문] 1.7 I/O
- 📕 Book/모던C++입문
- 2021. 7. 3.
1.7 I / O
표준 출력
- 표준 출력은 cput 이라는 c++ 스트림을 사용해 접근
- cout은 << 로 표시하는 삽입 연산자와 함께 사용
- endl은 개행 문자를 생성 '\n'으로도 표현 가능
- endl은 버퍼를 비우고 \n 방식은 버퍼를 비우지 않는다
cout << "11 * 19 = " << 11 * 19 << endl;
//괄호가 빠지면 빌드 오류 발생
cout << (age > 65 ? "I'm a wise guy\n" : "I am still half-baked.\n");
표준 입력
- 연산자 >>를 cin 스트림에 적용하여 처리
int age;
cin >> age;
int width, height;
cin >> width >> height;
//위의 코드와 동일하게 동작 공백으로 값을 구분
cin >> width;
cin >> height;
파일 입출력
- ofstream : 파일에 쓰기
- ifstream : 파일로부터 읽기
- fstream : 파일 일기 및 쓰기
#include <fstream>
int main()
{
ofstream square_file;
square_file.open("squares.txt");
//다음과 같이 한줄로 축소 가능
ofstream square_file("squares.txt");
for(int i = 0; i < 10; i++)
square_file << i << "^2 = " << i * i << endl;
square_file.close(); //스코프를 벗어날때 암시적으로 닫기에 생략 가능
}
일반적인 스트림
- 모든 클래스는 istream, ostream, iostream 에서 파생하여 스트림으로 사용 가능
- std에는 출력 가능한 모든 타입의 문자열을 만드는데 사용하는 stringstream을 포함
- stringstream은 str()함수로 문자열을 반환
#include <iostream>
#include <fstream>
#include <sstream>
void write_something(std::ostream& os)
{
os << "hello stream!!" << endl;
}
int main(int argc, char* argv[])
{
std::ofstream myfile("example.txt");
std::stringstream mysstream;
write_something(std::cout); //cout출력
write_something(myfile); //파일 출력
write_something(mysstream); //스트링 출력
std::cout << "mysstream is : " << mysstream.str();
}
서식 지정
double pi = M_PI;
cout << "pi is " << pi << endl;
cout << "pi is " << setprecision(16) << pi << endl;
// pi is 3.14159
// pi is 3.141592653589793
cout << "pi is " << setw(30) << pi << endl;
// pi is 3.141592653589193
cout << "pi is " << setfill('-') << left << setw(30) << pi << endl;
// pi is 3.141592653589793-------------
cout.setf(ios_base::showpos); //양수에도 부호값 표시
cout << "pi is " << scientific << pi << endl;
// pi is +3.1415926535897931e+00
cout << "63 octal is " << oct << 63 << endl; // 8진수
cout << "63 hexadecimal is " << hex << 63 << endl; // 16진수
cout << "63 decimal is " << dec << 63 << endl; // 10진수
//63 octal is 77
//63 hexadecimal is 3f
//63 decimal is 63
cout << "pi < 3 is " << (pi < 3) << endl;
cout << "pi < 3 is " << boolalpha << (pi < 3) << endl;
//pi < 3 is 0
//pi < 3 is false
cout.unsetf(ios_base::... | ios_base::... | ... ); //설정 되돌림
// preicision는 안됨 직접 이전 설정값을 돌려놔야함
I/O 오류 처리
- 파일을 읽을 때 작성한 타입과 동일한 타입으로 읽도록 해야한다
ifstream infile("some_missing_file.xyz");
if(infile.good())
{
//올바르게 파일이 열린 경우
}
else
{
//파일이 존재하지 않더라도 열기 동작은 실패하지 않음
}
//예외 사용을 위해선 각 스트림에 대해 예외를 활성화 하여야 한다
cin.exceptions(ios_base::badbit | iosbase::fallbit);
cout.exceptions(ios_base::badbit | iosbase::fallbit);
ifstream infile("f.txt");
infile.exceptions(ios_base::badbit | iosbase::fallbit);
반응형