프로그래밍언어/C++

[C++] 입출력 스트림 (2)

qkzkdo 2023. 9. 25. 23:11
728x90

cout을 이용한 출력

cout은 표준 출력 스트림인 ostream의 객체이다. ostream은 연산자 <<를 다음과 같은 형식으로 다중정의하고 있다.

ostream& operator<<(type);

 

다음과 같은 출력 코드는 ostream& operator << (float)으로 정의되어 있는 함수를 호출하여, vFloat의 실숫값을 문자열로 변환하여 컴퓨터 화면에 표현한다.

cout << vFloat;

 

출력 스트림의 함수

ostream 연산자 <<를 다중정의하고 있는 것 이외에 화면에 출력하는 함수와 출력 스트림의 버퍼를 관리하는 함수를 지원하고 있다.

  • ostream& put(char) : 1개의 문자를 출력한다.
  • ostream& write(const char*, int) : 문자열 전체를 출력한다.

 

출력 버퍼 비우기

클래스 ostream은 출력 버퍼를 운영하고 있으며, 출력 버퍼의 한쪽 끝은 프로그램과 연결되어 있고, 다른 쪽 끝은 프로그래머가 지정한 출력장치와 연결되어 있다.

 

표준출력장치로 출력하는 경우에 컴퓨터는 데이터를 버퍼에 모아 두지 않고 즉각 출력한다. 그러나 파일과 같은 출력장치로는 출력 데이터를 버퍼에 모아 두었다가 일정한 크기의 블록 단위로 데이터를 전송한다.

 

프로그램을 작성하다 보면 버퍼가 모두 채워지지 않더라도 강제적으로 버퍼를 비워야 하는 경우가 발생할 수 있다. 이러한 경우 프로그래머는 flush와 endl을 사용함으로써 버퍼를 강제로 비우도록 지시할 수 있다. flush는 강제로 버퍼를 비우라는 의미이고 endl은 버퍼를 비우고 라인의 끝 문자를 삽입한다.

cout << "Good morning, everyone." << flush;
cout << "Good afternoon, boyes and girls." << endl;

 

출력 형식의 지정

ostream의 연산자 <<로 출력할 때 출력규칙은 다음과 같다.

  • 문자는 한 자리를 차지하여 출력한다.
  • 문자열의 경우는 문자열의 길이와 같은 자릿수를 차지하여 출력한다.
  • 정수의 경우, 숫자를 문자열로 변환하되, 이전 출력 문자와 간격을 두지 않고 이어서 출력하며, 음수인 경우는 음수 부호도 함께 출력한다.
  • 실수인 경우는 소수점을 제외한 여섯 자리 숫자들을 출력하며, 소수점 이하 숫자들의 끝에 붙는 0은 표시하지 않는다. 

 

출력 문자폭의 변경

출력되는 문자열의 자릿수를 지정하기 위하여 ostream의 멤버함수 width()를 사용한다.

 

부동 소수점의 출력 자릿수 변경

부동 소수점의 기본 출력 길이를 조정하려면 ostream의 멤버 함수 precision()을 사용한다.

 

공백 채우기

빈 공간을 다른 문자로 채우려면 ostream의 멤버함수 fill()을 사용한다.

 

 

파일 입출력

C++ 언어는 iostream에서 파생된 파일 입력을 위한 ifstream 클래스와 파일 출력을 위한 ofstream 클래스를 제공하고 있다. 이러한 파일 입출력 클래스들을 사용함으로써 프로그래머는 표준 입출력 스트림을 사용하는 것과 동일한 방법으로 파일을 사용할 수 있다.

 

파일 입출력

프로그램에서 텍스트 파일을 생성하여 문자들을 기록하려면 다음 순서를 따라야 한다.

  1. 파일 스트림 객체를 생성한다.
  2. 파일을 연다
  3. 파일을 사용한다. 즉, 출력 파일이면 값을 기록하고, 입력 파일이면 값을 읽는다.
  4. 파일을 닫는다.

 

//출력용 파일을 사용하기 위해서 ofstream의 객체를 생성하고 파일을 여는 방법

ofstream 객체이름;
객체이름.open(파일이름);

ofstream 객체이름(파일이름);

//읽기 파일을 사용하기 위해서 ifstream의 객체를 생성하고 파일을 여는 방법

ifstream 객체이름;
객체이름.open(파일이름);

ifstream 객체이름(파일이름);

 

파일의 상태를 구하는 멤버함수

함수 의미
bool is_open() 파일이 열렸다면 true, 그렇지 않다면 false
bool good() 스트림 상태 정보가 정상인 경우 true
bool eof() 파일의 끝에 위치한 경우 true
bool fail() 스트림으로부터 값을 읽어내는 데 실패한 경우 true
bool operator!() fail()과 동일함

 

파일 모드

파일을 열 때에는 어떤 방식으로 파일을 사용할 것인가를 지정할 수 있다. 파일 모드는 멤버함수  open()을 호출할 때 파일 이름과 함께 지정할 수 있다. ios 클래스에 정의된 파일 모드 상수는 다음과 같다.

  • ios::app : 파일을 쓰기 모드로 여는 경우에 사용되며, 현재 있는 파일의 끝에 새로 추가하는 경우에 사용된다.
  • ios::ate : 파일 포인터를 파일 제일 마지막으로 이동한다. 임의 엑세스 방법으로 파일을 엑세스하는 경우에 사용된다.
  • ios::binary : 아진 파일 모드로 파일을 사용하고자 할 때 사용된다.
  • ios::in : 입력 모드로 파일을 사용한다.
  • ios::out : 출력 모드로 파일을 사용한다.
  • ios::trunc : 파일을 출력 모드로 여는 경우에 기본 모드이며, 같은 이름의 파일이 이미 존재한다면 이를 지우고 새로 파일을 만든다.

 

 

 

출처 : 전중남·이병래. 「C++프로그래밍」. 한국방송통신대학교출판문화원. 2020

728x90