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()보다 좋다는 장점도 있습니다.