다음을 통해 공유


C++에서 콘솔 계산기 만들기

C++ 프로그래머의 일반적인 시작점은 명령줄에서 실행되는 "Hello, world!" 애플리케이션입니다. 이 문서에서 시작한 다음 더 어려운 계산기 앱으로 이동합니다.

필수 조건

  • 컴퓨터에서 C++ 워크로드가 설치되고 실행되는 데스크톱 개발이 포함된 Visual Studio. 설치하려면 Visual Studio에서 C++ 지원 설치를 참조하세요.
  • 이 자습서에서는 앱이 실행되는 동안 코드를 변경할 수 있는 편집 및 계속이라는 기능을 보여 줍니다. 편집하고 계속하려면 주 메뉴에서 도구>옵션>디버깅 일반을> 선택하고 원본 파일이 원래 버전과 정확히 일치하도록 요구가 선택되어 있는지 확인합니다.

앱 프로젝트 만들기

Visual Studio는 프로젝트를 사용하여 앱의 코드를 구성하고 솔루션을 사용하여 하나 이상의 프로젝트를 구성 합니다 . 프로젝트에는 앱을 빌드하는 데 사용되는 모든 옵션, 구성 및 규칙이 포함됩니다. 또한 모든 프로젝트의 파일과 외부 파일 간의 관계도 관리합니다. 앱을 만들려면 먼저 새 프로젝트 및 솔루션을 만듭니다.

  1. Visual Studio 시작 - Visual Studio 시작 대화 상자가 나타납니다. 새 프로젝트 만들기를 선택하여 시작합니다.

    Visual Studio 2022가 시작될 때 나타나는 대화 상자의 스크린샷

    대화 상자에는 리포지토리를 복제하고, 프로젝트 또는 솔루션을 열고, 로컬 폴더를 열고, 새 프로젝트를 만드는 옵션이 있습니다."

  2. 새 프로젝트 만들기 대화 상자에서 언어 드롭다운을 C++로 설정하고, 플랫폼 드롭다운을 Windows로 설정하고, 프로젝트 유형 목록에서 콘솔 앱을 선택한 다음, 다음을 선택합니다.

    Visual Studio 새 프로젝트 만들기 대화 상자의 스크린샷

    언어 드롭다운은 C++로 설정되고, 플랫폼 드롭다운은 Windows로 설정되며, 빈 프로젝트, 콘솔 앱, CMake 프로젝트, Windows 데스크톱 마법사 등의 프로젝트 형식이 프로젝트 형식 목록에 나타납니다."

    중요합니다

    콘솔 앱 템플릿의 C++ 버전을 선택해야 합니다. C++, Windows콘솔 태그가 있고 아이콘 모서리에 "++"가 있습니다.

  3. 새 프로젝트 구성 대화 상자에서 프로젝트 이름 텍스트 상자를 선택하고 새 프로젝트 이름을 CalculatorTutorial로 지정한 다음 만들기를 선택합니다.

    Visual Studio 새 프로젝트 구성 대화 상자의 스크린샷. 프로젝트 이름, 프로젝트 위치 및 솔루션 이름에 대한 필드가 있습니다.

    빈 C++ Windows 콘솔 애플리케이션 'Hello World' 앱이 만들어집니다. 콘솔 애플리케이션은 Windows 콘솔 창을 사용하여 출력을 표시하고 사용자 입력을 수락합니다. Visual Studio에서 편집기 창이 열리고 생성된 코드가 표시됩니다.

    // CalculatorTutorial.cpp : This file contains the 'main' function. Program execution begins and ends there.
    //
    
    #include <iostream>
    
    int main()
    {
        std::cout << "Hello World!\n";
    }
    
    // Run program: Ctrl + F5 or Debug > Start Without Debugging menu
    // Debug program: F5 or Debug > Start Debugging menu
    
    // Tips for Getting Started:
    //   1. Use the Solution Explorer window to add/manage files
    //   2. Use the Team Explorer window to connect to source control
    //   3. Use the Output window to see build output and other messages
    //   4. Use the Error List window to view errors
    //   5. Go to Project > Add New Item to create new code files, or Project > Add Existing Item to add existing code files to the project
    //   6. In the future, to open this project again, go to File > Open > Project and select the .sln file
    

새 앱이 빌드 및 실행되는지 확인

새 Windows 콘솔 애플리케이션에 대한 템플릿은 간단한 C++ "Hello World" 앱을 만듭니다. 이 시점에서 Visual Studio가 IDE에서 바로 만드는 앱을 빌드하고 실행하는 방법을 확인할 수 있습니다.

  1. 프로젝트를 빌드하려면 빌드 메뉴에서 솔루션 빌드를 선택합니다. 출력 창에는 빌드 프로세스의 결과가 표시됩니다.

    Visual Studio 출력 창의 스크린샷 빌드에 성공했다는 메시지가 표시됩니다.

  2. 코드를 실행하려면 메뉴 모음에서 디버그>디버깅하지 않고 시작을 선택합니다(Ctrl+F5).

    애플리케이션의 출력을 표시하는 Visual Studio 디버그 콘솔의 스크린샷: Hello World!

    콘솔 창이 열리고 앱이 그 안에서 실행됩니다.

    Visual Studio에서 콘솔 앱을 시작하면 코드를 실행한 후 "아무 키나 눌러 이 창을 닫습니다." . " 출력을 볼 수 있는 기회를 제공합니다.

    축하합니다! Visual Studio에서 첫 번째 "Hello, world!" 콘솔 앱을 만들었습니다.

  3. 키를 눌러 콘솔 창을 해제하고 Visual Studio로 돌아갑니다.

이제 변경이 있을 때마다 앱을 빌드하고 실행하여 코드가 예상대로 작동하는지 확인하는 도구가 있습니다. 나중에 디버그하지 않는 경우 디버그하는 방법을 보여 드립니다.

코드 편집

이제 이 템플릿의 코드를 계산기 앱으로 수정해 보겠습니다.

  1. 이 예제와 일치하게 파일의 CalculatorTutorial.cpp 내용을 다음 코드로 바꿉니다.

    // CalculatorTutorial.cpp : This file contains the 'main' function. Program execution begins and ends there.
    //
    
    #include <iostream>
    
    using namespace std;
    
    int main()
    {
        cout << "Calculator Console Application" << endl << endl;
        cout << "Please enter the operation to perform. Format: a+b | a-b | a*b | a/b"
            << endl;
        return 0;
    }
    
    // Run program: Ctrl + F5 or Debug > Start Without Debugging menu
    // Debug program: F5 or Debug > Start Debugging menu
    // Tips for Getting Started:
    //   1. Use the Solution Explorer window to add/manage files
    //   2. Use the Team Explorer window to connect to source control
    //   3. Use the Output window to see build output and other messages
    //   4. Use the Error List window to view errors
    //   5. Go to Project > Add New Item to create new code files, or Project > Add Existing Item to add existing code files to the project
    //   6. In the future, to open this project again, go to File > Open > Project and select the .sln file
    

    코드 이해:

    • #include 명령문은 다른 파일의 코드를 가져옵니다. 경우에 따라 다음과 같은 <iostream>꺾쇠 괄호로 둘러싸인 파일 이름이 표시될 수 있습니다. 꺾쇠 괄호는 컴파일러가 먼저 표준 시스템 디렉터리에서 헤더 파일을 찾고 iostream , 찾을 수 없는 경우 프로젝트와 관련된 디렉터리를 찾도록 지시합니다. 다른 경우에는 다음과 같은 "someHeader.h"따옴표로 묶인 파일 이름이 표시될 수 있습니다. 따옴표는 컴파일러에 표준 시스템 디렉터리 검색을 건너뛰고 대신 프로젝트와 관련된 디렉터리만 살펴보도록 지시합니다.
    • C using namespace std; ++ 표준 라이브러리의 코드가 이 파일에 사용될 것으로 예상하도록 컴파일러에 지시합니다. 이 줄이 없으면 각 키워드를 라이브러리의 범위에 맞추기 위해 앞에 std::를 붙여야 합니다. 예를 들어 해당 줄이 없으면 각 참조가 cout 로 작성 std::cout됩니다. 문을 using 추가하여 다른 네임스페이스의 코드에 보다 편리하게 액세스할 수 있습니다.
    • cout 키워드는 C++의 표준 출력에 인쇄하는 데 사용됩니다. << 연산자는 컴파일러에게 오른쪽에 있는 모든 것을 표준 출력으로 보내도록 지시합니다.
    • 키워드는 endl Enter 키와 같으며 줄을 끝내고 커서를 다음 줄로 이동합니다. \n""로 포함하여 동일한 작업을 수행하는 것이 더 나은 방법입니다. 왜냐하면 endl는 항상 버퍼를 비우고, 이는 프로그램의 성능에 악영향을 미칠 수 있기 때문입니다. 그러나 이것은 매우 작은 앱 endl 이므로 대신 사용됩니다.
    • 모든 C++ 문은 세미콜론으로 끝나야 하며 모든 C++ 애플리케이션에는 함수가 main() 포함되어야 합니다. 이 함수는 프로그램이 시작 시 실행되는 함수입니다. 사용하려면 모든 코드에 main() 액세스할 수 있어야 합니다.
  2. 파일을 저장하려면 Ctrl+S를 누르거나 메뉴 모음 아래의 도구 모음에서 플로피 디스크 아이콘을 선택합니다.

  3. 애플리케이션을 실행하려면 Ctrl+F5를 누르거나 디버그 메뉴로 이동하여 디버깅하지 않고 시작을 선택합니다. 다음과 같은 콘솔 창이 표시됩니다.

  4. 완료되면 콘솔 창을 닫습니다.

