C++의 변수 입력 예제

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

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 항목은 *(으)로 표시합니다