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()를 사용하여 해결 |
'프로그래밍 언어 > C++' 카테고리의 다른 글
C++ 초급 - 2. 기본 문법 (5 - 연산자 (Operators)) (0) | 2025.02.12 |
---|---|
C++ 초급 - 2. 기본 문법 (4 - 주석 (Comments)) (0) | 2025.02.12 |
C++ 초급 - 2. 기본 문법 (2 - auto 타입 추론 (C++11)) (0) | 2025.02.12 |
C++ 초급 - 2. 기본 문법 (1 - 변수와 데이터 타입 (Variables & Data Types)) (0) | 2025.02.12 |
C++ 초급 - 1. C++ 소개 및 개발 환경 설정 (4 - 첫 번째 C++ 프로그램 실행) (0) | 2025.02.12 |