몇 가지 수학을 수행하는 코드 추가

클래스는 작업을 수행하는 개체의 청사진과 같습니다. 이 경우 수학 논리를 포함하도록 계산기 클래스를 정의합니다.

계산기 클래스 추가

  1. 프로젝트 메뉴로 이동하여 클래스 추가를 선택합니다. 클래스 이름 편집 상자에 계산기를 입력합니다. 확인을 선택합니다.

    Visual Studio 클래스 추가 대화 상자의 스크린샷

    클래스 이름 필드에는 텍스트 계산기가 포함됩니다. .h 파일 필드에는 Calculator.h가 포함됩니다. .cpp 파일 필드에는 Calculator.cpp 포함됩니다. 기본 클래스 필드가 비어 있습니다. 인라인 및 관리 옵션의 선택을 취소합니다.

    두 개의 새 파일이 프로젝트에 추가되었습니다. 변경된 모든 파일을 한 번에 저장하려면 Ctrl+Shift+S를 누릅니다. 파일>모두 저장에 대한 바로 가기 키입니다. 저장 단추 옆에 있는 두 플로피 디스크의 아이콘인 모두 저장을 위한 도구 모음 단추도 있습니다. 일반적으로 모두 저장 을 자주 수행하는 것이 좋습니다. 따라서 변경 내용을 저장하는 것을 놓치지 마세요.

    클래스 추가 마법사는 클래스와 .h 이름이 같은 파일을 만듭니다.cpp. IDE의 측면에 표시되는 솔루션 탐색기 창에서 프로젝트 파일의 전체 목록을 볼 수 있습니다. 창이 표시되지 않으면 메뉴 모음에서 보기를 통해 >를 엽니다.

    Visual Studio 솔루션 탐색기 창의 스크린샷.

    계산기 자습서 프로젝트에는 Calculator.h를 포함하는 헤더 파일 노드가 있습니다. 원본 파일 노드에는 Calculator.cpp 및 CalculatorTutorial.cpp 포함됩니다. 참조, 외부 종속성 및 리소스 파일에 대한 노드는 표시되지만 닫힙니다.

    솔루션 탐색기 창에서 파일을 두 번 클릭하여 열 수 있습니다. 두 번 클릭하여 Calculator.h 엽니다.

  2. 이제 파일이 다음과 같이 표시되도록 내용을 다음 코드로 바꿉니다 Calculator.h .

    #pragma once
    class Calculator
    {
    public:
        double Calculate(double x, char oper, double y);
    };
    

    코드 이해

    • 이 코드는 더하기, 빼기, 곱하기 및 나누기를 위한 수학 연산을 처리하는 새 함수를 Calculate선언합니다.
    • C++ 코드는 헤더 (.h) 파일 및 원본 (.cpp) 파일로 구성됩니다. 일부 다른 파일 확장자는 다양한 컴파일러에서 지원되지만, 주로 알아두어야 할 확장자는 이들입니다. 함수 및 변수는 일반적으로 선언됩니다. 즉, 이름 및 형식이 지정되고 헤더 파일에서 구현되거나 소스 파일에서 정의가 지정됩니다. 다른 파일에 정의된 코드에 접근하려면, 사용할 변수나 함수를 선언한 파일의 이름을 #include "filename.h"에 입력하여 filename.h을 사용할 수 있습니다.
    • 코드가 수행하는 작업을 기반으로 코드를 다른 파일로 구성하는 것이 좋습니다. 따라서 나중에 필요한 코드를 쉽게 찾을 수 있습니다. 이 경우 우리는 Calculator 클래스를 main() 함수를 포함하는 파일과 별도로 정의하지만, Calculator에서 main() 클래스를 참조할 계획입니다.
  3. Calculate 아래에 녹색 물결선이 나타나는 이유는 Calculate 함수가 선언되었지만정의되지 않았기 때문입니다. 마우스로 가리키 Calculate고, 스크루드라이버 아이콘에서 아래쪽 화살표를 클릭한 다음, 에서 'Calculate'의 정의 만들기를 Calculator.cpp선택합니다.

    Visual Studio 편집기 창의 드라이버 드롭다운 스크린샷 'Calculator.cpp 계산 정의 만들기' 옵션이 강조 표시됩니다.

    이 코드는 Calculator.cpp에 추가됩니다.

    'Calculate' 함수의 정의를 보여 주는 Visual Studio 편집기의 스크린샷

    함수 정의: double Calculator::Calculate( double x, char oper, double y) { return 0.0; }

    현재는 0.0만 반환합니다. 변경을 시작해봅시다.

  4. 편집기 창에서 Calculator.cpp 파일로 전환합니다. Calculator::Calculate(double x, char oper, double y) 내용을 다음으로 바꿉니다.

    double Calculator::Calculate(double x, char oper, double y)
    {
        switch(oper)
        {
            case '+':
                return x + y;
            case '-':
                return x - y;
            case '*':
                return x * y;
            case '/':
                return x / y;
            default:
                return 0.0;
        }
    }
    

    코드 이해

    • 함수 Calculate 는 숫자, 연산자 및 두 번째 숫자를 사용합니다. 그런 다음 두 숫자에 대해 요청된 작업을 수행합니다.
    • 이 문은 switch 제공된 연산자를 확인하고 해당 작업에 해당하는 사례를 실행합니다. 사용자가 앞의 default: 문에서 처리되지 않는 연산자를 입력하는 경우에 대비한 case 사례입니다. 보다 세련된 방식으로 잘못된 사용자 입력을 처리하는 것이 가장 좋지만 이 자습서의 범위를 벗어납니다.
    • 키워드는 double 소수 자릿수를 지원하는 숫자 형식을 나타냅니다. 이 유형의 숫자를 부동 소수점 숫자라고 하며 double , 정밀도가 더 큰 부동 소수점 숫자를 의미합니다. 이렇게 하면 계산기가 10진수 수학과 정수 수학을 모두 처리할 수 있습니다. 함수는 코드의 시작 부분에 있는 Calculate로 인해 항상 배정밀도 부동 소수점 수를 반환해야 하며, 이는 함수의 반환 형식을 나타냅니다. 따라서 기본 사례에서는 0.0을 반환합니다.
    • 이 파일은 .h 필요한 매개 변수와 필요한 반환 형식을 컴파일러에 미리 알려주는 함수 프로토타입을 선언합니다. 파일에는 .cpp 함수의 모든 구현 세부 정보가 있습니다.

이 시점에서 코드를 다시 빌드하고 실행하면 수행할 작업을 요청한 후 즉시 종료됩니다. 따라서 함수를 main 수정하여 여러 계산을 수행합니다.

