C++ 같이 배워요

[C++] Day 2 - 입력 및 출력

kkigon 2025. 7. 8. 13:42

다음 템플릿 코드를 먼저 살펴보자. 앞으로 C++로 코딩을 할 때는 웬만하면 여기서부터 시작 할 것이다.

#include <bits/stdc++.h>
using namespace std;

int main() {
    ios::sync_with_stdio(false);
    cin.tie(NULL);
    cout.tie(NULL);
    
    cout << "Hello, PS!" << endl;
}

 

ios::sync_with_stdio(false);는 입출력 속도를 매우 빠르게 올려준다. 자세한 원리는 다른 블로그들을 참고하자.

그리고 2번째줄에서 using namespace std;를 써줬기때문에 이후 코드에서 그냥 cin, cout만 써줘도 된다.

 

그렇다. C++에서 입출력을 받을 때는 cin과 cout을 쓴다!

 


1. cout으로 출력하기

 

출력을 하는 방법은 간단하다.

 

cout << 출력할 거;

 

이렇게 해주면 출력할 거가 출력이 된다.

다만, 파이썬과 달리 개행은 따로 되지가 않아서 개행문자 "\n"을 따로 넣어줘야 한다.

만약 개행문자를 넣기 싫다면 다음과 같이 하면 된다.

 

 

cout << 출력할 거 << endl;

 

다음 코드의 출력은 어떻게 될까?

int main() {
    ios::sync_with_stdio(false);
    cin.tie(NULL);
    cout.tie(NULL);
    
    cout << "one";
    cout << "two";
}

 

개행 문자가 없으므로 그냥 onetwo 이렇게 될 것이다.

다만 다음과 같이 개행 문자를 넣거나 endl;을 해주면

 

#include <bits/stdc++.h>
using namespace std;

int main() {
    ios::sync_with_stdio(false);
    cin.tie(NULL);
    cout.tie(NULL);
    
    cout << "one" << endl;
    cout << "two" << endl;
}

 

one

two

와 같이 줄바꿈이 된다.

 

 

공백으로 구분하여 출력하는 유형

 

파이썬에서는 print문 안에 쉼표를 이용해서 여러 변수를 한 번에 출력하려 하면 자동으로 띄어쓰기로 구분되어 나온다.

다만, C++에서는 직접 띄어쓰기를 출력해주어야 한다.

아래와 같은 방식이다. 이 코드는 N을 입력받고 1부터 N까지 한 줄에 공백을 기준으로 출력하는 예제이다.

 

#include <bits/stdc++.h>
using namespace std;

int main() {
    ios::sync_with_stdio(false);
    cin.tie(NULL);
    cout.tie(NULL);
    
    int N;
    cin >> N;

    for (int i = 1; i<= N; i++) {
        cout << i;
        if (i != N) cout << ' ';
    }
    cout << '\n';
}

 

반복문 및 조건문, 여러 연산자들은 추후에 공부해볼 예정이다.

2. cin으로 입력받기

cin은 cout와 반대로, >>를 이용한다.

 

파이썬에서는 입력을 받을 때 스페이스바로 한 줄에서 구분되어서 오느냐, 개행 문자로 구분되어오느냐 모두 따로따로 관리해주어야 한다.

그런데 C++에서 cin은 그냥 '공백 문자'를 기준으로 한다. 즉, 개행 문자와 스페이스바를 구분하지 않는다.

 

그래서 예를 들어 정수 3, 4를 입력받아 변수에 저장한다고 하자. 

 

#include <bits/stdc++.h>
using namespace std;

int main() {
    ios::sync_with_stdio(false);
    cin.tie(NULL);
    cout.tie(NULL);
    
    int a, b;
    cin >> a >>  b;
    cout << a << " " << b;
}

 

그러면 입력을

3 4

 

또는 

3

4

 

로 하든 상관없이 둘 다 3, 4가 입력된다.

 

 

공백으로 구분되지 않는 입력 유형

가령 다음과 같은 예시이다.

12345678과 같은 문자열이 입력으로 주어지고, 각각의 글자를 배열에 저장해야 한다고 하자.

그러면 이렇게 할 수 있다.

 

#include <bits/stdc++.h>
using namespace std;

int main() {
    ios::sync_with_stdio(false);
    cin.tie(NULL);
    cout.tie(NULL);
    
    char chArr[10]; // 문자 그대로 저장
    int numArr[10]; // 정수로 저장

    string s;
    cin >> s;
    
    int len = 0;
    for (char c : s) {
        chArr[len] = c;
        numArr[len] = c - '0'; //이렇게 하면 정수로 바뀌나봄
        len++;
    }

    cout << "chArr : ";
    for (int i = 0; i < len; i++) cout << chArr[i] << ' ';
    cout << "\nnumArr: ";
    for (int i = 0; i < len; i++) cout << numArr[i] << ' ';
    cout << '\n';
}

 

 

공백까지 포함하는 문자열을 한번에 읽을 때 (25.7.23)

https://www.acmicpc.net/problem/2037

ABBAS SALAM과 같이 공백을 포함하는 문자열을 한 번에 읽어야 할 때는 다음과 같이 한다.

int p, w; cin >> p >> w;
cin.ignore();
string s; getline(cin, s);

2번째 줄의 cin.ignore()은 위에서 p, w를 받고 나서 그 뒤에 오는 개행 문자를 무시하겠다는 뜻이다.