이 글은 노마드코더 - AI 기초 탄탄 클럽 시리즈의 9번째 기록입니다. (총 13개)

미션은 Python이었지만 같은 기능을 최근에 배운 언어인 C++로도 작성해서 비교해봤다.

def add(x, y):
    return x + y

def subtract(x, y):
    return x - y

def multiply(x, y):
    return x * y

def divide(x, y):
    if y == 0
        return "오류: 0으로 나눌 수 없습니다."
    return x / y

print("\n==== 파이썬 계산기 ====\n")

while True:
    try:
        num1 = float(input("첫 번째 숫자를 입력하세요: "))
        num2 = float(input("두 번째 숫자를 입력하세요: "))
    except ValueError:
        print("오류: 숫자를 정확히 입력해주세요.")
        continue

    print("\n===========================")
    print("+: 더하기, -: 빼기, *: 곱하기, /: 나누기, q: 종료")
    print("===========================")

    choice = input("\n원하는 연산자를 입력하세요 (종료하려면 q): ")

    if choice.lower() == 'q':
        print("계산기를 종료합니다.")
        break

    if choice in ('+', '-', '*', '/'):
        if choice == '+':
            print(f"결과: {num1} + {num2} = {add(num1, num2)}")
        elif choice == '-':
            print(f"결과: {num1} - {num2} = {subtract(num1, num2)}")
        elif choice == '*':
            print(f"결과: {num1} * {num2} = {multiply(num1, num2)}")
        elif choice == '/':
            print(f"결과: {num1} / {num2} = {divide(num1, num2)}")
    else:
        print("잘못된 입력입니다. 정확한 연산자를 입력하거나 q를 입력해주세요.")
#include <iostream>
#include <string>
#include <cctype>

using namespace std;

float add(float x, float y);
float subtract(float x, float y);
float multiply(float x, float y);
float divide(float x, float y);

int main() {
    cout << "==== C++ 계산기 ====" << endl;

    while (true) {
        float num1 = 0.0f;
        float num2 = 0.0f;
        cout << "첫 번째 숫자를 입력하세요: ";
        if (!(cin >> num1)) {
            cout << "오류: 숫자를 정확히 입력해주세요." << endl;
            cin.clear(); 
            cin.ignore(numeric_limits<streamsize>::max(), '\n');
            continue;
        }
        cout << "두 번째 숫자를 입력하세요: ";
        if (!(cin >> num2)) {
            cout << "오류: 숫자를 정확히 입력해주세요." << endl;
            cin.clear(); 
            cin.ignore(numeric_limits<streamsize>::max(), '\n');
            continue;
        }
        cout << endl;
        cout << "===========================" << endl;
        cout << "+: 더하기, -: 빼기, *: 곱하기, /: 나누기, q: 종료" << endl;
        cout << "===========================" << endl;

        string choice = "";
        cout << "원하는 연산자를 입력하세요 (종료하려면 q): ";
        cin >> choice;
        for (char& c : choice) c = tolower(c);
        cout << endl;

        if (choice == "q") {
            break;
        }
        else if (choice == "+") {
            cout << "결과: " << num1 << " + " << num2 << " = " << add(num1, num2) << endl;
        }
        else if (choice == "-") {
            cout << "결과: " << num1 << " - " << num2 << " = " << subtract(num1, num2) << endl;
        }
        else if (choice == "*") {
            cout << "결과: " << num1 << " * " << num2 << " = " << multiply(num1, num2) << endl;
        }
        else if (choice == "/") {
            if (num2 != 0) {
                cout << "결과: " << num1 << " / " << num2 << " = " << divide(num1, num2) << endl;
            }
            else {
                cout << "오류: 0으로 나눌 수 없습니다." << endl;
                continue;
            }
        }
        else {
            cout << "잘못된 입력입니다. 정확한 연산자를 입력하거나 q를 입력해주세요." << endl;
            continue;
        }
    }
}

float add(float x, float y) {
    return x + y;
}
float subtract(float x, float y) {
    return x - y;
}
float multiply(float x, float y) {
    return x * y;
}
float divide(float x, float y) {
    return x / y;
}

두 언어의 차이점

  • Python의 float는 64비트, C++의 float는 32비트. 따라서 C++에서 같은 정밀도를 원하면 double을 사용해야 한다
  • C++의 cin은 파싱에 실패하면 에러상태가 유지되고 입력 버퍼에 잘못된 값이 그대로 남아서 복구가 필수이다. 에러 상태 초기화(cin.clear()) 및 버퍼 비우기(cin.ignore(numeric_limits <streamsize>::max(), '\n' );)
  • Python의 .lower()는 문자열 전체에 바로 사용 가능하지만 C++의 tolower()는 char 하나씩 처리하기 때문에 문자열 전체에 적용하려면 루프를 돌려서 한 글자씩 변환해야 한다.
  • Python은 함수를 호출 전에만 실행하면 되지만 C++는 함수를 main()아래에 두려면 전방 선언을 해야한다.
  • Python은 인터프리터 언어라 VSCode에 Python 확장만 설치하면 바로 실행 가능하지만 C++는 컴파일 언어라 빌드 설정을 잡아줘야 실행이 가능하기 때문에 VSCode에서 바로 실행되지 않는다. VisualStudio에서 실행하거나 VSCode에 MinGW(g++)를 설치하거나 해야한다.
  • 함수 선언 방식
    • C++: 함수를 통해 return되는 내용의 자료형을 정하고 함수 생성. 매개변수의 자료형도 미리 선언해둬야 함. float add(float x, float y);
    • Python: def(define)를 사용해 함수를 정의함. def add(x, y)
  • 글자 출력 방식
    • C++: std::cout을 사용함. 줄 바꿈은 std::endl. 변수를 사용할 경우 << 로 문자열과 나눠서 사용.
      cout << "결과: " << num1 << " + " << num2 << " = " << add(num1, num2) << endl;
    • Python: print(f"내용"). 줄 바꿈은 print 끝에서는 자동. 중간에는 \n 사용. 변수를 사용할 경우 {변수명} 사용.
      print(f"결과: {num1} + {num2} = {add(num1, num2)}")
  • 조건문 작성 방식
    • C++: if(조건){}, else if
    • Python: if 조건:, elif

Series: 노마드코더 - AI 기초 탄탄 클럽