Calculator 클래스 멤버 함수 호출

  1. main 기능을 CalculatorTutorial.cpp에서 다음과 같이 업데이트하십시오.

    // CalculatorTutorial.cpp : This file contains the 'main' function. Program execution begins and ends there.
    //
    
    #include <iostream>
    #include "Calculator.h"
    
    using namespace std;
    
    int main()
    {
        double x = 0.0;
        double y = 0.0;
        double result = 0.0;
        char oper = '+';
    
        cout << "Calculator Console Application" << endl << endl;
        cout << "Please enter the operation to perform. Format: a+b | a-b | a*b | a/b"
             << endl;
    
        Calculator c;
        while (true)
        {
            cin >> x >> oper >> y;
            result = c.Calculate(x, oper, y);
            cout << "Result " << "of " << x << oper << y << " is: " << result << endl;
        }
    
        return 0;
    }
    

    코드 이해

    • C++ 프로그램은 항상 main() 함수에서 시작되므로, 그곳에서 다른 코드를 호출해야 하므로, 해당 코드를 #include 함수에 보이게 하려면 main() 문이 필요합니다.
    • 변수 x, yoperresult 첫 번째 숫자, 두 번째 숫자, 연산자 및 최종 결과를 각각 저장하도록 선언됩니다. 여기서 수행되는 정의되지 않은 동작을 방지하기 위해 초기 값을 제공하는 것이 좋습니다.
    • 이 줄은 Calculator c; 클래스의 인스턴스로 명명된 c 개체를 선언합니다 Calculator . 클래스 자체는 계산기의 작동 방식에 대한 청사진일 뿐입니다. 개체는 수학을 수행하는 특정 계산기입니다.
    • while (true) 명령문은 루프입니다. 루프 내의 코드는 내부 조건이 () true인 한 반복해서 실행됩니다. 조건은 단순히 로 true나열되므로 항상 true이므로 루프가 영원히 실행됩니다. 프로그램을 닫려면 사용자가 콘솔 창을 수동으로 닫아야 합니다. 그렇지 않으면 프로그램은 항상 새 입력을 기다립니다.
    • 키워드는 cin 사용자의 입력을 허용합니다. 입력 스트림은 콘솔 창에 입력된 텍스트 줄을 처리하고 나열된 각 변수 안에 순서대로 배치할 수 있을 만큼 스마트합니다.
    • 식은 c.Calculate(x, oper, y); 앞에서 정의한 Calculate 함수를 호출하고 입력된 입력 값과 요청된 작업을 제공합니다. 그런 다음, 함수는 에 저장된 숫자를 반환합니다 result.
    • 마지막으로 콘솔 result 에 인쇄되고 사용자가 계산 결과를 확인합니다.

코드를 빌드하고 다시 테스트합니다.

이제 프로그램을 다시 테스트하여 모든 것이 제대로 작동하는지 확인합니다.

  1. Ctrl+F5를 눌러 앱을 다시 빌드하고 시작합니다.

  2. 5+5을 입력하고 Enter 키를 누릅니다. 결과가 10인지 확인합니다.

    프로그램 실행 결과를 보여 주는 명령 창의 스크린샷

    앱이 메시지를 출력합니다. 수행할 작업을 입력하세요. 형식: a+b | a-b | a*b | a/b. 사용자가 5+5를 입력했습니다. 앱 출력: 5+5의 결과는 10입니다.

  3. 콘솔 창을 닫아 프로그램을 중지합니다.

앱 디버그

사용자가 콘솔 창에 무엇이든 자유롭게 입력할 수 있으므로 계산기가 예기치 않은 입력을 처리하는지 확인해 보겠습니다. 프로그램을 실행하는 대신 디버그하여 단계별로 수행하는 작업을 검사해 보겠습니다.

디버거에서 앱 실행

  1. 에서 CalcuatorTutorial.cppresult = c.Calculate(x, oper, y);에 중단점을 설정합니다. 중단점을 설정하려면 편집기 창의 왼쪽 가장자리를 따라 회색 세로 막대의 선 옆을 클릭하여 빨간색 점이 나타납니다.

    Visual Studio 편집기의 스크린샷. 중단점을 나타내는 빨간색 점이 줄에 나타납니다. 결과 = c.Calculate(x, oper, y).

    이제 프로그램을 디버그하면 해당 줄에서 실행이 일시 중지됩니다. 프로그램이 간단한 경우에 작동한다는 대략적인 아이디어가 이미 있습니다. 호출 Calculate()할 때마다 실행을 일시 중지하지 않기 때문에 중단점을 조건부로 만들어 보겠습니다.

  2. 중단점을 나타내는 빨간색 점을 마우스 오른쪽 단추로 클릭하고 조건을 선택합니다. 조건에 대한 편집 상자에 .를 입력합니다 (y == 0) && (oper == '/'). 중단점 조건을 저장하려면 기 단추를 선택합니다.

    중단점 설정 스크린샷

    중단점이 줄에 있습니다. result = c dot Calculate (x, oper, y). '조건...' 조건 옵션이 선택되어 있습니다. 조건 드롭다운은 "조건식"으로 설정됩니다. 조건 드롭다운이 "True"로 설정됩니다. 조건은 y == 0 &> oper == '/'로 설정됩니다.

    이제 앱이 0으로 나누려고 하면 중단점에서 실행이 일시 중지됩니다.

  3. 프로그램을 디버그하려면 F5 키를 누르거나 녹색 화살표 아이콘이 있는 로컬 Windows 디버거 디버거 도구 모음 단추를 선택합니다. 콘솔 앱에서 "5 - 0"과 같은 항목을 입력하면 프로그램이 정상적으로 동작하고 계속 실행됩니다. 그러나 "10/0"을 입력하면 중단점에서 일시 중지됩니다. 연산자와 숫자 사이에 원하는 수의 공백을 cin 배치할 수 있습니다. 입력을 적절하게 구문 분석할 수 있을 만큼 스마트합니다.

    Visual Studio 편집기의 스크린샷. 줄의 조건부 중단점에서 프로그램 실행이 중단되었습니다. 결과 = c.Calculate(x, oper, y);.

디버거의 유용한 창

코드를 디버그할 때 일부 새 창이 나타날 수 있습니다. 이러한 창은 디버깅 환경을 지원할 수 있습니다. Autos 창을 살펴보세요. 자동 창에는 현재 줄 앞과 최대 3줄 이상에서 사용된 변수의 현재 값이 표시됩니다. 자동 창이 표시되지 않으면 주 메뉴에서Windows> 자동 디버그> 선택합니다.

Visual Studio 디버거 Autos 창의 스크린샷.

oper 값은 47 '/'이고, 결과는 5이고, x는 10이고, y는 0입니다.

해당 함수의 모든 변수를 보려면 로컬 창으로 전환 합니다 . 이 함수는 작은 함수이므로 자동 및 지역 창에 동일한 변수가 표시됩니다. 그러나 디버깅하는 동안 로컬 창에서 이러한 변수의 값을 수정하여 프로그램에 미치는 영향을 확인할 수 있습니다. 이 경우, 우리는 그들을 혼자 둡니다. 자동 창 아래쪽에서 로컬을 선택하거나 주 메뉴에서Windows>디버그>를 선택하여로컬 창을 엽니다.

디버깅하는 동안 지역 변수의 현재 값을 표시하는 Visual Studio의 로컬 창 스크린샷

oper 값은 47 '/'이고, 결과는 0이고, x는 10이고, y는 0입니다.

코드의 변수를 마우스로 가리키면 실행이 현재 일시 중지된 지점에서 현재 값을 볼 수도 있습니다. 편집기 창을 먼저 클릭하여 포커스가 있는지 확인합니다.

변수 'oper'(47 또는 '/')의 값을 보여 주는 도구 설명의 스크린샷

