C++의 Hello, world! 예제 편에서 iostream 라이브러리를 통해 오리지널 C언어의 printf()
함수를 대신해서 std::cout
객체를 사용해 콘솔에 텍스트를 출력하는 방법을 알아보았습니다.
여기서는 iostream 라이브러리를 통해 입력받은 값을 변수에 대입하는 방법을 알아보기로 합니다.
먼저, 오리지널 C언어로 된 다음 코드를 봅시다.
#include <stdio.h> struct Profile { char name[20]; int age; }; int main() { struct Profile pr; printf("당신의 이름은? "); scanf("%s", pr.name); printf("당신의 나이는? "); scanf("%d", &pr.age); printf("\n입력된 데이터는 다음과 같습니다.\n"); printf("이름: %s\n", pr.name); printf("나이: %d\n", pr.age); return 0; }
이 코드는 다음과 같이 실행될 것입니다.
당신의 이름은? 홍길동 당신의 나이는? 20 입력된 데이터는 다음과 같습니다. 이름: 홍길동 나이: 20
이름과 나이를 키보드로 입력하면 입력 결과를 그대로 출력하는 프로그램입니다.
이 프로그램을 iostream 라이브러리를 사용한 C++로 다시 코딩하면 다음과 같습니다.
#include <iostream> #include <string> struct Profile { std::string name; int age; }; int main() { struct Profile pr; std::cout << "당신의 이름은? "; std::cin >> pr.name; std::cout << "당신의 나이는? "; std::cin >> pr.age; std::cout << "\n입력된 데이터는 다음과 같습니다.\n"; std::cout << "이름: " << pr.name << "\n"; std::cout << "나이: " << pr.age << "\n"; return 0; }
기존의 scanf()
함수는 std::cin
객체로 대체되었습니다. 또한, 문자형의 배열로 선언되었던 변수가 C++에서 추가된 string 라이브러리의 문자열 자료형(std::string
)으로 대체되었습니다. 물론 기존처럼 Null(\0) 값을 끝값으로 하는 문자형의 배열로 선언하는 것도 가능합니다.
시프트 연산자가 왼쪽(<<)으로 향하는 std::cout
객체와는 반대로 시프트 연산자를 std::cin
의 오른쪽(>>)으로 향하게 적어 줍니다. 기존의 scanf()
함수와 비교해 보면, 서식 지정자(%s, %d 등)를 쓸 필요가 없고 또 입력받을 변수의 주소를 넘기기 위해 앞에 &표시를 넣을 필요가 없다는 점이 장점입니다. 또한, std::cout
객체와 마찬가지로 속도는 다소 느려지지만 안전성 면에서는 기존의 scanf()
보다 좋다는 장점도 있습니다.