次の方法で共有


C++ でコンソール電卓を作成する

C++ プログラマの通常の出発点は、コマンド ラインで実行される "Hello, world!" アプリケーションです。 この記事では、まず第一にそれを始め、その後でより難しい課題である電卓アプリに進んでください。

[前提条件]

  • C++ ワークロードを使用した デスクトップ開発が コンピューターにインストールされ、実行されている Visual Studio。 インストールするには、 Visual Studio での C++ サポートのインストールに関するページを参照してください。
  • このチュートリアルでは、エディット コンティニュという機能を使用して、アプリの実行中にコードに変更を加える方法について説明します。 編集を有効にして続行するには、メイン メニューから [ツール>オプション>Debugging>General を選択し、[ 元のバージョンと完全に一致するソース ファイルが必要 ] がオンになっていることを確認します。

アプリ プロジェクトを作成する

Visual Studio では 、プロジェクト を使用してアプリのコードを整理し、 ソリューション を使用して 1 つ以上のプロジェクトを整理します。 プロジェクトには、アプリのビルドに使用されるすべてのオプション、構成、ルールが含まれています。 また、すべてのプロジェクトのファイルと外部ファイルの関係も管理します。 アプリを作成するには、まず、新しいプロジェクトとソリューションを作成します。

  1. Visual Studio の起動 - Visual Studio の [スタート] ダイアログ ボックスが表示されます。 [ 新しいプロジェクトの作成 ] を選択して開始します。

    Visual Studio 2022 の起動時に表示されるダイアログのスクリーンショット。

    このダイアログには、リポジトリの複製、プロジェクトまたはソリューションの開き、ローカル フォルダーの開き、新しいプロジェクトの作成を行うオプションがあります。

  2. [ 新しいプロジェクトの作成 ] ダイアログで、言語ドロップダウンを C++ に設定し、プラットフォームのドロップダウンを Windows に設定し、プロジェクトの種類の一覧から [コンソール アプリ ] を選択し、[ 次へ] を選択します。

    Visual Studio の [新しいプロジェクトの作成] ダイアログのスクリーンショット。

    言語ドロップダウンは C++ に設定され、プラットフォームドロップダウンは Windows に設定され、空のプロジェクト、コンソール アプリ、CMake プロジェクト、Windows デスクトップ ウィザードなどのプロジェクトの種類がプロジェクトの種類の一覧に表示されます。

    Von Bedeutung

    必ず、コンソール アプリ テンプレートの 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" アプリを作成します。 この時点で、IDE から直接作成したアプリを Visual Studio でビルドして実行する方法を確認できます。

  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"のような引用符で囲まれたファイル名が表示されることがあります。 引用符は、標準のシステム ディレクトリの検索をスキップし、代わりにプロジェクトに固有のディレクトリのみを検索するようにコンパイラに指示します。
    • using namespace std;は、C++ 標準ライブラリのコードがこのファイルで使用されることをコンパイラに指示します。 この行がない場合、スコープを示すには、ライブラリの各キーワードの前に std:: を付ける必要があります。 たとえば、その行がない場合、 cout への各参照は std::coutとして書き込まれます。 usingステートメントが追加され、別の名前空間のコードにアクセスしやすくなります。
    • cout キーワードは、C++ の標準出力に出力するために使用されます。 <<演算子は、コンパイラに対して、その右側にあるものを標準出力に送信するように指示します。
    • endlキーワードは Enter キーに似ています。行を終了し、カーソルを次の行に移動します。 \nは常にプログラムのパフォーマンスを損なう可能性のあるバッファーをフラッシュするため、同じことを行うために、文字列内に""を配置することをお勧めします (endlに含まれています)。 しかし、これは非常に小さなアプリであるため、代わりに endl が使用されます。
    • すべての C++ ステートメントはセミコロンで終わる必要があり、すべての C++ アプリケーションには main() 関数が含まれている必要があります。 この関数は、プログラムが起動時に実行する関数です。 使用するには、すべてのコードに main() からアクセスできる必要があります。
  2. ファイルを保存するには、 Ctrl キーを押しながら S キーを押すか、メニュー バーのツール バーにあるフロッピー ディスク アイコンを選択します。

  3. アプリケーションを実行するには、 Ctrl キーを押しながら F5 キー を押すか、[ デバッグ ] メニューに移動し、[ デバッグなしで開始] を選択します。 次のようなコンソール ウィンドウが表示されます。

  4. 完了したら、コンソール ウィンドウを閉じます。

いくつかの数学を行うコードを追加する

クラスは、何かを行うオブジェクトのブループリントのようなものです。 この場合、計算ロジックを格納する電卓クラスを定義します。

Calculator クラスを追加する

  1. [プロジェクト] メニューに移動し、[クラスの追加] を選択します。 [ クラス名 ] 編集ボックスに「 Calculator」と入力します。 [OK] を選択.

    Visual Studio の [クラスの追加] ダイアログ ボックスのスクリーンショット。

    クラス名フィールドには、テキスト計算ツールが含まれています。 .h ファイル フィールドには Calculator.h が含まれています。 .cpp ファイル フィールドには、Calculator.cppが含まれています。 基底クラスのフィールドが空です。 [インライン] と [管理] のオプションはオフになっています。

    2 つの新しいファイルがプロジェクトに追加されます。 変更したすべてのファイルを一度に保存するには、 Ctrl + Shift + S キーを押します。 これは、[ファイル] >[すべて保存] のキーボード ショートカットです。 [保存] ボタンの横にある 2 つのフロッピー ディスクのアイコンである [すべて保存] のツール バー ボタンもあります。 一般に、すべて保存 を頻繁に行うことをお勧めします。そうすることで、変更を保存し忘れることがありません。

    クラスの追加ウィザードでは、クラスと同じ名前の.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() クラスを定義しますが、Calculatormain() クラスを参照する予定です。
  3. 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 は、数値、演算子、および 2 番目の数値を受け取ります。 次に、2 つの数値に対して要求された操作を実行します。
    • switchステートメントは、指定された演算子を確認し、その操作に対応するケースを実行します。 default:ケースは、ユーザーが前述のcaseステートメントのいずれによっても処理されない演算子を入力した場合のフォールバックです。 無効なユーザー入力をより洗練された方法で処理することをお勧めしますが、このチュートリアルの範囲を超えています。
    • double キーワードは、小数点をサポートする数値の型を表します。 この種類の数値は浮動小数点数と呼ばれ、 double は余分な精度を持つ浮動小数点数を意味します。 こうすることで、計算ツールは 10 進数値演算と整数演算の両方を処理できます。 Calculate関数は、コードの先頭にdoubleがあるため、常に倍精度浮動小数点数を返す必要があります (これは関数の戻り値の型を表します)。そのため、既定のケースでは 0.0 が返されます。
    • .h ファイルは、関数プロトタイプを宣言します。このプロトタイプは、必要なパラメーターと、それに期待される戻り値の型をコンパイラに事前に通知します。 .cpp ファイルには、関数のすべての実装の詳細が含まれています。

この時点でコードをビルドして再度実行すると、実行する操作を要求した直後に終了します。 そのため、 main 関数を変更して複数の計算を行います。

Calculator クラス メンバー関数を呼び出す

  1. mainCalculatorTutorial.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()ステートメントが必要です。
    • 変数 xyoper、および result は、それぞれ最初の数値、2 番目の数値、演算子、および最終的な結果を格納するように宣言されています。 未定義の動作を回避するために、いくつかの初期値を指定することをお勧めします。これはここで行われます。
    • 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.cppで、result = c.Calculate(x, oper, y);行にブレークポイントを設定します。 ブレークポイントを設定するには、エディター ウィンドウの左端にある灰色の垂直バーの行の横をクリックして、赤い点が表示されるようにします。

    Visual Studio エディターのスクリーンショット。ブレークポイントを表す赤い点が行に表示されます。result = c.Calculate(x, oper, y)。

    プログラムをデバッグすると、その行で実行が一時停止します。 このプログラムは単純なケースに対して動作するという大まかな考え方を既に持っています。 Calculate()を呼び出すたびに実行を一時停止したくないので、ブレークポイントを条件付きにします。

  2. ブレークポイントを表す赤い点を右クリックし、[条件] を選択 します。 条件の編集ボックスに「 (y == 0) && (oper == '/')」と入力します。 [ 閉じる ] ボタンを選択して、ブレークポイントの条件を保存します。

    設定されたブレークポイントのスクリーンショット

    ブレークポイントは行にあります:result = c dot Calculate ( x, oper, y)。 'Conditions...'[条件] オプションがオンになっています。 [条件] ドロップダウンは [条件式] に設定されています。 条件ドロップダウンが "Is true" に設定されています。 条件は y == 0 & oper == '/' に設定されます。

    これで、アプリが 0 で除算しようとしたときに、ブレークポイントで実行が一時停止します。

  3. プログラムをデバッグするには、 F5 キーを押すか、緑色の矢印アイコンが表示されている [ローカル Windows デバッガー デバッガー ] ツールバー ボタンを選択します。 コンソール アプリで"5 - 0" のように入力すると、プログラムは正常に動作し、実行を続けます。 ただし、「10/0」と入力すると、ブレークポイントで一時停止します。 演算子と数値の間には任意の数のスペースを配置できます。 cin は、入力を適切に解析するのに十分なスマートです。

    Visual Studio エディターのスクリーンショット。プログラムの実行が、行の条件付きブレークポイントで停止しました: result = c.Calculate(x, oper, y);。

デバッガーの便利なウィンドウ

コードをデバッグすると、いくつかの新しいウィンドウが表示されることがあります。 これらのウィンドウは、デバッグ エクスペリエンスに役立ちます。 「オート」ウィンドウを見てみましょう。 [自動変数] ウィンドウには、現在の行の前と最大で 3 行以上使用されている変数の現在の値が表示されます。 [自動変数] ウィンドウが表示されない場合は、メイン メニューから [デバッグ>Windows>Autos] を選択します。

Visual Studio デバッガーの [自動変数] ウィンドウのスクリーンショット。

oper の値は 47 '/' で、結果は 5、x は 10、y は 0 です。

その関数のすべての変数を表示するには、[ ローカル] ウィンドウに切り替えます。 これは小さな関数であるため、[自動変数] ウィンドウと [ローカル] ウィンドウには同じ変数が表示されます。 ただし、デバッグ中に [ローカル] ウィンドウでこれらの変数の値を変更して、プログラムに与える影響を確認できます。 この場合は、そのままにします。 [ローカル] ウィンドウを開くには、[自動変数] ウィンドウの下部にある [ローカル] を選択するか、メイン メニューの [デバッグ>Windows>Locals] を選択します。

デバッグ中にローカル変数の現在の値が表示されている、Visual Studio の [ローカル] ウィンドウのスクリーンショット。

oper の値は 47 '/' で、結果は 0、x は 10、y は 0 です。

コード内の変数の上にマウス ポインターを置くと、実行が現在一時停止されている時点で現在の値を確認することもできます。 最初にクリックして、エディター ウィンドウにフォーカスがあることを確認します。

変数 'oper' の値 (47 または '/') を示すヒントのスクリーンショット。

デバッグの続行

  1. 左側の黄色の矢印は、現在の実行ポイントを示しています。 現在の行は Calculateを呼び出すので、 F11 キーを押して関数に ステップ イン します。 次に、 Calculate 関数の本体でコードを実行します。 ステップ インは、標準ライブラリ関数を含め、使用している行の関数にステップ インするため、注意してください。 標準ライブラリにステップ インしても問題ありませんが、ライブラリ コードではなくコードに焦点を当てることに関心が高い場合があります。

  2. Calculate関数の開始時に実行ポイントが表示されたので、F10 キーを押してプログラムの実行の次の行に移動します。 F10ステップ オーバーとも呼ばれます。 [ステップ オーバー] を使用すると、行の各部分で発生している内容の詳細を掘り下すことなく、行間を移動できます。 一般に、(の本文に到達するために行ったように) 他の場所から呼び出されているコードをさらに詳しく調べる場合を除き、ステップ インの代わりにCalculateを使用する必要があります。

  3. F10 キーを使用して、他のファイルの関数に戻るまで各行をmain()し、cout行で停止します。

    プログラムは期待どおりの処理を行っています。最初の数値を受け取り、2 番目の数値で除算します。 cout行で、result変数にカーソルを合わせるか、[result] ウィンドウでを確認します。 その値は infであり、正しく表示されません。

    電卓のデバッグのスクリーンショット。

    デバッガーの現在のステートメントは cout << "Result is: " << result << endl; です。自動ウィンドウでは、結果は inf です。

    修正しましょう。 cout行では、resultに格納されている値が出力されるため、F10 を使用してもう 1 行進むと、コンソール ウィンドウが表示されます。

    ゼロ除算操作の結果を表示する Visual Studio デバッグ コンソールのスクリーンショット。

    アプリの出力: 実行する操作を入力してください。 書式: a +b |a-b |a*b |a/b。 ユーザーが「5-0」を入力しました。 アプリの出力: 結果は 5 です。 ユーザーは 10/0 を入力しました。 アプリの出力: 結果: inf

    この結果は、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 キーを 1 回押します。 プログラムの実行は、ユーザー入力を要求するために一時停止する必要があるまで続行されます。 もう一度「 10 / 0 」と入力します。 これで、より役に立つメッセージが出力されます。 ユーザーはより多くの入力を求められ、プログラムは正常に実行を続けます。

    ゼロ除算を処理する変更を実装した後の最終的な出力を示すコンソール ウィンドウのスクリーンショット。

    コンソール ウィンドウに 2 つの行が表示されます。10 / 0 結果は inf で、その後に 10/ 0 数学エラー: 0 で除算しようとしました。

    デバッグ モードでコードを編集すると、コードが古くなるリスクがあります。 これは、デバッガーがまだ古いコードを実行していて、変更でまだ更新されていない場合に発生します。 デバッガーには、これがいつ発生するかを通知するダイアログが表示されます。 場合によっては、 F5 キーを押して、実行中のコードを更新する必要があります。 特に、実行ポイントがその関数内にある間に関数内で変更を加えた場合は、関数からステップ アウトしてから、もう一度関数に戻って更新されたコードを取得する必要があります。 それでも問題が解決せず、エラー メッセージが表示された場合は、IDE の上部にあるメニューの下にあるツール バーの赤い四角形をクリックしてデバッグを停止し、 F5 キーを押すか、ツール バーの停止ボタンの横にある緑色の "再生" 矢印を選択してデバッグを再開できます。

    編集と続行が失敗するもう 1 つの理由は、「Debug->Options->General の元のバージョン設定と完全に一致するようにソース ファイルを要求する」というメッセージが表示された場合です。これを解決するには、メイン メニューから [ツール>オプション>Debugging>General を選択し、[ 元のバージョンと完全に一致するソース ファイルが必要 ] がオンになっていることを確認します。

    実行とデバッグのショートカットについて

    • F5 または デバッグ>デバッグを開始します。まだアクティブでない場合はデバッグ セッションを開始し、ブレークポイントにヒットするか、プログラムにユーザー入力が必要になるまでプログラムを実行します。 ユーザー入力が不要で、ヒットできるブレークポイントがない場合、プログラムは終了し、プログラムの実行が完了するとコンソール ウィンドウが閉じます。 プログラムがコンソールに出力される場合は、 Ctrl キーを押しながら F5 キー を押すか、ブレークポイントを設定してから F5 キーを押してウィンドウを開いたままにします。
    • Ctrl キーを押しながら F5 キーを押すか、 デバッグ>デバッグなしで開始すると、デバッグ モードに移行せずにアプリケーションが実行されます。 これはデバッグよりも少し高速であり、プログラムの実行が完了した後もコンソール ウィンドウは開いたままです。
    • ステップ オーバーと呼ばれる F10 を使用すると、コードを反復処理し、1 行ずつ繰り返し、コードの実行方法と、実行の各ステップでの変数値を視覚化できます。
    • ステップ インと呼ばれる F11 は、ステップ オーバーと同様に機能しますが、実行行で呼び出される関数にステップインする点が異なります。 たとえば、実行中の行が関数を呼び出す場合、 F11 キーを押すとポインターが関数の本体に移動するため、開始した行に戻る前に、実行されている関数のコードに従うことができます。 F10キーを押すと関数呼び出しがステップ実行され、次の行に移動します。関数呼び出しは引き続き発生しますが、プログラムが何をしているのかを示すために一時停止しません。

アプリを閉じる

  • まだ実行されている場合は、コンソール ウィンドウを閉じて電卓アプリを停止します。

Git ソース管理を追加する

アプリを作成したので、Git リポジトリに追加できます。 サポートします。 Visual Studio を使用すると、IDE から直接使用できる Git ツールを使用して、そのプロセスを簡単に行うことができます。

ヒント

Git は最も広く使用されている最新のバージョン管理システムであるため、プロの開発者でも、コーディング方法を学習している場合でも、Git は非常に役立ちます。 Git を初めて使用する場合は、https://git-scm.com/ Web サイトを開始することをお勧めします。 そこでは、チート シート、人気のあるオンラインブック、Git の基本ビデオを見つけることができます。

コードを Git に関連付けるには、まず、コードが配置されている新しい Git リポジトリを作成します。 その方法は次のとおりです。

  1. Visual Studio の右下隅にあるステータス バーで、[ ソース管理に追加] を選択し、[Git] を選択 します

    [ソリューション エクスプローラー] ウィンドウの下にある [Git ソース管理] ボタンのスクリーンショット。[ソース管理に追加] ボタンが強調表示されています。

  2. [ Git リポジトリの作成 ] ダイアログ ボックスで、GitHub にサインインします。

    新しい GitHub リポジトリを作成する [Git リポジトリの作成] ダイアログ ウィンドウのスクリーンショット。

    リポジトリ名は、フォルダーの場所に基づいて自動的に設定されます。 既定では、新しいリポジトリはプライベートです。つまり、アクセスできるのは自分だけです。

    ヒント

    リポジトリがパブリックかプライベートかに関係なく、コードのリモート バックアップを GitHub に安全に保存することをお勧めします。 チームで作業していない場合でも、リモート リポジトリを使用すると、任意のコンピューターからコードを使用できるようになります。

  3. [作成してプッシュ] を選択します。

    リポジトリを作成すると、ステータス バーに状態の詳細が表示されます。

    Visual Studio ソリューション エクスプローラー ウィンドウの下にあるリポジトリのステータス バーのスクリーンショット。ブランチ名と未解決の変更の数が表示されています。

    矢印が表示された最初のアイコンは、現在のブランチにある送信/受信コミットの数を示しています。 このアイコンを使用して、受信コミットをプルしたり、送信コミットをプッシュしたりすることができます。 これらのコミットを最初に表示することもできます。 これを行うには、アイコンを選択し、[ 送信/受信の表示] を選択します。

    鉛筆が付いた 2 番目のアイコンには、コードに対するコミットされていない変更の数が表示されます。 このアイコンを選択すると、Git の [変更] ウィンドウでそれらの変更を表示できます。

アプリで Git を使用する方法の詳細については、 Visual Studio のバージョン管理に関するドキュメントを参照してください

完成したアプリ

おめでとうございます! 電卓アプリのコードを完了し、ビルドしてデバッグし、すべて Visual Studio でリポジトリに追加しました。

次のステップ

Visual Studio for C++ の詳細

C++ プログラマの通常の出発点は、コマンド ラインで実行される "Hello, world!" アプリケーションです。 この記事では、まず第一にそれを始め、その後でより難しい課題である電卓アプリに進んでください。

[前提条件]

アプリ プロジェクトを作成する

Visual Studio では 、プロジェクト を使用してアプリのコードを整理し、 ソリューション を使用して 1 つ以上のプロジェクトを整理します。 プロジェクトには、アプリのビルドに使用されるすべてのオプション、構成、ルールが含まれています。 また、すべてのプロジェクトのファイルと外部ファイルの関係も管理します。 アプリを作成するには、まず、新しいプロジェクトとソリューションを作成します。

  1. Visual Studio のメニュー バーで、 ファイル>New>Project を選択します。 [ 新しいプロジェクト] ウィンドウが開きます。

  2. 左側のサイドバーで、 Visual C++ が選択されていることを確認します。 中央の [ コンソール アプリ] を選択します。

  3. 下部にある [名前 ] ボックスに新しいプロジェクト CalculatorTutorial という名前を付け、[ OK] を選択します。

    [新しいプロジェクト] ダイアログのスクリーンショット。

    左側で、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" アプリを作成します。 この時点で、IDE から直接作成したアプリを Visual Studio でビルドして実行する方法を確認できます。

  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"のような引用符で囲まれたファイル名が表示されることがあります。 引用符は、標準のシステム ディレクトリの検索をスキップし、代わりにプロジェクトに固有のディレクトリのみを検索するようにコンパイラに指示します。
    • using namespace std;は、C++ 標準ライブラリのコードがこのファイルで使用されることをコンパイラに指示します。 この行がない場合、スコープを示すには、ライブラリの各キーワードの前に 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. 完了したら、コンソール ウィンドウを閉じます。

いくつかの数学を行うコードを追加する

クラスは、何かを行うオブジェクトのブループリントのようなものです。 この場合、計算ロジックを格納する電卓クラスを定義します。

Calculator クラスを追加する

  1. [プロジェクト] メニューに移動し、[クラスの追加] を選択します。 [ クラス名 ] 編集ボックスに「 Calculator」と入力します。 [OK] を選択.

    Visual Studio の [クラスの追加] ダイアログ ボックスのスクリーンショット。

    クラス名フィールドには、テキスト計算ツールが含まれています。 .h ファイル フィールドには Calculator.h が含まれています。 .cpp ファイル フィールドには、Calculator.cppが含まれています。 基底クラスのフィールドが空です。 [インライン] と [管理] のオプションはオフになっています。

    クラスは、何かを行うオブジェクトのブループリントのようなものです。 この場合、電卓とその動作方法を定義します。

    2 つの新しいファイルがプロジェクトに追加されます。 変更したすべてのファイルを一度に保存するには、 Ctrl + Shift + S キーを押します。 これは、[ファイル] >[すべて保存] のキーボード ショートカットです。 [保存] ボタンの横にある 2 つのフロッピー ディスクのアイコンである [すべて保存] のツール バー ボタンもあります。 一般に、[ すべて保存] を頻繁に実行することをお勧めします。そのため、保存時にファイルを見逃さないようにします。

    クラスの追加ウィザードでは、クラスと同じ名前の.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() クラスを定義しますが、Calculatormain() クラスを参照する予定です。
  3. Calculate関数はCalculateされているが、定義されていないため、の下に緑色の波線が表示されます。 Calculate上にカーソルを合わせ、電球の下矢印をクリックして、Calculator.cppで [計算] の定義を作成を選択します。 ポップアップが表示され、他のファイルで行われたコードの変更を確認できます。 コードが Calculator.cppに追加されました。

    電球ドロップダウンを使用して [Calculator.cppで計算の定義を作成する] を選択する方法を示すビデオ。

    現在、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 は、数値、演算子、および 2 番目の数値を受け取ります。 次に、2 つの数値に対して要求された操作を実行します。
    • switchステートメントは、指定された演算子を確認し、その操作に対応するケースを実行します。 default:ケースは、ユーザーが前述のcaseステートメントのいずれによっても処理されない演算子を入力した場合のフォールバックです。 無効なユーザー入力をより洗練された方法で処理することをお勧めしますが、このチュートリアルの範囲を超えています。
    • double キーワードは、小数点をサポートする数値の型を表します。 この種類の数値は浮動小数点数と呼ばれ、 double は余分な精度を持つ浮動小数点数を意味します。 こうすることで、計算ツールは 10 進数値演算と整数演算の両方を処理できます。 Calculate関数は、コードの先頭にdoubleがあるため、常に倍精度浮動小数点数を返す必要があります (これは関数の戻り値の型を表します)。そのため、既定のケースでは 0.0 が返されます。
    • .h ファイルは、関数プロトタイプを宣言します。このプロトタイプは、必要なパラメーターと、それに期待される戻り値の型をコンパイラに事前に通知します。 .cpp ファイルには、関数のすべての実装の詳細が含まれています。

この時点でコードをビルドして実行すると、実行する操作を尋ねられた後でも、やはり終了します。 次に、 main 関数を変更して、いくつかの計算を行います。

Calculator クラスメンバー関数を呼び出す

  1. mainCalculatorTutorial.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()ステートメントが必要です。
    • 変数 xyoper、および result は、それぞれ最初の数値、2 番目の数値、演算子、および最終的な結果を格納するように宣言されています。 未定義の動作を回避するために、いくつかの初期値を指定することをお勧めします。これはここで行われます。
    • 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 にブレークポイントを設定しているスクリーンショット: result = c.Calculate(x, oper, y);。

    プログラムをデバッグすると、その行で常に実行が一時停止されます。 このプログラムは単純なケースに対して動作するという大まかな考え方を既に持っています。 毎回実行を一時停止したくないので、ブレークポイントを条件付きにします。

  2. ブレークポイントを表す赤い点を右クリックし、[条件] を選択 します。 条件の編集ボックスに「 (y == 0) && (oper == '/')」と入力します。 完了したら、[ 閉じる ] ボタンを選択してブレークポイントの条件を保存します。

    条件付きブレークポイント ウィンドウを示すスクリーンショット。

    ブレークポイントは行にあります:result = c dot Calculate ( x, oper, y)。 'Conditions...'[条件] オプションがオンになっています。 [条件] ドロップダウンは [条件式] に設定されています。 条件ドロップダウンが "Is true" に設定されています。 条件は y == 0 & oper == '/' に設定されます。

    0 による除算が試行されると、ブレークポイントで実行が一時停止します。

  3. プログラムをデバッグするには、 F5 キーを押すか、緑色の矢印アイコンが表示されている [ローカル Windows デバッガー ] ツール バー ボタンを選択します。 コンソール アプリで"5 - 0" のように入力すると、プログラムは正常に動作し、実行を続けます。 ただし、「10/0」と入力すると、ブレークポイントで一時停止します。 演算子と数値の間に任意の数のスペースを置くことさえできます。 cin は、入力を適切に解析するのに十分なスマートです。

    プログラムの実行が条件付きブレークポイントで一時停止されている様子を示すビデオ。

    ユーザーは 5 から 0 を入力します。 アプリの出力: 結果は 5 です。 その後、ユーザーは 10/0 を入力し、条件付きブレークポイントの条件が満たされているため、行で実行が停止します。result = c.Calculate(x, oper, y);

デバッガーの便利なウィンドウ

コードをデバッグすると、いくつかの新しいウィンドウが表示されることがあります。 これらのウィンドウは、デバッグ エクスペリエンスに役立ちます。 「オート」ウィンドウを見てみましょう。 [自動変数] ウィンドウには、現在の行の前と最大で 3 行以上使用されている変数の現在の値が表示されます。 [自動変数] ウィンドウが表示されない場合は、メイン メニューから [デバッグ>Windows>Autos] を選択します。

Visual Studio デバッガーの [自動変数] ウィンドウのスクリーンショット。

oper の値は 47 '/' で、結果は 5、x は 10、y は 0 です。

その関数のすべての変数を表示するには、[ ローカル] ウィンドウに切り替えます。 これは小さな関数であるため、[自動変数] ウィンドウと [ローカル] ウィンドウには同じ変数が表示されます。 ただし、デバッグ中にこれらの変数の値を変更して、プログラムにどのような影響があるかを確認できます。 この場合は、そのままにします。 [ローカル] ウィンドウを開くには、[自動変数] ウィンドウの下部にある [ローカル] を選択するか、メイン メニューの [デバッグ>Windows>Locals] を選択します。

デバッグ中にローカル変数の現在の値が表示されている、Visual Studio の [ローカル] ウィンドウのスクリーンショット。

oper の値は 47 '/' で、結果は 0、x は 10、y は 0 です。

コード自体の変数の上にマウス ポインターを置くと、実行が現在一時停止されている現在の値を確認することもできます。 最初にクリックして、エディター ウィンドウにフォーカスがあることを確認します。

変数 y の上にマウス ポインターを置くと表示されるヒントを示すビデオ。y の現在の値 (0) が表示されます。

デバッグの続行

  1. 左側の黄色の矢印は、現在の実行ポイントを示しています。 現在の行は Calculateを呼び出すので、 F11 キーを押して関数 にステップ イン し、 Calculate 関数の本体に移動します。 ステップ インは、標準ライブラリ関数を含め、使用している行の関数にステップ インするため、注意してください。 標準ライブラリにステップ インしても問題ありませんが、ライブラリ コードではなくコードに焦点を当てることに関心が高い場合があります。

  2. Calculate関数の開始時に実行ポイントが表示されたので、F10 キーを押してプログラムの実行の次の行に移動します。 F10ステップ オーバーとも呼ばれます。 [ステップ オーバー] を使用すると、行の各部分で発生している内容の詳細を掘り下すことなく、行間を移動できます。 一般に、他の場所から呼び出されているコードをさらに詳しく調べる場合を除き、ステップ インの代わりにステップ オーバーを使用する必要があります (Calculateの本文に到達した場合と同様)。

  3. F10 キーを使用して、他のファイルの関数に戻るまで各行をmain()し、cout行で停止します。

    プログラムは期待どおりの処理を行っています。最初の数値を受け取り、2 番目の数値で除算します。 cout行で、result変数にカーソルを合わせるか、[result] ウィンドウでを確認します。 その値は infであり、正しく表示されません。

    電卓のデバッグのスクリーンショット。

    デバッガーの現在のステートメントは cout << "Result is: " << result << endl; です。自動ウィンドウでは、結果は inf です。

    修正しましょう。 cout行では、resultに格納されている値が出力されるため、F10 を使用してもう 1 行進むと、コンソール ウィンドウが表示されます。

    ゼロ除算操作の結果を表示する Visual Studio デバッグ コンソールのスクリーンショット。

    アプリの出力: 実行する操作を入力してください。 書式: a +b |a-b |a*b |a/b。 ユーザーが「5-0」を入力しました。 アプリの出力: 結果は 5 です。 ユーザーは 10/0 を入力しました。 アプリの出力: 結果: inf

    この結果は、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 キーを 1 回押します。 プログラムの実行は、ユーザー入力を要求するために一時停止する必要があるまで続行されます。 もう一度「 10 / 0 」と入力します。 これで、より役に立つメッセージが出力されます。 ユーザーはより多くの入力を求められ、プログラムは正常に実行を続けます。

    コード変更後の最終的な結果を示すデバッグ コンソールのビデオ。10/ 0 が入力され、プログラムに 'Division by 0 exception' と表示されます。

    デバッグ モードでコードを編集すると、コードが古くなるリスクがあります。 これは、デバッガーがまだ古いコードを実行していて、変更でまだ更新されていない場合に発生します。 デバッガーによってダイアログがポップアップ表示され、これがいつ発生するかを通知します。 場合によっては、 F5 キーを押して、実行中のコードを更新する必要があります。 特に、実行ポイントがその関数内にある間に関数内で変更を加えた場合は、関数からステップ アウトしてから、もう一度関数に戻って更新されたコードを取得します。 何らかの理由で機能せず、エラー メッセージが表示される場合は、IDE の上部にあるメニューの下にあるツール バーの赤い四角形をクリックしてデバッグを停止し、 F5 キーを押すか、ツール バーの停止ボタンの横にある緑色の "再生" 矢印を選択してデバッグを再開できます。

    編集と続行が失敗するもう 1 つの理由は、メイン メニューに移動し、 Tools>Options>Debugging>General を選択し、 元のバージョンと完全に一致するソース ファイル が必要であることを確認する必要があるということです。

    実行とデバッグのショートカットについて

    • F5 または デバッグ>デバッグを開始します。まだアクティブでない場合はデバッグ セッションを開始し、ブレークポイントにヒットするか、プログラムにユーザー入力が必要になるまでプログラムを実行します。 ユーザー入力が不要で、ヒットできるブレークポイントがない場合、プログラムは終了し、プログラムの実行が完了するとコンソール ウィンドウが閉じます。 プログラムがコンソールに出力される場合は、 Ctrl キーを押しながら F5 キー を押すか、ブレークポイントを設定してから F5 キーを押してウィンドウを開いたままにします。
    • Ctrl キーを押しながら F5 キーを押すか、 デバッグ>デバッグなしで開始すると、デバッグ モードに移行せずにアプリケーションが実行されます。 これはデバッグよりも少し高速であり、プログラムの実行が完了した後もコンソール ウィンドウは開いたままです。
    • ステップ オーバーと呼ばれる F10 を使用すると、コードを反復処理し、1 行ずつ繰り返し、コードの実行方法と、実行の各ステップでの変数値を視覚化できます。
    • ステップ インと呼ばれる F11 は、ステップ オーバーと同様に機能しますが、実行行で呼び出される関数にステップインする点が異なります。 たとえば、実行中の行が関数を呼び出す場合、 F11 キーを押すとポインターが関数の本体に移動するため、開始した行に戻る前に、実行されている関数のコードに従うことができます。 F10キーを押すと関数呼び出しがステップ実行され、次の行に移動します。関数呼び出しは引き続き発生しますが、プログラムが何をしているのかを示すために一時停止しません。

アプリを閉じる

  • まだ実行されている場合は、コンソール ウィンドウを閉じて電卓アプリを停止します。

完成したアプリ

おめでとうございます! 電卓アプリのコードを完了し、Visual Studio でビルドしてデバッグしました。

次のステップ

Visual Studio for C++ の詳細