디버깅 계속

  1. 왼쪽의 노란색 화살표는 현재 실행 지점을 표시합니다. 현재 줄에서는 Calculate를 호출하므로 F11을 눌러 함수 안으로 한 단계씩 들어가기 합니다. 이제 함수 본문에서 코드를 실행하고 있습니다 Calculate . Step Into 명령어는 표준 라이브러리 함수를 포함하여 현재 있는 줄의 모든 함수로 들어가므로 주의해야 합니다. 표준 라이브러리를 한 단계씩 실행해도 괜찮지만 라이브러리 코드 대신 코드에 집중하는 데 더 관심이 있을 수 있습니다.

  2. 이제 실행 지점이 함수의 Calculate 시작 부분에 있으므로 F10 키를 눌러 프로그램 실행의 다음 줄로 이동합니다. F10스텝오버라고도 합니다. 스텝 오버를 사용하여 줄의 각 부분에서 발생하는 작업에 대한 세부 정보를 자세히 살펴보지 않고 줄에서 줄로 이동할 수 있습니다. 일반적으로 코드의 본문()에 도달하기 위해 했던 것처럼, 다른 위치에서 호출되는 코드를 깊이 파고들고 싶지 않다면 Step Into 대신 Calculate를 사용하는 것이 좋습니다.

  3. F10을 사용하여 각 줄을 건너뛰기로 실행해서 다른 파일의 main() 함수로 돌아간 후, cout 줄에서 멈추세요.

    프로그램은 예상되는 작업을 수행합니다. 첫 번째 숫자를 사용하고 두 번째 숫자로 나눕니다. cout 라인에서 result 변수를 마우스로 가리키거나 result 창의 를 살펴봅니다. 값은 inf인데, 올바르게 보이지 않습니다.

    계산기를 디버깅하는 스크린샷

    디버거의 현재 문은 cout << "Result is: " << 결과 << endl; 자동 변수 창에서 결과는 inf입니다.

    해결해 보겠습니다. 줄은 cout 저장된 result값을 출력하므로 F10을 사용하여 한 줄 앞으로 한 단계 더 이동하면 콘솔 창이 표시됩니다.

    0으로 나누기 작업의 결과를 표시하는 Visual Studio 디버그 콘솔의 스크린샷

    앱 출력: 수행할 작업을 입력하세요. 형식: a+b | a-b | a*b | a/b. 사용자가 5-0을 입력했습니다. 앱 출력: 결과는 5입니다. 사용자가 10/0을 입력했습니다. 앱 출력: 결과는 다음과 같습니다.

    이 결과는 0으로 나누기는 정의되지 않았기 때문에 프로그램에 요청된 작업에 대한 숫자 답변이 없기 때문입니다.

"0으로 나누기" 오류 수정

사용자가 문제를 더 쉽게 이해할 수 있도록 나누기를 0으로 더 우아하게 처리해 보겠습니다.

  1. CalculatorTutorial.cpp에서 다음을 변경합니다. 편집하며 계속하기라는 디버거 기능 덕분에 편집할 때 프로그램을 계속 실행할 수 있습니다. 다음 if 문에 cin >> x >> oper >> y; 문을 추가하여 0으로 나누기를 확인하고, 발생하는 경우 사용자에게 메시지를 출력합니다. 그렇지 않으면 결과가 인쇄됩니다.

    // CalculatorTutorial.cpp : This file contains the 'main' function. Program execution begins and ends there.
    //
    
    #include <iostream>
    #include "Calculator.h"
    
    using namespace std;
    
    int main()
    {
        double x = 0.0;
        double y = 0.0;
        double result = 0.0;
        char oper = '+';
    
        cout << "Calculator Console Application" << endl << endl;
        cout << "Please enter the operation to perform. Format: a+b | a-b | a*b | a/b" << endl;
    
        Calculator c;
        while (true)
        {
            cin >> x >> oper >> y;
            if (oper == '/' && y == 0)
            {
                cout << "Math error: Attempted to divide by zero!" << endl;
                continue;
            }
            else
            {
                result = c.Calculate(x, oper, y);
            }
            cout << "Result " << "of " << x << oper << y << " is: " << result << endl;
        }
    
        return 0;
    }
    
  2. F5 키를 한 번 누릅니다. 프로그램 실행은 사용자 입력을 요청하기 위해 일시 중지해야 할 때까지 계속됩니다. 다시 입력합니다 10 / 0 . 이제 더 유용한 메시지가 인쇄됩니다. 사용자에게 더 많은 입력이 요청되고 프로그램이 정상적으로 계속 실행됩니다.

    나누기를 0으로 처리하는 변경 내용을 구현한 후 최종 출력을 보여 주는 콘솔 창의 스크린샷.

    콘솔 창에는 두 줄이 표시됩니다: 10/0 결과는: inf, 그다음에 10/0 수학 오류: 0으로 나누려고 시도했습니다.

    비고

    디버깅 모드에서 코드를 편집하는 경우 코드가 부실해질 위험이 있습니다. 이 문제는 디버거가 여전히 이전 코드를 실행하고 있으며 아직 변경 내용으로 업데이트하지 않은 경우에 발생합니다. 디버거는 이 경우 알려주는 대화 상자를 표시합니다. F5 키를 눌러 실행 중인 코드를 새로 고쳐야 하는 경우도 있습니다. 특히 실행 지점이 해당 함수 내에 있는 동안 함수 내에서 변경을 수행하는 경우 함수에서 한 단계 더 나가서 다시 함수로 돌아가 업데이트된 코드를 가져와야 합니다. 작동하지 않고 오류 메시지가 표시되면 IDE 위쪽 메뉴 아래의 도구 모음에서 빨간색 사각형을 클릭한 다음 F5 키를 입력하거나 도구 모음의 중지 단추 옆에 있는 녹색 "재생" 화살표를 선택하여 디버깅을 다시 시작할 수 있습니다.

    편집 및 계속이 실패할 수 있는 또 다른 이유는 "디버그-옵션-일반에서 원본 파일이 원래 버전과 정확히 일치하도록 요구를 사용하도록 설정해야 합니다..."라는 메시지가 표시되는 경우입니다. 이 문제를 해결하려면, 주 메뉴에서 >>옵션> 을 선택하고, 디버깅>일반을 선택하여 >가 선택되어 있는지 확인합니다.

    실행 및 디버그 바로 가기 이해

    • F5 또는 디버그>시작 디버깅은 아직 활성화되지 않은 경우 디버깅 세션을 시작하고 중단점이 적중되거나 프로그램에 사용자 입력이 필요할 때까지 프로그램을 실행합니다. 사용자 입력이 필요하지 않고 중단점을 적중할 수 없는 경우 프로그램이 종료되고 프로그램 실행이 완료되면 콘솔 창이 자체 닫힙니다. 프로그램이 콘솔에 출력되는 경우 Ctrl+F5 를 사용하거나 F5 키를 눌러 창을 열어 두기 전에 중단점을 설정합니다.
    • Ctrl+F5 또는 디버그>디버깅하지 않고 시작를 통해 디버그 모드로 전환하지 않고 애플리케이션을 실행합니다. 이는 디버깅보다 약간 빠르며 프로그램 실행이 완료된 후에도 콘솔 창이 열린 상태로 유지됩니다.
    • F10( Step Over)라고 하는 F10을 사용하면 코드를 한 줄씩 반복하고 코드가 실행되는 방법과 각 실행 단계에서 변수 값이 무엇인지 시각화할 수 있습니다.
    • F11( Step Into)이라고 하는 F11은 실행 줄에서 호출되는 모든 함수로 단계별로 실행한다는 점을 제외하고 스텝오버와 유사하게 작동합니다. 예를 들어 실행 중인 줄이 함수를 호출하는 경우 F11 키를 누르면 포인터가 함수 본문으로 이동되므로 시작한 줄로 돌아가기 전에 실행 중인 함수의 코드를 따를 수 있습니다. 함수 호출을 통해 F10 단계를 누르고 다음 줄로 이동하면 됩니다. 함수 호출은 계속 발생하지만 프로그램이 일시 중지되지 않아 수행 중인 작업을 표시합니다.

앱 닫기

  • 계속 실행 중인 경우 콘솔 창을 닫아 계산기 앱을 중지합니다.

Git 소스 제어 추가

이제 앱을 만들었으므로 Git 리포지토리에 추가할 수 있습니다. 도와드리겠습니다. Visual Studio를 사용하면 IDE에서 직접 사용할 수 있는 Git 도구를 사용하여 이 프로세스를 쉽게 수행할 수 있습니다.

팁 (조언)

Git은 가장 널리 사용되는 최신 버전 제어 시스템이므로 전문 개발자이든 코딩하는 방법을 배우든 Git은 매우 유용할 수 있습니다. Git을 접하는 경우 https://git-scm.com/ 웹 사이트를 시작하는 것이 좋습니다. 그곳에서 치트 시트, 인기 있는 온라인 책 및 Git Basics 비디오를 찾을 수 있습니다.

