C++ 초급 - 2. 기본 문법 (3 - 기본 입출력 (Standard Input & Output))

2025. 2. 12. 11:46프로그래밍 언어/C++

2.3 기본 입출력 (Standard Input & Output)

C++에서는 콘솔 입출력(standard input/output)을 iostream 라이브러리를 통해 제공한다.
이를 이용하면 사용자로부터 입력을 받거나, 화면에 데이터를 출력할 수 있다.


(1) 표준 출력 (std::cout)

표준 출력은 std::cout을 사용하여 콘솔(터미널)에 데이터를 출력하는 기능을 제공한다.
출력 연산자 <<를 사용하여 원하는 데이터를 출력할 수 있다.

📌 기본 사용법

#include <iostream>  // 표준 입출력 라이브러리 포함

int main() {
    std::cout << "Hello, C++!" << std::endl; // 문자열 출력
    return 0;
}

🔹 출력 결과

Hello, C++!

📌 std::cout과 std::endl의 역할

  • std::cout → 콘솔에 데이터를 출력하는 객체
  • << → 출력 연산자로, cout에 데이터를 전달
  • std::endl → 줄바꿈(newline) 및 출력 버퍼 비우기(flush)

💡 줄바꿈 대안:

  • std::endl 대신 "\n"을 사용할 수도 있다.
std::cout << "Hello, C++!\n";
  • "\n"은 std::endl보다 성능이 약간 더 빠르다. (std::endl은 버퍼를 비우는 추가 작업 수행)

📌 std::cout을 활용한 다양한 출력

#include <iostream>

int main() {
    int num = 42;
    double pi = 3.14159;
    char letter = 'A';
    bool isPassed = true;

    std::cout << "Number: " << num << std::endl;
    std::cout << "Pi: " << pi << std::endl;
    std::cout << "Letter: " << letter << std::endl;
    std::cout << "Passed: " << isPassed << std::endl;

    return 0;
}

🔹 출력 결과

Number: 42
Pi: 3.14159
Letter: A
Passed: 1

💡 bool 값 true는 1, false는 0으로 출력됨.


(2) 표준 입력 (std::cin)

표준 입력은 std::cin을 사용하여 사용자로부터 데이터를 입력받는 기능을 제공한다.
입력 연산자 >>를 사용하여 값을 변수에 저장할 수 있다.

📌 기본 사용법

#include <iostream>

int main() {
    int age;
    std::cout << "나이를 입력하세요: ";
    std::cin >> age;
    std::cout << "입력한 나이: " << age << std::endl;
    return 0;
}

🔹 출력 예시 (사용자가 25를 입력한 경우)

나이를 입력하세요: 25
입력한 나이: 25

📌 std::cin의 동작 방식

  • std::cin >> 변수명; → 키보드 입력을 받아 변수에 저장
  • >> 연산자는 여러 개의 입력을 받을 수도 있음

📌 여러 개의 값 입력받기

한 줄에서 여러 개의 값을 입력받을 수도 있다.

#include <iostream>

int main() {
    int a, b;
    std::cout << "두 개의 숫자를 입력하세요: ";
    std::cin >> a >> b;
    std::cout << "입력한 숫자: " << a << "과 " << b << std::endl;
    return 0;
}

🔹 출력 예시 (사용자가 10 20을 입력한 경우)

두 개의 숫자를 입력하세요: 10 20
입력한 숫자: 10과 20

💡 주의:

  • std::cin은 공백(스페이스) 또는 개행(엔터)을 기준으로 데이터를 구분하여 입력받는다.
  • 여러 값을 입력할 때 띄어쓰기로 구분하면 자동으로 각각의 변수에 저장됨.

📌 문자열 입력 (std::cin vs std::getline)

기본적으로 std::cin은 공백(스페이스)을 기준으로 문자열을 입력받는다.
문자열 전체(공백 포함)를 입력받으려면 std::getline()을 사용해야 한다.

(1) std::cin 사용 시 문제점

#include <iostream>

int main() {
    std::string name;
    std::cout << "이름을 입력하세요: ";
    std::cin >> name;  // 공백 이전까지만 입력됨
    std::cout << "입력한 이름: " << name << std::endl;
    return 0;
}

🔹 입력 예시 (Kim Minsoo 입력 시)

이름을 입력하세요: Kim Minsoo
입력한 이름: Kim

💡 cin은 공백을 만나면 입력을 중단하기 때문에 "Kim Minsoo" 중 "Kim"만 저장됨.


(2) std::getline() 사용하여 전체 문자열 입력받기

#include <iostream>
#include <string>

int main() {
    std::string fullName;
    std::cout << "이름을 입력하세요: ";
    std::getline(std::cin, fullName);  // 전체 문자열 입력
    std::cout << "입력한 이름: " << fullName << std::endl;
    return 0;
}

🔹 입력 예시 (Kim Minsoo 입력 시)

이름을 입력하세요: Kim Minsoo
입력한 이름: Kim Minsoo

💡 std::getline(std::cin, 변수명)을 사용하면 공백 포함 문자열을 입력받을 수 있다.


📌 입출력 조합 문제 (버퍼 문제)

std::cin을 사용한 후 바로 std::getline()을 사용하면 입력 버퍼 문제가 발생할 수 있다.

📌 입력 버퍼 문제 예제

#include <iostream>
#include <string>

int main() {
    int age;
    std::string name;

    std::cout << "나이를 입력하세요: ";
    std::cin >> age;  // 숫자 입력
    std::cout << "이름을 입력하세요: ";
    std::getline(std::cin, name);  // 문자열 입력 (문제 발생)

    std::cout << "나이: " << age << ", 이름: " << name << std::endl;
    return 0;
}

🔹 출력 예시 (사용자가 25 입력 후 Kim Minsoo 입력 시)

나이를 입력하세요: 25
이름을 입력하세요:
나이: 25, 이름: 

💡 문제 발생 원인:

  • std::cin >> age; 실행 후 버퍼에 남아 있는 개행 문자(\n)가 std::getline()에 의해 읽힘
  • 따라서 name에는 빈 문자열("")이 저장됨.

📌 해결 방법: std::cin.ignore() 사용

입력 버퍼에 남아 있는 개행 문자를 제거하면 문제를 해결할 수 있다.

#include <iostream>
#include <string>

int main() {
    int age;
    std::string name;

    std::cout << "나이를 입력하세요: ";
    std::cin >> age;
    std::cin.ignore();  // 버퍼에 남은 개행 문자 제거

    std::cout << "이름을 입력하세요: ";
    std::getline(std::cin, name);

    std::cout << "나이: " << age << ", 이름: " << name << std::endl;
    return 0;
}

🔹 출력 예시 (정상 동작)

나이를 입력하세요: 25
이름을 입력하세요: Kim Minsoo
나이: 25, 이름: Kim Minsoo

정리

항목  설명
std::cout 콘솔에 출력 (<< 연산자 사용)
std::endl 줄바꿈 및 출력 버퍼 비우기
std::cin 사용자 입력 받기 (>> 연산자 사용)
std::getline() 공백 포함 문자열 입력
입력 버퍼 문제 std::cin.ignore()를 사용하여 해결