오늘은 조금 난이도를 올려보겠습니다. 간단한 입력을 받고 그 결과를 가지고 출력해 보겠습니다.
// 1-2.cpp
#include <iostream>
int main()
{
int age; // 나이를 저장하는 변수
std::cout << "당신의 나이를 입력하세요: ";
std::cin >> age; // 입력을 받음
std::cout << "당신의 나이는 " << age << "살 입니다." << std::endl;
return 0;
}
자, 일단 출력을 해 보면
당신의 나이를 입력하세요:
이렇게만 나오고 커서가 깜박거릴 겁니다. 이건 입력을 대기하는 상태입니다.
콘솔 창에 자신의 나이를 숫자로 입력하고 Enter 키를 누르면 입력이 됩니다.
당신의 나이를 입력하세요: 539 (엔터)
당신의 나이는 539살 입니다.
자신이 입력한 나이에 따라 출력값이 바뀝니다. 만약 출력 결과가 올바르지 않다면 오류가 생긴 것이니,
위의 소스코드와 자신이 입력한 코드를 잘 비교해서 확인하시길 바랍니다.
몇가지 주의사항을 말씀드리겠습니다.
- - int main() 의 뒤부터 여는 중괄호 '{' 사이에 세미콜론을 입력하지 않습니다.
- - "을 '으로 입력하지 않습니다.
- - ;을 올바른 곳에 입력했는지 확인합니다.
- - 대소문자를 잘 살펴봅니다.
- - <<을 < <으로 쓰지는 않았는지 확인합니다.
- - std::cout를 std:cout으로 쓰지는 않았는지 확인합니다.
처음 하신다면 쉬운 건 없을겁니다.
C계열 언어에 익숙하신 분들이라면 이 부분은 아마 쉽게 넘어가실 수 있으리라 생각합니다.
문장
int age; std::cout << "당신의 나이를 입력하세요: "; std::cin >> age; std::cout << "당신의 나이는 " << age << "살 입니다." << std::endl; return 0;
int age;
std::cout << "당신의 나이를 입력하세요: ";
std::cin >> age;
std::cout << "당신의 나이는 " << age << "살 입니다." << std::endl;
return 0;
여기 있는 모든 것들을 문장이라고 부릅니다. C++에서 문장은 반드시 세미콜론 ';' 으로 끝나야 합니다.
int age;
이 부분은 age라는 이름의 정수형 변수를 선언하는 문장입니다. C++에선 변수를 먼저 선언해야 사용할 수 있습니다. 변수 선언에 관해선 다음 포스팅에 더욱 자세히 설명하니 여기선 간단하게 설명만 하고 넘어가겠습니다.
std::cout << "당신의 나이를 입력하세요: ";
익숙한 문장이죠? 출력을 하는 문장입니다. 끝에 << std::endl 이 없으면 출력을 하고 다음줄로 넘어가지 않습니다.
std::cin >> age;
입력을 받는 문장입니다. 사용자가 나이를 입력하면 아까 선언한 age라는 변수에 저장합니다.
std::cout << "당신의 나이는 " << age << "살 입니다." << std::endl;
이 부분이 조금 의아하실 수 있는데, 풀어서 쓰면 다음과 같습니다.
std::cout << "당신의 나이는 ";
std::cout << age;
std::cout << "살 입니다." << std::endl;
즉, '당신의 나이는 '이란 문장을 출력하고 사용자가 입력한 나이를 출력합니다.
그리고 그 뒤에 '살 입니다'란 문장을 출력하고 줄을 바꿉니다.
출력할 것들이 여러 개 있으면 위처럼 << 를 통해 한 줄로 표현할 수 있는 겁니다.
체인 연결하는 것 처럼 계속해서 조립하듯 출력하는 것이라고 보시면 됩니다.
소스 코드 내부에서 수식을 사용할 수 있습니다. 자세한 것은 '2-2. 연산자 I', '2-3. 연산자 II'에서 다루겠지만 우선 덧셈, 뺄셈, 곱셈, 나눗셈 등을 할 수 있다는 걸 확인하고 진행하겠습니다.
#include <iostream>
int main()
{
int age; // 나이를 저장하는 변수
std::cout << "당신의 나이를 입력하세요: ";
std::cin >> age; // 입력을 받음
std::cout << "5년 후의 당신의 나이는 " << age + 5
<< "살 입니다." << std::endl;
return 0;
}
std::cout << "5년 후의 당신의 나이는 " << age + 5
<< "살 입니다." << std::endl;
위 문장은 가로의 길이가 너무 길어지면 보기가 불편해서 << 의 앞에서 줄을 바꾸어줬습니다.
이때, 윗줄 (age + 5로 끝나는 줄)에는 세미콜론을 붙이지 않습니다. 세미콜론을 붙이지 않으면 문장이 아랫줄까지 계속 이어진다는 의미입니다.
저 문장은 age에 저장된 나이에 5를 더해서 출력합니다. 이때, age안에 있는 값은 바뀌지 않습니다.
age안에 있는 값에 5를 더해서 다시 저장하고 싶다면 아래와 같이 사용합니다.
age = age + 5
등호가 있지만 등호라고 부르지 않고 대입 연산자라고 부릅니다. 오른쪽의 값을 왼쪽에 대입하는 연산자입니다. 예를 들어, age에 저장된 값을 10이라고 가정하겠습니다. 대입연산자의 오른쪽을 먼저 봐 주세요.
age = 10 + 5;
age에 저장된 10이라는 값을 꺼내오면 위처럼 치환이 됩니다. 그리고 10+5를 연산합니다.
age = 15;
그리고 마지막에는 age 변수에 새롭게 15라는 값을 대입한다는 뜻이 됩니다. 즉, age는 이제 15라는 값을 가지게 되었습니다. 만약 여기서 5를 한 번더 더해서 20을 만들려면 어떻게 해야 할까요?
맞습니다. 한번 더 반복하면 됩니다.
덧셈 뿐만 아니라 뺄셈, 곱셈, 나눗셈도 가능합니다.
age = 35 - 16;
age = age * 3;
age = 300 / 5;
위 코드에서 age 변수는 각각 19, 57, 60의 값을 갖게 됩니다.
주석
주석은 딱히 어렵지 않습니다. 주석은 코드에 대해 설명하는 부분인데, 소스코드가 컴파일 될 때 주석은 모두 삭제되어 프로그램에 아무런 영향으 주지 않습니다. 하지만 나중에 자신이 이 코드를 왜 썼는지 등에 대해 설명할 수 있기 때문에 주석을 잘 쓰는 습관이 중요합니다.
주석은 /*과 */을 사용하여 표현할 수 있고, // 를 사용하여 한 줄만 주석으로 만들 수도 있습니다.
int age; // 나이를 저장하는 변수
std::cin >> age; // 입력을 받음
위처럼 '//' 를 사용하면 //부터 그 문장 끝까지는 주석으로 처리됩니다.
int age;
/* age는 나이를 저장하는 정수형 변수
아래 문장은 age에 값을 입력받는다 */
std::cin >> age;
이렇게 '/*', '*/'를 사용하면 그 사이에 있는 내용은 모두 주석이 됩니다. 여러 줄에 걸쳐 사용해도 문제가 없습니다.
단, /* */ 주석 안에 또 /* */ 주석을 사용하면 문제가 발생합니다.
/* 주석
/* 주석 안 주석
*/ 주석
*/
색깔이 모두 회색이 아니라 아래 일부는 검은색이죠? 주석이 아니란 뜻입니다. 즉, 주석에서 제외된 부분이란 거죠. 왜냐하면 두번째 줄의 '/*' 가 첫째, 셋째 줄의 주석 안에 갇혀서 의미가 없어지고, 넷째 줄의 '*/' 만 따로 남게 되기 때문입니다. 주석 안에 주석을 사용하려면 '//' 더블 슬래시 주석을 사용해야 합니다.
// 주석을 여러 줄에 사용하려면 줄마다 //를 입력하면 됩니다.
// 주석
// 오늘은 추석
// 아 아니구나
중괄호와 블록
int main()
{
}
main() 함수는 이제 익숙하시죠? 이때 main() 함수의 아래쪽에 중괄호 {, }는 각각 main() 함수의 시작과 끝을 의미합니다. 중괄호를 통해 블록, 즉 하나의 구역을 만드는 겁니다. 지금 보는 중괄호는 main() 함수와 붙어있기 때문에 main() 함수의 본체가 되는데,
int main();
{
}
저렇게 main(); 하고 세미콜론을 붙여버리면 main()함수의 머리와 몸통이 떨어지게 됩니다. (세미콜론 부분에서 문장이 끝난 것으로 간주) 저런 상황에선 당연히 오류가 납니다.
int main() {
}
세미콜론으로 분리된 게 아니라면, main함수와 중괄호 사이엔 공백이 아무리 있어도 상관이 없습니다. 위처럼 스페이스바 만큼만 띄워도 되고, 예제 코드처럼 한 줄 아래로 내려도 됩니다.
이 부분은 각자의 코딩 스타일에 따라 편한 방식을 사용하면 됩니다. 저는 주로 중괄호를 함수 머리에 붙여씁니다.
반대로, 많은 입문자분들께선 중괄호를 한 줄 밑으로 내려씁니다. 보기 편하고 가독성이 좋기 때문입니다. 저도 처음에 C언어를 배울 땐 그런 방식을 사용했습니다.
#include <iostream>
int main()
{
{
int num = 30 * 27;
}
std::cout << num;
}
중괄호를 쓸 때에는 안에 탭(Tab)키 한칸, 또는 스페이스 네 칸으로 들여쓰기를 해 줘야 합니다. 가독성이 좋아지기 때문인데요, 비주얼 스튜디오를 포함한 대부분의 IDE에서는 자동으로 들여쓰기를 해 줍니다.
위에 보시면 main() 함수 안에 또다른 중괄호 블록이 있습니다. 함수의 내부에는 마음대로 중괄호를 열고 닫을 수 있습니다. 저런 걸 내포 블록이라고 하는데, 함수 안에 영역을 따로 지정해주는 역할을 합니다.
그런데 주의할 점이 있습니다. 저걸 사용하는 이유기도 한데, 변수의 특성상 자신이 속해있는 블록이 끝나면 소멸해버립니다.
{ // 내포 블록 시작
int num = 30 * 27; // num 변수 선언
} // 내포 블록 종료. num 변수가 사라진다!
std::cout << num; // 오류: num이라는 변수를 찾을 수 없음.
아시겠나요? num은 내포 블록에서 만들어졌기 때문에 해당 블록이 끝나면 사라집니다. 내포 블록 밖에서는 해당 변수에 접근할 수 없습니다. 사실 내포 블록은 저렇게 쓰는 경우는 거의 없고, 나중에 배울 if~else나 for문등에서 사용합니다.
1-2. 도전과제
- sum이라는 정수형 변수를 선언해 보세요.
- 1부터 5를 곱한 값을 sum에 대입하고, 출력해 보세요.
- sum에 '5 팩토리얼'이라는 주석을 달아보세요.
- sum을 내포블록에 선언하고, 내포블록에서 출력해 보세요.
난이도가 소폭 상승했죠? 아직은 기본중의 기본이니 조금 더 힘을 내서 달려봅시다.
다음 강좌는 정말 머리가 터질수도 있으니 주의하세요.
다음 시간엔 '변수의 선언과 자료형'에 대한 주제로 찾아뵙겠습니다.
'C++ > 카루의 C++ 강좌' 카테고리의 다른 글
[카루의 C++ 강좌] 1-5. 입력받기 - std::cin과 std::scanf() (0) | 2020.03.21 |
---|---|
[카루의 C++ 강좌] 1-4. 출력하기 - std::cout와 std::printf() (0) | 2020.03.21 |
[카루의 C++ 강좌] 1-3. 변수의 선언과 자료형 (0) | 2020.03.20 |
[카루의 C++ 강좌] 1-1. C++ 프로그램의 시작, main() 함수 (0) | 2020.03.20 |
[카루의 C++강좌] 0. 시작하며 & 목차 (1) | 2020.03.20 |