코드를 Git과 연결하려면 먼저 코드가 있는 새 Git 리포지토리를 만듭니다. 방법은 다음과 같습니다.

  1. Visual Studio의 오른쪽 아래 모서리에 있는 상태 표시줄에서 소스 제어에 추가를 선택한 다음 Git을 선택합니다.

    소스 제어에 추가 단추가 강조 표시된 솔루션 탐색기 창 아래의 Git 소스 제어 단추 스크린샷

  2. Git 리포지토리 만들기 대화 상자에서 GitHub에 로그인합니다.

    새 GitHub 리포지토리를 만드는 Git 리포지토리 만들기 대화 상자 창의 스크린샷

    리포지토리 이름은 폴더 위치에 따라 자동으로 채워집니다. 기본적으로 새 리포지토리는 프라이빗이므로 액세스할 수 있는 유일한 리포지토리입니다.

    팁 (조언)

    리포지토리가 퍼블릭이든 프라이빗이든 관계없이 코드의 원격 백업을 GitHub에 안전하게 저장하는 것이 가장 좋습니다. 팀과 함께 작업하지 않더라도 원격 리포지토리를 사용하면 모든 컴퓨터에서 코드를 사용할 수 있습니다.

  3. 생성 및푸시를 선택합니다.

    리포지토리를 만든 후 상태 세부 정보가 상태 표시줄에 표시됩니다.

    분기 이름 및 미해결 변경 횟수를 보여 주는 Visual Studio 솔루션 탐색기 창 아래에 있는 리포지토리 상태 표시줄의 스크린샷

    화살표가 있는 첫 번째 아이콘은 현재 브랜치에서 보내는/받는 커밋 수를 보여 줍니다. 이 아이콘을 사용하여 들어오는 커밋을 끌어오거나 나가는 커밋을 푸시할 수 있습니다. 이러한 커밋을 먼저 보도록 선택할 수도 있습니다. 이렇게 하려면 아이콘을 선택한 다음 , 발신/수신 보기를 선택합니다.

    연필이 있는 두 번째 아이콘은 커밋되지 않은 코드 변경 횟수를 보여 줍니다. 이 아이콘을 선택하여 Git 변경 내용 창에서 해당 변경 내용을 볼 수 있습니다.

앱에서 Git을 사용하는 방법에 대한 자세한 내용은 Visual Studio 버전 제어 설명서를 참조하세요.

완성된 앱

축하합니다! 계산기 앱에 대한 코드를 완료하고 빌드 및 디버그한 다음 Visual Studio의 리포지토리에 추가했습니다.

다음 단계

Visual Studio for C++에 대해 자세히 알아보기

C++ 프로그래머의 일반적인 시작점은 명령줄에서 실행되는 "Hello, world!" 애플리케이션입니다. 이 문서에서 시작한 다음 더 어려운 계산기 앱으로 이동합니다.

필수 조건

앱 프로젝트 만들기

Visual Studio는 프로젝트를 사용하여 앱의 코드를 구성하고 솔루션을 사용하여 하나 이상의 프로젝트를 구성 합니다 . 프로젝트에는 앱을 빌드하는 데 사용되는 모든 옵션, 구성 및 규칙이 포함됩니다. 또한 모든 프로젝트의 파일과 외부 파일 간의 관계도 관리합니다. 앱을 만들려면 먼저 새 프로젝트 및 솔루션을 만듭니다.

  1. Visual Studio의 메뉴 모음에서>프로젝트 파일을> 선택합니다. 새 프로젝트 창이 열립니다.

  2. 왼쪽 사이드바에서 Visual C++ 가 선택되어 있는지 확인합니다. 가운데에서 콘솔 앱을 선택합니다.

  3. 아래쪽의 이름 텍스트 상자에서 새 프로젝트 CalculatorTutorial의 이름을 지정한 다음 확인을 선택합니다.

    새 프로젝트 대화 상자의 스크린샷

    왼쪽에는 Visual C++> 기타 언어가 선택되어 있습니다. 가운데에서 콘솔 앱 프로젝트 형식이 선택됩니다. 이름 텍스트 상자에 CalculatorTutorial이 포함됩니다.

    빈 C++ Windows 콘솔 애플리케이션 'Hello World' 앱이 만들어집니다. 콘솔 애플리케이션은 Windows 콘솔 창을 사용하여 출력을 표시하고 사용자 입력을 수락합니다. Visual Studio에서 편집기 창이 열리고 생성된 코드가 표시됩니다.

    // CalculatorTutorial.cpp : This file contains the 'main' function. Program execution begins and ends there.
    //
    
    #include <iostream>
    
    int main()
    {
        std::cout << "Hello World!\n";
    }
    
    // Run program: Ctrl + F5 or Debug > Start Without Debugging menu
    // Debug program: F5 or Debug > Start Debugging menu
    
    // Tips for Getting Started:
    //   1. Use the Solution Explorer window to add/manage files
    //   2. Use the Team Explorer window to connect to source control
    //   3. Use the Output window to see build output and other messages
    //   4. Use the Error List window to view errors
    //   5. Go to Project > Add New Item to create new code files, or Project > Add Existing Item to add existing code files to the project
    //   6. In the future, to open this project again, go to File > Open > Project and select the .sln file
    

새 앱이 빌드 및 실행되는지 확인

새 Windows 콘솔 애플리케이션에 대한 템플릿은 간단한 C++ "Hello World" 앱을 만듭니다. 이 시점에서 Visual Studio가 IDE에서 바로 만드는 앱을 빌드하고 실행하는 방법을 확인할 수 있습니다.

  1. 프로젝트를 빌드하려면 빌드 메뉴에서 솔루션 빌드를 선택합니다. 출력 창에는 빌드 프로세스의 결과가 표시됩니다.

    빌드가 성공했음을 보여 주는 Visual Studio 출력 창의 스크린샷.

  2. 코드를 실행하려면 메뉴 모음에서 디버그, 디버깅 없이 시작 (Ctrl+F5)을 선택합니다.

    출력을 보여 주는 Visual Studio 디버그 콘솔의 스크린샷: Hello World!

    콘솔 창이 열리고 앱이 그 안에서 실행됩니다.

    Visual Studio에서 콘솔 앱을 시작하면 코드를 실행하고, 그런 다음 결과를 확인할 수 있도록 Press any key to close this window . . .을 표시합니다.

    축하합니다! Visual Studio에서 첫 번째 "Hello, world!" 콘솔 앱을 만들었습니다.

  3. 키를 눌러 콘솔 창을 해제하고 Visual Studio로 돌아갑니다.

이제 변경이 있을 때마다 앱을 빌드하고 실행하여 코드가 예상대로 작동하는지 확인하는 도구가 있습니다. 나중에 디버그하지 않는 경우 디버그하는 방법을 보여 드립니다.

코드 편집

