※ 본 포스팅은 유튜브 C++ Full Course 강의를 기반으로 제가 직접 정리한 C++ 기본 문법에 대한 글입니다.
서론을 잠깐 말하자면, C++에 대해 배운 것을 까먹지 않기 위해 블로그에 정리하는 것입니다. 기본적으로 다른 프로그래밍 언어를 다룬 적이 있기 때문에 강의 영상을 보고 제가 제 마음대로 빼거나 추가하면서 정리할 예정입니다. 최대한 틀린 부분이 있지 않게 적겠지만 혹시 잘못된 부분이 있으면 알려주세요!
< 6. Arithmetic operators >
#include <iostream>
int main() {
int students = 20;
students = students + 1;
students += 1;
students++;
students = students - 1;
students -= 1;
students--;
students = students * 2;
students *= 2;
students = students / 2;
students /= 2;
students /= 3;
//이 경우 students 가 int 이기 때문에 6라는 값이 나옴 만약 double 로 바꾸면 소수점까지 나옴
int remainder = students % 3;
// modulus operator(나머지 연산자)
std::cout << remainder;
return 0;
}
Arithmetic operators = return the result of a specific arithmetic operation
쉽게 말해서 +, -, *, / 같은 것들이며, 산술연산자라고 불린다.
1만 더하거나 뺄 때는 ++ 또는 -- 로 간결하게 작성할 수 있다.
나눗셈의 경우 int이면 소수점이 절삭되고 double로 바꿔야 소수점까지 나올 수 있다.
% 는 modulus operator로 나머지 연산자이다. 말 그대로 나누고 남은 나머지 값을 결과로 보여준다.
< 7. Type conversion>
#include<iostream>
int main() {
double x = (int) 3.14;
std::cout << x;
std::cout << (char) 100;
//explicit cast -> 아스키 코드로 d가 나옴
int correct = 8;
int questions = 10;
double score = correct/(double)questions * 100;
//explicitly cast 하지 않으면 truncate되가지고 출력값이 0%가 됨 -> double 로 변환시키기
std::cout << score << "%";
return 0;
}
Type conversion이란 값을 다른 데이터 타입으로 변환시키는 것이다.
여기서 implicit type conversion과 explicit type conversion으로 나뉠 수 있는데,
implicit은 컴파일러가 자동으로 변환해 주는 경우를 의미하고,
explicit은 값 앞에 직접 명시해줌으로써 변환시키는 경우를 의미한다.
위 코드에 나와있는 예시를 보자면,
x는 double로 선언되었지만, value인 3.14 앞에 (int)를 붙여 명시적으로 변환시키면,
x를 출력했을 때 소수점이 절삭된 3이라는 Integer가 나온다.
마찬가지로 100이라는 숫자 앞에 (char)이라는 변환을 명시하면, 아스키코드에서 100에 해당하는 d가 나온다.
나눗셈을 할 때 주의해야하는데, 8과 10을 둘 다 정수로 선언했기에 타입을 변환시켜주지 않으면,
0.8 * 100 이 아닌 0 * 100 이 되어 0이라는 결과값이 나온다.
이때 분모값 앞에 (double)이라고 타입을 변환시켜주면 제대로 된 값을 도출할 수 있다.
< 8. User input >
#include <iostream>
//cout << (insertion operator)
//cin >> (extraction operator)
int main()
{
std::string name;
int age;
std::cout << "What's your age? : ";
std::cin >> age;
std::cout << "What's your full name?: ";
// std::cin >> name;
std::getline(std::cin >> std::ws, name);
std::cout << "Hello " << name << '\n';
std::cout << "You are " << age << " years old" << '\n';
return 0;
}
기본적으로 출력을 할때 std::cout을 쓰는 것처럼 입력을 할 때는 std::cin을 사용한다.
화살표 방향도 바뀌기 때문에 주의가 필요하다.
다만 string을 입력할 때 (예를 들어 Full Name 입력하고 싶을 때) space가 들어간다면 std::cin은 space다음을 인식하지 못한다. 이때 쓸 수 있는 게 getline이다.
기본 구조는 아래코드와 같다.
std::getline(std::cin, name);
하지만 위 코드처럼 이름을 먼저 입력하고 나이를 입력하는 게 아니라 나이-이름 순으로 입력하면 나이를 입력 후 자동으로 빈 space가 이름 입력칸에 들어가 버린다.
이를 방지하기 위해 추가해야 하는 것이 std::ws 이다.
std::getline(std::cin >> std::ws, name);
std::ws 역할: eliminate any new line characters or any white spaces before any user input
이렇게 하면, 정상적으로 full name을 출력할 수 있다.
< 9. Useful math related functions >
#include <iostream>
#include <cmath>
int main()
{
double x =3.99;
double y =4;
double z;
z = std::max(x, y);
z = std::min(x, y);
z = pow(2, 3); // z = 2**3
z = sqrt(9); // z = 3
z = abs(-3); // z = 3 절댓값
z = round(x); // x가 3.14일 때 z = 3 반올림
z = ceil(x); // x가 3.14일 때 z = 4 올림
z = floor(x); // x가 3.99일 때 z = 3 내림
std::cout << z;
return 0;
}
cmath라는 헤더 파일을 추가하면 더 다양한 수학 관련 함수들을 사용할 수 있다.
딱히 추가로 설명할 부분은 없는 것 같다.
더 알고 싶은 함수가 있을 경우, http://www.cplusplus.com/reference/cmath 를 참고하면 math function에 대해 자세히 설명되어 있다.
< 10. If statements >
#include <iostream>
int main()
{
int age;
std::cout << "Enter your age : ";
std::cin >> age;
if(age >= 18 && age < 100){
std::cout << "Welcome to the site!";
} // ( )안이 사실이면 { } 안의 문장을 수행함
else if(age < 0){
std::cout << "You haven't been born yet!";
} // if가 거짓이면 그다음 else if 판단 ->참이면 else if {}문장 수행 /거짓이면 else 문장 수행
else if(age >= 100){
std::cout << "You are too old to enter this site!";
}
else{
std::cout << "You are not old enough to enter!";
} //else 문을 추가하면 ( ) 안이 거짓일 때 수행 할 동작을 적을 수 있음.
return 0;
}
if 문은 괄호 안의 조건이 true이면, {} 블록 코드를 실행하고, 그렇지 않을 경우 실행하지 않는다.
if(조건){
code1
}
else if(조건){
code2
}
else{
code3
}
if만 있을 수도 있고 if, else만 있을 수도 있지만 구성요소를 다 적자면 위와 같을 수 있다.
여기서 else if는 여러 개로 구성할 수 있다.
주의할 점은 앞에서 true 조건을 충족해서 code를 실행하면 뒤에 else if의 조건을 충족해도 else if 안의 code는 실행되지 않는다.
if(age >= 18){
std::cout << "Welcome to the site!";
} // ( )안이 사실이면 { } 안의 문장을 수행함
else if(age >= 100){
std::cout << "You are too old to enter this site!";
}
else{
std::cout << "You are not old enough to enter!";
}
첫 번째 코드를 조금 변형해서 간단한 예시를 만들었다. 맨 처음 if의 조건문은 18살 이상이다. 뒤에 else if는 조건이 100살 이상이다. 이럴 경우 if조건도 참이고 else if조건도 참이기에 앞에 있었던 if 조건에 해당하는 code를 실행하게 된다.
이런 경우를 방지하기 위해 조건의 중복이 없는지 확인해 볼 필요가 있다.
< 11. Switches >
#include <iostream>
int main()
{
int month;
std::cout << "Enter the month(1-12): ";
std::cin >> month;
switch(month){
case 1:
std::cout << "January";
break;
case 2:
std::cout << "February";
break;
case 3:
std::cout << "March";
break;
.
.
.
case 10:
std::cout << "October";
break;
case 11:
std::cout << "November";
break;
case 12:
std::cout << "December";
break;
default:
std::cout << "Please enter in only numbers (1-12)";
}
return 0;
}
switch는 수많은 else if를 적어야 할 때 대체할 수 있는 조건문이다.
위와 같이 숫자 1-12까지 몇 월인지를 알아내야 할 때 else if는 일일이 (month==1) 이런 식으로 조건을 적어야 한다면, switch는 case로 더 간결하게 적을 수 있다.
마지막에 default case를 적는데, 모든 case가 아닌 경우 default 코드를 실행하게 된다.
주의할 점은, 만약 숫자가 3이어서 case 3을 실행할 때 break문을 모든 case에 적어주지 않으면 3부터 12, default case까지 출력되게 된다. switch case를 적을 때 break문을 꼭 까먹지 말고 적어야 한다.
강의는 Bro Code라는 유튜버의 총 6시간 분량의 강의입니다. 영상에서 나눠져 있는 챕터 제목을 기준으로 작성할 예정입니다. 다만 영어강의라는 점이 좀 걸리는데..한국어 강의를 찾다가 컴팩트 하면서 제가 지루하지 않고 잘 배울 수 있는 영상을 못 찾아서 영어강의를 듣게 되었습니다. 혹시 이 블로그를 보시고 들을 생각을 가진 분이 계시다면 영어자막도 있고 어색하지만 자동번역되는 한글자막도 있으니 너무 겁먹지 마시고 들어보길 바랍니다:)
해당 강의 영상은 아래에 걸어두겠습니다. 혹시 틀린 부분이나 추가해주고 싶은 부분이 있으면 알려주세요.
<이전글>
2023.03.21 - [TIL/C++] - [C++ 기본문법] #1 HelloWorld부터 Typedef까지
[C++ 기본문법] #1 HelloWorld부터 Typedef까지
※ 본 포스팅은 유튜브 C++ Full Course 강의를 기반으로 제가 직접 정리한 글입니다. 서론을 잠깐 말하자면, C++에 대해 배운 것을 까먹지 않기 위해 블로그에 정리하는 것입니다. 기본적으로 다른
chaeon-story.tistory.com