C,C++

cin, cout, cerr, clog 와 endl 에 대하여

Dongjun_ 2023. 7. 18. 00:53

<iostream> 에  포함된 4개 함수와 같이 사용되는 endl 에 대해서 알아보자.

 

기본적으로 입출력을 담당하는 4개 함수가 있으며 정의는 아래와 같다.

 

(참고로 using namespace std 를 가정하여 std::cout 대신에 cout 을 사용함을 가정한다.)

(일케해야 편하잖아...)

 

데이터 추출 : cin ( Console INput )

cin -> 정수(int), 실수(float, double 등), 문자(char), 문자열(string) 을 입력받는 함수이다.

데이터 삽입 : cout ( Console OUTput ), cerr ( Console ERRor ), clog ( Console LOG )

cout -> 상기 cin 과 같은 항목들을 출력하는 함수이다.

cerr -> 에러 내용을 경고하고, 콘솔에 에러를 출력하는 함수이다.

clog -> 로그 내용을 기록하고, 콘솔에 로그를 출력하는 함수이다.

간략한 설명은 끝.

 

사용 예시 코드는 아래와 같다.

더보기
#include <iostream>
using namespace std;

int main() {
    int age; // 0 ~ 120 까지만 정상적인 입력이라 가정
    cin >> age;
    
    if ( age >= 0 && age < 121 )
    	cout << "당신의 나이는: " << age << endl;
    if ( age < 0 || age > 120 ) {
    	cerr << "에러가 발생했습니다!" << endl;
    	clog << "Input value : " << age << endl;
    }
    return 0;
}

 

코드를 간단하게 설명해보자.

 

cin 을 통하여 int 형 정수를 age 변수에 입력을 받는다.

 

주석에 서술했듯이 0 <= age <= 120 을 충족 한다면

cout 을 통해 내용을 출력하고 종료 한다.

참고로 << 와 >> 의 스트림 연산자는 연속적으로 사용가능 하다.

 

상기 조건을 충족하지 못한다면

cerr 를 통해 경고 메세지를 출력한다.

 

또한 clog 를 통해서 발행한 에러 내용을 별도로 기록한다.

마찬가지로 << 연속 사용이 가능하다.

 

일부러 맨 마지막에 설명하는 "endl"

개행 문자 삽입이 끝이다.

\n ( ₩n ) 이거 삽입하는게 끝이다.

진짜루

 

 

아 참고로 느려 터진 함수들이니 아래 내용을 참고하자.

더보기

C++

  • 아래 얘기는 cin, cout을 쓸 때의 얘기지, scanf/prinf로 입출력을 하고자 하신다면 그냥 쓰시면 됩니다. scanf/printf는 충분히 빠릅니다.
  • endl은 개행문자를 출력할 뿐만 아니라 출력 버퍼를 비우는 역할까지 합니다. 그래서 출력한 뒤 화면에 바로 보이게 할 수 있는데, 그 버퍼를 비우는 작업이 매우 느립니다. 게다가 온라인 저지에서는 화면에 바로 보여지는 것은 중요하지 않고 무엇이 출력되는가가 중요하기 때문에 버퍼를 그렇게 자주 비울 필요가 없습니다. 그래서 endl을 '\n'으로 바꾸는 것만으로도 굉장한 시간 향상이 나타납니다.
  • cin.tie(NULL)은 cin과 cout의 묶음을 풀어 줍니다. 기본적으로 cin으로 읽을 때 먼저 출력 버퍼를 비우는데, 마찬가지로 온라인 저지에서는 화면에 바로 보여지는 것이 중요하지 않습니다. 입력과 출력을 여러 번 번갈아서 반복해야 하는 경우 필수적입니다.
  • ios_base::sync_with_stdio(false)는 C와 C++의 버퍼를 분리합니다. 이것을 사용하면 cin/cout이 더 이상 stdin/stdout과 맞춰 줄 필요가 없으므로 속도가 빨라집니다. 단, 버퍼가 분리되었으므로 cin과 scanf, gets, getchar 등을 같이 사용하면 안 되고, cout과 printf, puts, putchar 등을 같이 사용하면 안 됩니다.

 출처 : https://www.acmicpc.net/board/view/22716

반응형