이제 이 템플릿의 코드를 계산기 앱으로 전환해 보겠습니다.

  1. 이 예제와 일치하게 파일의 CalculatorTutorial.cpp 내용을 다음 코드로 바꿉니다.

    // CalculatorTutorial.cpp : This file contains the 'main' function. Program execution begins and ends there.
    //
    
    #include <iostream>
    
    using namespace std;
    
    int main()
    {
        cout << "Calculator Console Application" << endl << endl;
        cout << "Please enter the operation to perform. Format: a+b | a-b | a*b | a/b" << endl;
        return 0;
    }
    
    // Run program: Ctrl + F5 or Debug > Start Without Debugging menu
    // Debug program: F5 or Debug > Start Debugging menu
    // Tips for Getting Started:
    //   1. Use the Solution Explorer window to add/manage files
    //   2. Use the Team Explorer window to connect to source control
    //   3. Use the Output window to see build output and other messages
    //   4. Use the Error List window to view errors
    //   5. Go to Project > Add New Item to create new code files, or Project > Add Existing Item to add existing code files to the project
    //   6. In the future, to open this project again, go to File > Open > Project and select the .sln file
    

    코드 이해:

    • #include 명령문은 다른 파일의 코드를 가져옵니다. 경우에 따라 다음과 같은 <iostream>꺾쇠 괄호로 둘러싸인 파일 이름이 표시될 수 있습니다. 꺾쇠 괄호는 컴파일러가 먼저 표준 시스템 디렉터리에서 헤더 파일을 찾고 iostream , 찾을 수 없는 경우 프로젝트와 관련된 디렉터리를 찾도록 지시합니다. 다른 경우에는 다음과 같은 "someHeader.h"따옴표로 묶인 파일 이름이 표시될 수 있습니다. 따옴표는 컴파일러에 표준 시스템 디렉터리 검색을 건너뛰고 대신 프로젝트와 관련된 디렉터리만 살펴보도록 지시합니다.
    • C using namespace std; ++ 표준 라이브러리의 코드가 이 파일에 사용될 것으로 예상하도록 컴파일러에 지시합니다. 이 줄이 없으면 각 키워드를 라이브러리의 범위에 맞추기 위해 앞에 std::를 붙여야 합니다. 예를 들어 해당 줄이 없으면 각 참조가 cout 로 작성 std::cout됩니다. 문을 using 추가하여 다른 네임스페이스의 코드에 보다 편리하게 액세스할 수 있습니다.
    • 키워드는 cout C++의 표준 출력으로 인쇄됩니다. << 연산자는 컴파일러에게 오른쪽에 있는 모든 것을 표준 출력으로 보내도록 지시합니다.
    • 키워드는 endl Enter 키와 같으며 줄을 끝내고 커서를 다음 줄로 이동합니다. 항상 버퍼를 플러시하고 프로그램의 성능을 저하시킬 수 있기 때문에 \n 문자열(포함""됨)에 포함된 문자열을 배치 endl 하여 동일한 작업을 수행하는 것이 좋습니다. 그러나 이것은 매우 작은 앱 endl 이므로 대신 사용됩니다.
    • 모든 C++ 문은 세미콜론으로 끝나야 하며 모든 C++ 애플리케이션에는 함수가 main() 포함되어야 합니다. 이 함수는 프로그램이 시작 시 실행되는 함수입니다. 사용하려면 모든 코드에 main() 액세스할 수 있어야 합니다.
  2. 파일을 저장하려면 Ctrl+S를 누르거나 메뉴 모음 아래의 도구 모음에서 플로피 디스크 아이콘을 선택합니다.

  3. 애플리케이션을 실행하려면 Ctrl+F5를 누르거나 디버그 메뉴로 이동하여 디버깅하지 않고 시작을 선택합니다. 이 프로젝트가 만료되었다는 팝업이 표시되면 이 대화 상자를 다시 표시하지 않음을 선택한 다음 예를 선택하여 애플리케이션을 빌드할 수 있습니다. 다음과 같은 콘솔 창이 표시됩니다.

    콘솔 창에서 실행되는 계산기 앱의 스크린샷

    콘솔 앱에는 계산기 콘솔 애플리케이션의 출력이 표시됩니다. 수행할 작업을 입력하세요. 형식: a+b | a-b | a*b | a/b. 이 프로세스는 코드 0으로 종료되었습니다. 디버깅이 중지될 때 콘솔을 자동으로 닫으려면, 도구 > 옵션 > 디버깅 > 디버깅 중지 시 콘솔 자동 닫기를 사용 설정하십시오. 마지막으로 키를 눌러 이 창을 닫는 메시지가 있습니다.

  4. 완료되면 콘솔 창을 닫습니다.

몇 가지 수학을 수행하는 코드 추가

클래스는 작업을 수행하는 개체의 청사진과 같습니다. 이 경우 수학 논리를 포함하도록 계산기 클래스를 정의합니다.

계산기 클래스 추가

  1. 프로젝트 메뉴로 이동하여 클래스 추가를 선택합니다. 클래스 이름 편집 상자에 계산기를 입력합니다. 확인을 선택합니다.

    Visual Studio 클래스 추가 대화 상자의 스크린샷

    클래스 이름 필드에는 텍스트 계산기가 포함됩니다. .h 파일 필드에는 Calculator.h가 포함됩니다. .cpp 파일 필드에는 Calculator.cpp 포함됩니다. 기본 클래스 필드가 비어 있습니다. 인라인 및 관리 옵션의 선택을 취소합니다.

    클래스는 작업을 수행하는 개체의 청사진과 같습니다. 이 경우 계산기와 작동 방식을 정의합니다.

    두 개의 새 파일이 프로젝트에 추가되었습니다. 변경된 모든 파일을 한 번에 저장하려면 Ctrl+Shift+S를 누릅니다. 파일>모두 저장에 대한 바로 가기 키입니다. 저장 단추 옆에 있는 두 플로피 디스크의 아이콘인 모두 저장을 위한 도구 모음 단추도 있습니다. 일반적으로 모두 저장을 자주 수행하는 것이 좋습니다. 따라서 저장할 때 파일을 놓치지 마세요.

    클래스 추가 마법사는 클래스와 .h 이름이 같은 파일을 만듭니다.cpp. IDE의 측면에 표시되는 솔루션 탐색기 창에서 프로젝트 파일의 전체 목록을 볼 수 있습니다. 솔루션 탐색기가 표시되지 않으면 메뉴 모음에서 솔루션탐색기> 선택합니다.

    Visual Studio 솔루션 탐색기 창의 스크린샷.

    계산기 자습서 프로젝트에는 Calculator.h, stdafx.h 및 targetver.h를 포함하는 헤더 파일 노드가 있습니다. 원본 파일 노드에는 Calculator.cpp, CalculatorTutorial.cpp 및 stdafx.cpp 포함됩니다. 참조, 외부 종속성 및 리소스 파일에 대한 노드는 표시되지만 닫힙니다.

    솔루션 탐색기 창에서 파일을 두 번 클릭하여 열 수 있습니다. 두 번 클릭하여 Calculator.h 엽니다.

  2. 이제 파일이 다음과 같이 표시되도록 내용을 다음 코드로 바꿉니다 Calculator.h .

    #pragma once
    class Calculator
    {
    public:
        double Calculate(double x, char oper, double y);
    };
    

    코드 이해

    • 이 코드는 더하기, 빼기, 곱하기 및 나누기를 위한 수학 연산을 처리하는 새 함수를 Calculate선언합니다.
    • C++ 코드는 헤더 (.h) 파일 및 원본 (.cpp) 파일로 구성됩니다. 일부 다른 파일 확장자는 다양한 컴파일러에서 지원되지만, 주로 알아두어야 할 확장자는 이들입니다. 함수 및 변수는 일반적으로 선언됩니다. 즉, 이름 및 형식이 지정되고 헤더 파일에서 구현되거나 소스 파일에서 정의가 지정됩니다. 다른 파일에 정의된 코드에 접근하려면, 사용할 변수나 함수를 선언한 파일의 이름을 #include "filename.h"에 입력하여 filename.h을 사용할 수 있습니다.
    • 코드가 수행하는 작업을 기반으로 코드를 다른 파일로 구성하는 것이 좋습니다. 따라서 나중에 필요한 코드를 쉽게 찾을 수 있습니다. 이 경우 우리는 Calculator 클래스를 main() 함수를 포함하는 파일과 별도로 정의하지만, Calculator에서 main() 클래스를 참조할 계획입니다.
  3. Calculate 아래에 녹색 물결선이 나타나는 이유는 Calculate 함수가 선언되었지만정의되지 않았기 때문입니다. 마우스로 Calculate를 가리킨 후, 전구에서 아래쪽 화살표를 클릭하고 'Calculate'의 정의 만들기를 Calculator.cpp에서 선택합니다. 다른 파일에서 변경된 코드를 미리 볼 수 있는 팝업이 나타납니다. 코드가 Calculator.cpp에 추가되었습니다.

    전구 모양 드롭다운을 사용하여 Calculator.cpp에서 Calculate에 대한 정의 생성을 선택하는 모습을 보여주는 비디오입니다.

    현재는 0.0만 반환합니다. 변경을 시작해봅시다. Esc 키를 눌러 팝업을 닫고 [예]를 선택하여 변경 내용을 저장합니다.

  4. 편집기 창에서 Calculator.cpp 파일로 전환합니다. 파일의 내용을 다음 코드로 바꿉니다.

    #include "Calculator.h"
    
    double Calculator::Calculate(double x, char oper, double y)
    {
        switch(oper)
        {
            case '+':
                return x + y;
            case '-':
                return x - y;
            case '*':
                return x * y;
            case '/':
                return x / y;
            default:
                return 0.0;
        }
    }
    

    코드 이해

    • 함수 Calculate 는 숫자, 연산자 및 두 번째 숫자를 사용합니다. 그런 다음 두 숫자에 대해 요청된 작업을 수행합니다.
    • 이 문은 switch 제공된 연산자를 확인하고 해당 작업에 해당하는 사례를 실행합니다. 사용자가 앞의 default: 문에서 처리되지 않는 연산자를 입력하는 경우에 대비한 case 사례입니다. 보다 세련된 방식으로 잘못된 사용자 입력을 처리하는 것이 가장 좋지만 이 자습서의 범위를 벗어납니다.
    • 키워드는 double 소수 자릿수를 지원하는 숫자 형식을 나타냅니다. 이 유형의 숫자를 부동 소수점 숫자라고 하며 double , 정밀도가 더 큰 부동 소수점 숫자를 의미합니다. 이렇게 하면 계산기가 10진수 수학과 정수 수학을 모두 처리할 수 있습니다. 함수는 코드의 시작 부분에 있는 Calculate로 인해 항상 배정밀도 부동 소수점 수를 반환해야 하며, 이는 함수의 반환 형식을 나타냅니다. 따라서 기본 사례에서는 0.0을 반환합니다.
    • 이 파일은 .h 필요한 매개 변수와 필요한 반환 형식을 컴파일러에 미리 알려주는 함수 프로토타입을 선언합니다. 파일에는 .cpp 함수의 모든 구현 세부 정보가 있습니다.

이 시점에서 코드를 다시 빌드하고 실행하면 수행할 작업을 요청한 후에도 종료됩니다. 다음으로 몇 가지 계산을 main 수행하도록 함수를 수정합니다.

계산기 클래스 멤버 함수 호출

  1. main 기능을 CalculatorTutorial.cpp에서 다음과 같이 업데이트하십시오.

    // CalculatorTutorial.cpp : This file contains the 'main' function. Program execution begins and ends there.
    //
    
    #include <iostream>
    #include "Calculator.h"
    
    using namespace std;
    
    int main()
    {
        double x = 0.0;
        double y = 0.0;
        double result = 0.0;
        char oper = '+';
    
        cout << "Calculator Console Application" << endl << endl;
        cout << "Please enter the operation to perform. Format: a+b | a-b | a*b | a/b" << endl;
    
        Calculator c;
        while (true)
        {
            cin >> x >> oper >> y;
            result = c.Calculate(x, oper, y);
            cout << "Result is: " << result << endl;
        }
    
        return 0;
    }
    

    코드 이해

    • C++ 프로그램은 항상 main() 함수에서 시작되므로, 그곳에서 다른 코드를 호출해야 하므로, 해당 코드를 #include 함수에 보이게 하려면 main() 문이 필요합니다.
    • 변수 x, yoperresult 첫 번째 숫자, 두 번째 숫자, 연산자 및 최종 결과를 각각 저장하도록 선언됩니다. 여기서 수행되는 정의되지 않은 동작을 방지하기 위해 초기 값을 제공하는 것이 좋습니다.
    • 이 줄은 Calculator c; 클래스의 인스턴스로 명명된 c 개체를 선언합니다 Calculator . 클래스 자체는 계산기의 작동 방식에 대한 청사진일 뿐입니다. 개체는 수학을 수행하는 특정 계산기입니다.
    • while (true) 명령문은 루프입니다. 루프 내의 코드는 내부 조건이 () true인 한 반복해서 실행됩니다. 조건은 단순히 로 true나열되므로 항상 true이므로 루프가 영원히 실행됩니다. 프로그램을 닫려면 사용자가 콘솔 창을 수동으로 닫아야 합니다. 그렇지 않으면 프로그램은 항상 새 입력을 기다립니다.
    • 키워드는 cin 사용자의 입력을 허용합니다. 입력 스트림은 콘솔 창에 입력된 텍스트 줄을 처리하고 나열된 각 변수 안에 순서대로 배치할 수 있을 만큼 스마트합니다.
    • 식은 c.Calculate(x, oper, y); 앞에서 정의한 Calculate 함수를 호출하고 입력된 입력 값과 요청된 작업을 제공합니다. 그런 다음, 함수는 에 저장된 숫자를 반환합니다 result.
    • 마지막으로 콘솔 result 에 인쇄되고 사용자가 계산 결과를 확인합니다.

코드를 빌드하고 다시 테스트합니다.

프로그램을 다시 테스트하여 모든 것이 제대로 작동하는지 확인합니다.

  1. Ctrl+F5를 눌러 앱을 다시 빌드하고 시작합니다.

  2. 5+5을 입력하고 Enter 키를 누릅니다. 결과가 10인지 확인합니다.

    계산기 앱을 실행하는 명령 창의 스크린샷 5 + 5의 결과는 10임을 보여줍니다.

  3. 콘솔 창을 닫아 프로그램을 중지합니다.

앱 디버그

사용자가 콘솔 창에 무엇이든 자유롭게 입력할 수 있으므로 계산기가 예기치 않은 입력을 처리하는지 확인해 보겠습니다. 프로그램을 실행하는 대신 디버깅하여 단계별로 수행하는 작업을 검사할 수 있습니다.

디버거에서 앱 실행

  1. CalcuatorTutorial.cpp에서 result = c.Calculate(x, oper, y); 줄에 중단점을 설정합니다. 중단점을 설정하려면 편집기 창의 왼쪽 가장자리를 따라 회색 세로 막대의 선 옆을 클릭하여 빨간색 점이 나타납니다.

    줄 23에서 중단점을 설정하는 사용자의 스크린샷: 결과 = c.Calculate(x, oper, y);.

    이제 프로그램을 디버그할 때 항상 해당 줄에서 실행을 일시 중지합니다. 프로그램이 간단한 경우에 작동한다는 대략적인 아이디어가 이미 있습니다. 매번 실행을 일시 중지하지 않기 때문에 중단점을 조건부로 만들어 보겠습니다.

  2. 중단점을 나타내는 빨간색 점을 마우스 오른쪽 단추로 클릭하고 조건을 선택합니다. 조건에 대한 편집 상자에 .를 입력합니다 (y == 0) && (oper == '/'). 작업을 마치면 중단점 조건을 저장하기 위해 닫기 단추를 선택합니다.

    조건부 중단점 창을 보여 주는 스크린샷.

    중단점이 줄에 있습니다. result = c dot Calculate (x, oper, y). '조건...' 조건 옵션이 선택되어 있습니다. 조건 드롭다운은 "조건식"으로 설정됩니다. 조건 드롭다운이 "True"로 설정됩니다. 조건은 y == 0 &> oper == '/'로 설정됩니다.

    0으로 나누기를 시도하면 중단점에서 실행이 일시 중지됩니다.

  3. 프로그램을 디버그하려면 F5 키를 누르거나 녹색 화살표 아이콘이 있는 로컬 Windows 디버거 도구 모음 단추를 선택합니다. 콘솔 앱에서 "5 - 0"과 같은 항목을 입력하면 프로그램이 정상적으로 동작하고 계속 실행됩니다. 그러나 "10/0"을 입력하면 중단점에서 일시 중지됩니다. 연산자와 숫자 사이에 공백을 지정할 수도 있습니다. cin 는 입력을 적절하게 구문 분석할 수 있을 만큼 스마트합니다.

    조건부 중단점에서 일시 중지된 프로그램 실행을 보여 주는 비디오입니다.

    사용자가 5-0을 입력합니다. 앱 출력: 결과는 5입니다. 그러면 사용자는 10/0을 입력하고 조건부 중단점에 대한 조건이 충족되므로 결과 = c.Calculate(x, oper, y); 줄에서 실행이 중지됩니다.

디버거의 유용한 창

코드를 디버그할 때 일부 새 창이 나타날 수 있습니다. 이러한 창은 디버깅 환경을 지원할 수 있습니다. Autos 창을 살펴보세요. 자동 창에는 현재 줄 앞과 최대 3줄 이상에서 사용된 변수의 현재 값이 표시됩니다. 자동 창이 표시되지 않으면 주 메뉴에서Windows> 자동 디버그> 선택합니다.

Visual Studio 디버거 Autos 창의 스크린샷.

oper 값은 47 '/'이고, 결과는 5이고, x는 10이고, y는 0입니다.

해당 함수의 모든 변수를 보려면 로컬 창으로 전환 합니다 . 이 함수는 작은 함수이므로 자동 및 지역 창에 동일한 변수가 표시됩니다. 그러나 디버깅하는 동안 이러한 변수의 값을 수정하여 프로그램에 미치는 영향을 확인할 수 있습니다. 이 경우, 우리는 그들을 혼자 둡니다. 자동 창 아래쪽에서 로컬을 선택하거나 주 메뉴에서Windows>디버그>를 선택하여로컬 창을 엽니다.

디버깅하는 동안 지역 변수의 현재 값을 표시하는 Visual Studio의 로컬 창 스크린샷

oper 값은 47 '/'이고, 결과는 0이고, x는 10이고, y는 0입니다.

코드 자체의 변수를 마우스로 가리키면 실행이 현재 일시 중지된 현재 값을 확인할 수도 있습니다. 편집기 창을 먼저 클릭하여 포커스가 있는지 확인합니다.

변수 y 위로 마우스를 가져가는 동안 나타나는 도구 설명을 보여 주는 비디오입니다. y의 현재 값(0)을 표시합니다.

디버깅 계속

  1. 왼쪽의 노란색 화살표는 현재 실행 지점을 표시합니다. Calculate를 호출하는 현재 줄에서, F11 키를 눌러 단계적으로 함수 안으로 이동하여Calculate 함수의 본문으로 들어가세요. Step Into 명령어는 표준 라이브러리 함수를 포함하여 현재 있는 줄의 모든 함수로 들어가므로 주의해야 합니다. 표준 라이브러리를 한 단계씩 실행해도 괜찮지만 라이브러리 코드 대신 코드에 집중하는 데 더 관심이 있을 수 있습니다.

  2. 이제 실행 지점이 함수의 Calculate 시작 부분에 있으므로 F10 키를 눌러 프로그램 실행의 다음 줄로 이동합니다. F10스텝오버라고도 합니다. 스텝 오버를 사용하여 줄의 각 부분에서 발생하는 작업에 대한 세부 정보를 자세히 살펴보지 않고 줄에서 줄로 이동할 수 있습니다. 일반적으로 다른 곳에서 호출되는 코드로 들어가고 싶지 않다면(본문에 도달하기 위해 했던 것처럼), Step Into 대신 Calculate를 사용해야 합니다.

  3. F10을 사용하여 각 줄을 건너뛰기로 실행해서 다른 파일의 main() 함수로 돌아간 후, cout 줄에서 멈추세요.

    프로그램은 예상되는 작업을 수행합니다. 첫 번째 숫자를 사용하고 두 번째 숫자로 나눕니다. cout 라인에서 result 변수를 마우스로 가리키거나 result 창의 를 살펴봅니다. 값은 inf인데, 올바르게 보이지 않습니다.

    계산기를 디버깅하는 스크린샷

    디버거의 현재 문은 cout << "Result is: " << 결과 << endl; 자동 변수 창에서 결과는 inf입니다.

    해결해 보겠습니다. 줄은 cout 저장된 result값을 출력하므로 F10을 사용하여 한 줄 앞으로 한 단계 더 이동하면 콘솔 창이 표시됩니다.

    0으로 나누기 작업의 결과를 표시하는 Visual Studio 디버그 콘솔의 스크린샷

    앱 출력: 수행할 작업을 입력하세요. 형식: a+b | a-b | a*b | a/b. 사용자가 5-0을 입력했습니다. 앱 출력: 결과는 5입니다. 사용자가 10/0을 입력했습니다. 앱 출력: 결과는 다음과 같습니다.

    이 결과는 0으로 나누기는 정의되지 않았기 때문에 프로그램에 요청된 작업에 대한 숫자 답변이 없기 때문입니다.

"0으로 나누기" 오류 수정

사용자가 문제를 더 쉽게 이해할 수 있도록 나누기를 0으로 더 우아하게 처리해 보겠습니다.

  1. CalculatorTutorial.cpp에서 다음을 변경합니다. 편집 하고 계속하기라는 디버거 기능 덕분에 편집할 때 프로그램을 실행 상태로 둘 수 있습니다. 변경 내용은 if 뒤에 cin >> x >> oper >> y; 문을 추가하여 0으로 나누어지는지를 확인하고, 그런 경우 사용자에게 메시지를 출력하는 것입니다. 그렇지 않으면 결과가 인쇄됩니다.

    // CalculatorTutorial.cpp : This file contains the 'main' function. Program execution begins and ends there.
    //
    
    #include <iostream>
    #include "Calculator.h"
    
    using namespace std;
    
    int main()
    {
        double x = 0.0;
        double y = 0.0;
        double result = 0.0;
        char oper = '+';
    
        cout << "Calculator Console Application" << endl << endl;
        cout << "Please enter the operation to perform. Format: a+b | a-b | a*b | a/b" << endl;
    
        Calculator c;
        while (true)
        {
            cin >> x >> oper >> y;
            if (oper == '/' && y == 0)
            {
                cout << "Division by 0 exception" << endl;
                continue;
            }
            else
            {
                result = c.Calculate(x, oper, y);
            }
            cout << "Result is: " << result << endl;
        }
    
        return 0;
    }
    
  2. F5 키를 한 번 누릅니다. 프로그램 실행은 사용자 입력을 요청하기 위해 일시 중지해야 할 때까지 계속됩니다. 다시 입력합니다 10 / 0 . 이제 더 유용한 메시지가 인쇄됩니다. 사용자에게 더 많은 입력이 요청되고 프로그램이 정상적으로 계속 실행됩니다.

    코드 변경 후 최종 결과를 보여 주는 디버그 콘솔의 비디오입니다. 10/0이 입력되고 프로그램에 '0으로 나누기 예외'가 표시됩니다.

    비고

    디버깅 모드에서 코드를 편집하는 경우 코드가 부실해질 위험이 있습니다. 이 문제는 디버거가 여전히 이전 코드를 실행하고 있으며 아직 변경 내용으로 업데이트하지 않은 경우에 발생합니다. 이 경우 디버거가 대화 상자를 표시하여 알려 줍니다. F5 키를 눌러 실행 중인 코드를 새로 고쳐야 하는 경우도 있습니다. 특히 실행 지점이 해당 함수 내에 있는 동안 함수 내에서 변경한 경우 함수에서 나가서 다시 함수로 돌아가서 업데이트된 코드를 가져옵니다. 어떤 이유로든 작동하지 않고 오류 메시지가 표시되면 IDE의 맨 위에 있는 메뉴 아래의 도구 모음에서 빨간색 사각형을 클릭하여 디버깅을 중지한 다음 , F5를 입력하거나 도구 모음의 중지 단추 옆에 있는 녹색 "재생" 화살표를 선택하여 디버깅을 다시 시작할 수 있습니다.

    편집 및 계속이 실패할 수 있는 또 다른 이유는 주 메뉴로 이동하여 도구>옵션>디버깅 일반을> 선택하고 원본 파일이 원본 버전과 정확히 일치하는지 확인해야 하기 때문입니다.

    실행 및 디버그 바로 가기 이해

    • F5 또는 디버그>시작 디버깅은 아직 활성화되지 않은 경우 디버깅 세션을 시작하고 중단점이 적중되거나 프로그램에 사용자 입력이 필요할 때까지 프로그램을 실행합니다. 사용자 입력이 필요하지 않고 중단점을 적중할 수 없는 경우 프로그램이 종료되고 프로그램 실행이 완료되면 콘솔 창이 자체 닫힙니다. 프로그램이 콘솔에 출력되는 경우 Ctrl+F5 를 사용하거나 F5 키를 눌러 창을 열어 두기 전에 중단점을 설정합니다.
    • Ctrl+F5 또는 디버그>디버깅하지 않고 시작를 통해 디버그 모드로 전환하지 않고 애플리케이션을 실행합니다. 이는 디버깅보다 약간 빠르며 프로그램 실행이 완료된 후에도 콘솔 창이 열린 상태로 유지됩니다.
    • F10( Step Over)라고 하는 F10을 사용하면 코드를 한 줄씩 반복하고 코드가 실행되는 방법과 각 실행 단계에서 변수 값이 무엇인지 시각화할 수 있습니다.
    • F11( Step Into)이라고 하는 F11은 실행 줄에서 호출되는 모든 함수로 단계별로 실행한다는 점을 제외하고 스텝오버와 유사하게 작동합니다. 예를 들어 실행 중인 줄이 함수를 호출하는 경우 F11 키를 누르면 포인터가 함수 본문으로 이동되므로 시작한 줄로 돌아가기 전에 실행 중인 함수의 코드를 따를 수 있습니다. 함수 호출을 통해 F10 단계를 누르고 다음 줄로 이동하면 됩니다. 함수 호출은 계속 발생하지만 프로그램이 일시 중지되지 않아 수행 중인 작업을 표시합니다.

앱 닫기

  • 계속 실행 중인 경우 콘솔 창을 닫아 계산기 앱을 중지합니다.

완성된 앱

축하합니다! 계산기 앱에 대한 코드를 완료하고 Visual Studio에서 빌드 및 디버그했습니다.

다음 단계

Visual Studio for C++에 대해 자세히 알아보기