チュートリアル: Visual Studio で単純な C# コンソール アプリを作成する (パート 1/2)
このチュートリアルでは、Visual Studio を使用して C# コンソール アプリを作成して実行し、Visual Studio 統合開発環境 (IDE) のいくつかの機能について説明します。 このチュートリアルは、2 部構成のチュートリアル シリーズのパート 1 です。
このチュートリアルでは、次のタスクを実行します。
- Visual Studio プロジェクトを作成します。
- C# コンソール アプリを作成します。
- アプリをデバッグします。
- アプリを閉じます。
- 完全なコードを確認してください。
このチュートリアル のパート 2では、このアプリを拡張してプロジェクトを追加し、デバッグのテクニックを学習し、Microsoft 以外のパッケージを参照します。
前提 条件
Visual Studio がインストールされている必要があります。
Visual Studio をお持ちでない場合は、Visual Studio のダウンロード に移動して無料でインストールしてください。
プロジェクトを作成する
開始するには、C# アプリケーション プロジェクトを作成します。 プロジェクトの種類には、必要なすべてのテンプレート ファイルが付属しています。
Visual Studio を開き、スタート ウィンドウ [新しいプロジェクト を作成する] を選択します。
[新しいプロジェクト の作成] ウィンドウで、言語ドロップダウン リストから C# 選択します。 プラットフォーム 一覧から Windows を選択し、プロジェクトの種類の一覧から コンソール を選びます。
言語、プラットフォーム、およびプロジェクトの種類のフィルターを適用した後、コンソール アプリケーション テンプレートを選択し、[次 ] を選択します。
手記
コンソール アプリケーション テンプレートが表示されない場合は、[ その他のツールと機能をインストールする] を選択します。
Visual Studio インストーラーで、.NET Core クロスプラットフォーム開発 ワークロード を選択します。
Visual Studio インストーラーで を選択し、 を変更します。 作業内容を保存するように求められる場合があります。 次に 続行 を選択して、ワークロードをインストールします。
プロジェクトの作成 プロシージャの手順 2 に戻ります。
[新しいプロジェクトを設定] ウィンドウで、[プロジェクト名] ボックスに「Calculator」と入力します。 次に、[次へ]を選択します。
[追加情報] ウィンドウで、[ターゲット フレームワークの] フィールドに .NET Core 3.1 が表示されていることを確認します。 次に、[作成] を選択します。
Visual Studio が新しいプロジェクトを開き、そこには既定の Hello World コードが含まれています。 エディターで表示するには、ソリューション エクスプローラー ウィンドウで Program.cs コード ファイルを選択します。これは通常、Visual Studio の右側にあります。
既定の Hello World コードは、WriteLine メソッドを呼び出して、コンソールウィンドウにリテラル文字列 Hello, World! を表示します。 F5 キーを押すと、デバッグ モードで既定のプログラムを実行できます。 アプリケーションがデバッガーで実行されると、コンソール ウィンドウは開いたままになります。 任意のキーを押してコンソール ウィンドウを閉じます。
Visual Studio を開き、スタート ウィンドウ [新しいプロジェクト を作成する] を選択します。
[新しいプロジェクト の作成] ウィンドウで、言語ドロップダウン リストから C# 選択します。 プラットフォームの一覧から [Windows] を選択し、プロジェクトの種類の一覧から [コンソール] を選択します。
言語、プラットフォーム、およびプロジェクトの種類のフィルターを適用した後、コンソール アプリ テンプレートを選択し、[次 ] を選択します。
手記
コンソール アプリ テンプレートが表示されない場合は、[ツールと機能の追加インストール]を選択します。
Visual Studio インストーラーで、ワークロード .NET デスクトップ開発 を選択します。
Visual Studio インストーラーで を選択して、の変更を行います。 作業内容を保存するように求められる場合があります。 [続行] を選択してワークロードをインストールします。
この の手順 2 に戻り、プロジェクト プロシージャを作成します。
[新しいプロジェクト の構成] ウィンドウで、[プロジェクト名] ボックスに「Calculator」と入力し、[次へ] を選択します。
[追加情報] ウィンドウで、[ターゲット フレームワーク] フィールドに対して .NET 8.0 を選択します。 次に、[作成] を選択します。
Visual Studio によって新しいプロジェクトが開きます。これには、既定の Hello World コードが含まれます。 エディターで表示するには、ソリューション エクスプローラー ウィンドウで Program.cs コード ファイルを選択します。これは通常、Visual Studio の右側にあります。
単一のコードステートメントは、WriteLine メソッドを呼び出して、コンソールウィンドウでリテラル文字列 Hello, World! を表示します。 F5 キーを押すと、デバッグ モードで既定のプログラムを実行できます。 アプリケーションがデバッガーで実行されると、コンソール ウィンドウは開いたままになります。 任意のキーを押してコンソール ウィンドウを閉じます。
手記
.NET 6 以降、コンソール テンプレートを使用する新しいプロジェクトでは、以前のバージョンとは異なるコードが生成されます。 詳細については、「新しい C# テンプレート 最上位レベルのステートメント生成する」を参照してください。
アプリを作成する
このセクションでは、次のタスクを実行します。
- C# の基本的な整数演算について説明します。
- 基本的な電卓アプリを作成するコードを追加します。
- アプリをデバッグしてエラーを見つけて修正します。
- より効率的になるようにコードを調整します。
整数演算を調べる
C# で基本的な整数演算から始めます。
右側のウィンドウで、Program.cs を選択して、コード エディターにファイルを表示します。
コードエディタで、既定の Hello World コードを削除してください。
具体的には、
Console.WriteLine("Hello World!");
という行を削除します。その代わりに、次のコードを入力します。
int a = 42; int b = 119; int c = a + b; Console.WriteLine(c); Console.ReadKey();
コードを入力すると、Visual Studio の IntelliSense 機能によって、エントリをオートコンプリートするオプションが提供されます。
プログラムをビルドして実行するには、Calculator の横にある緑色 [スタート] ボタンを選択するか、F5 キー押します。
コンソール ウィンドウが開き、合計 42 + 119 が表示されます。合計は 161 。
(省略可能) 演算子を変更して結果を変更できます。 たとえば、
int c = a + b;
コード行の+
演算子を、減算、乗算の*
、除算の/
に-
するように変更できます。 その後、プログラムを実行すると、結果も変更されます。コンソール ウィンドウを閉じます。
ソリューション エクスプローラーの右側のウィンドウで、Program.cs を選択してコード エディターにファイルを表示します。
コード エディターで、Hello World の既定 コード (
Console.WriteLine("Hello World!");
) を置き換えます。行を次のコードに置き換えます。
int a = 42; int b = 119; int c = a + b; Console.WriteLine(c); Console.ReadKey();
コードを入力すると、Visual Studio IntelliSense 機能によって、エントリをオートコンプリートするオプションが提供されます。
アプリをビルドして実行するには、F5 押すか、上部のツール バーにある電卓 名前の横にある緑色の矢印を選択します。
コンソール ウィンドウが開き、合計 42 + 119 が表示されます。合計は 161 。
コンソール ウィンドウを閉じます。
(省略可能) 演算子を変更して結果を変更できます。 たとえば、
int c = a + b;
コード行の+
演算子を、減算、乗算の*
、除算の/
に-
するように変更できます。 アプリを実行すると、それに応じて結果が変わります。
電卓を作成するコードを追加する
さらに複雑な電卓コードのセットをプロジェクトに追加して続行します。
コード エディターで、Program.cs 内のすべてのコードを次の新しいコードに置き換えます。
using System; namespace Calculator { class Program { static void Main(string[] args) { // Declare variables and then initialize to zero. int num1 = 0; int num2 = 0; // Display title as the C# console calculator app. Console.WriteLine("Console Calculator in C#\r"); Console.WriteLine("------------------------\n"); // Ask the user to type the first number. Console.WriteLine("Type a number, and then press Enter"); num1 = Convert.ToInt32(Console.ReadLine()); // Ask the user to type the second number. Console.WriteLine("Type another number, and then press Enter"); num2 = Convert.ToInt32(Console.ReadLine()); // Ask the user to choose an option. Console.WriteLine("Choose an option from the following list:"); Console.WriteLine("\ta - Add"); Console.WriteLine("\ts - Subtract"); Console.WriteLine("\tm - Multiply"); Console.WriteLine("\td - Divide"); Console.Write("Your option? "); // Use a switch statement to do the math. switch (Console.ReadLine()) { case "a": Console.WriteLine($"Your result: {num1} + {num2} = " + (num1 + num2)); break; case "s": Console.WriteLine($"Your result: {num1} - {num2} = " + (num1 - num2)); break; case "m": Console.WriteLine($"Your result: {num1} * {num2} = " + (num1 * num2)); break; case "d": Console.WriteLine($"Your result: {num1} / {num2} = " + (num1 / num2)); break; } // Wait for the user to respond before closing. Console.Write("Press any key to close the Calculator console app..."); Console.ReadKey(); } } }
電卓 ボタンを選択するか、F5 押してアプリを実行します。
コンソール ウィンドウが開きます。
コンソール ウィンドウで、プロンプトに従って、数値 42 と 119 を合計します。
アプリは次のスクリーンショットのようになります。
コード エディターで、Program.cs 内のすべてのコードを次の新しいコードに置き換えます。
// Declare variables and then initialize to zero. int num1 = 0; int num2 = 0; // Display title as the C# console calculator app. Console.WriteLine("Console Calculator in C#\r"); Console.WriteLine("------------------------\n"); // Ask the user to type the first number. Console.WriteLine("Type a number, and then press Enter"); num1 = Convert.ToInt32(Console.ReadLine()); // Ask the user to type the second number. Console.WriteLine("Type another number, and then press Enter"); num2 = Convert.ToInt32(Console.ReadLine()); // Ask the user to choose an option. Console.WriteLine("Choose an option from the following list:"); Console.WriteLine("\ta - Add"); Console.WriteLine("\ts - Subtract"); Console.WriteLine("\tm - Multiply"); Console.WriteLine("\td - Divide"); Console.Write("Your option? "); // Use a switch statement to do the math. switch (Console.ReadLine()) { case "a": Console.WriteLine($"Your result: {num1} + {num2} = " + (num1 + num2)); break; case "s": Console.WriteLine($"Your result: {num1} - {num2} = " + (num1 - num2)); break; case "m": Console.WriteLine($"Your result: {num1} * {num2} = " + (num1 * num2)); break; case "d": Console.WriteLine($"Your result: {num1} / {num2} = " + (num1 / num2)); break; } // Wait for the user to respond before closing. Console.Write("Press any key to close the Calculator console app..."); Console.ReadKey();
電卓 ボタンを選択するか、F5 押してアプリを実行します。
コンソール ウィンドウが開きます。
コンソール ウィンドウで、プロンプトに従って、番号 42 と 119 をすべて一緒に追加します。
アプリは次のスクリーンショットのようになります。
10 進機能を追加する
次に、コードを調整して、さらに機能を追加します。
現在の電卓アプリでは、整数のみを受け入れて返します。 たとえば、アプリを実行し、数値 42 を数値 119 で除算すると、結果は 0 になり、正確ではありません。
小数点を処理して精度を向上させるコードを修正するには:
Visual Studio エディターの Program.cs から Ctrl+H キーを押し、[検索と置換] コントロールを開きます。
コントロールに「int」と入力し、[置換] フィールドに「float」と入力します。
コントロールの [大文字と小文字を区別] と [単語単位] のアイコンを選択するか、Alt+C キーと Alt+W キーを押します。
[すべて置換] アイコンを選択するか、Alt+A キーを押して検索と置換を実行します。
電卓アプリをもう一度実行し、42 数を 119 数で除算します。
これで、アプリは 0 ではなく 10 進数を返すようになりました。
これで、アプリで 10 進数の結果を生成できるようになりました。 アプリが小数を計算できるように、コードにさらにいくつかの調整を加えます。
Find and Replace コントロールを使用して、
float
変数の各インスタンスをdouble
に変更し、Convert.ToInt32
メソッドの各インスタンスをConvert.ToDouble
に変更します。電卓アプリを実行し、42.5 数を 119.75 数で除算します。
これで、アプリは 10 進値を受け取り、結果として長い 10 進数を返します。
コードの変更 セクションで、結果の小数点以下の桁数を減らします。
アプリをデバッグする
基本的な電卓アプリは改善されましたが、ユーザー入力エラーなどの例外はまだアプリで処理されていません。 たとえば、ユーザーが 0 で除算しようとしたり、予期しない文字を入力しようとしたりすると、アプリの動作が停止したり、エラーが返されたり、予期しない数値以外の結果が返されたりする可能性があります。
いくつかの一般的なユーザー入力エラーを確認し、デバッガーに表示される場合はそれらを見つけて、コードで修正してみましょう。
ヒント
デバッガーとその動作の詳細については、「最初に Visual Studio デバッガーのを確認する」を参照してください。
"ゼロ除算" エラーを修正する
数値を 0 で除算しようとすると、コンソール アプリがフリーズし、コード エディターで問題が表示される可能性があります。
手記
アプリがフリーズせず、デバッガーに 0 除算エラーが表示されない場合があります。 代わりに、無限大記号など、予期しない数値以外の結果がアプリから返される場合があります。 次のコード修正プログラムは引き続き適用されます。
このエラーを処理するようにコードを変更しましょう。 Program.csで、case "d":
のコードを次のコードに置き換えます。
// Ask the user to enter a non-zero divisor until they do so.
while (num2 == 0)
{
Console.WriteLine("Enter a non-zero divisor: ");
num2 = Convert.ToDouble(Console.ReadLine());
}
Console.WriteLine($"Your result: {num1} / {num2} = " + (num1 / num2));
break;
コードを置き換えた後、セクションと switch
ステートメントは次のスクリーンショットのようになります。
これで、数値を 0 で除算すると、アプリは別の数値を要求し、0 以外の数値を指定するまで要求し続けます。
形式 エラーを修正する
アプリで数字が必要なときに英字を入力すると、アプリはフリーズします。 Visual Studio には、コード エディターの問題が表示されます。
この例外を回避するには、前に入力したコードをリファクタリングします。
コードを修正する
program
クラスに依存してすべてのコードを処理するのではなく、アプリを 2 つのクラス (Calculator
と Program
) に分割できます。
Calculator
クラスは計算作業の大部分を処理し、Program
クラスはユーザー インターフェイスとエラー処理作業を処理します。
始めましょう。
Program.csで、すべてを削除し、次の新しい
Calculator
クラスを追加します。class Calculator { public static double DoOperation(double num1, double num2, string op) { double result = double.NaN; // Default value is "not-a-number" if an operation, such as division, could result in an error. // Use a switch statement to do the math. switch (op) { case "a": result = num1 + num2; break; case "s": result = num1 - num2; break; case "m": result = num1 * num2; break; case "d": // Ask the user to enter a non-zero divisor. if (num2 != 0) { result = num1 / num2; } break; // Return text for an incorrect option entry. default: break; } return result; } }
次のように、新しい
Program
クラスも追加します。class Program { static void Main(string[] args) { bool endApp = false; // Display title as the C# console calculator app. Console.WriteLine("Console Calculator in C#\r"); Console.WriteLine("------------------------\n"); while (!endApp) { // Declare variables and set to empty. string numInput1 = ""; string numInput2 = ""; double result = 0; // Ask the user to type the first number. Console.Write("Type a number, and then press Enter: "); numInput1 = Console.ReadLine(); double cleanNum1 = 0; while (!double.TryParse(numInput1, out cleanNum1)) { Console.Write("This is not valid input. Please enter a numeric value: "); numInput1 = Console.ReadLine(); } // Ask the user to type the second number. Console.Write("Type another number, and then press Enter: "); numInput2 = Console.ReadLine(); double cleanNum2 = 0; while (!double.TryParse(numInput2, out cleanNum2)) { Console.Write("This is not valid input. Please enter a numeric value: "); numInput2 = Console.ReadLine(); } // Ask the user to choose an operator. Console.WriteLine("Choose an operator from the following list:"); Console.WriteLine("\ta - Add"); Console.WriteLine("\ts - Subtract"); Console.WriteLine("\tm - Multiply"); Console.WriteLine("\td - Divide"); Console.Write("Your option? "); string op = Console.ReadLine(); try { result = Calculator.DoOperation(cleanNum1, cleanNum2, op); if (double.IsNaN(result)) { Console.WriteLine("This operation will result in a mathematical error.\n"); } else Console.WriteLine("Your result: {0:0.##}\n", result); } catch (Exception e) { Console.WriteLine("Oh no! An exception occurred trying to do the math.\n - Details: " + e.Message); } Console.WriteLine("------------------------\n"); // Wait for the user to respond before closing. Console.Write("Press 'n' and Enter to close the app, or press any other key and Enter to continue: "); if (Console.ReadLine() == "n") endApp = true; Console.WriteLine("\n"); // Friendly linespacing. } return; } }
電卓 ボタンを選択するか、F5 押してアプリを実行します。
画面の指示に従い、数 42 を数 119で割ります。 結果は次のスクリーンショットのようになります。
コンソール アプリを閉じるまで、さらに多くの計算を実行できるようになりました。 結果の小数点以下の桁数も少なくなります。 正しくない文字を入力すると、適切なエラー応答が返されます。
コードを修正する
program
クラスに依存してすべてのコードを処理するのではなく、アプリを 2 つのクラス (Calculator
と Program
) に分割できます。
Calculator
クラスは計算作業の大部分を処理し、Program
クラスはユーザー インターフェイスとエラー処理作業を処理します。
始めましょう。
Program.csで、すべてを削除し、次の新しい
Calculator
クラスを追加します。class Calculator { public static double DoOperation(double num1, double num2, string op) { double result = double.NaN; // Default value is "not-a-number" if an operation, such as division, could result in an error. // Use a switch statement to do the math. switch (op) { case "a": result = num1 + num2; break; case "s": result = num1 - num2; break; case "m": result = num1 * num2; break; case "d": // Ask the user to enter a non-zero divisor. if (num2 != 0) { result = num1 / num2; } break; // Return text for an incorrect option entry. default: break; } return result; } }
次のように、新しい
Program
クラスも追加します。class Program { static void Main(string[] args) { bool endApp = false; // Display title as the C# console calculator app. Console.WriteLine("Console Calculator in C#\r"); Console.WriteLine("------------------------\n"); while (!endApp) { // Declare variables and set to empty. // Use Nullable types (with ?) to match type of System.Console.ReadLine string? numInput1 = ""; string? numInput2 = ""; double result = 0; // Ask the user to type the first number. Console.Write("Type a number, and then press Enter: "); numInput1 = Console.ReadLine(); double cleanNum1 = 0; while (!double.TryParse(numInput1, out cleanNum1)) { Console.Write("This is not valid input. Please enter a numeric value: "); numInput1 = Console.ReadLine(); } // Ask the user to type the second number. Console.Write("Type another number, and then press Enter: "); numInput2 = Console.ReadLine(); double cleanNum2 = 0; while (!double.TryParse(numInput2, out cleanNum2)) { Console.Write("This is not valid input. Please enter a numeric value: "); numInput2 = Console.ReadLine(); } // Ask the user to choose an operator. Console.WriteLine("Choose an operator from the following list:"); Console.WriteLine("\ta - Add"); Console.WriteLine("\ts - Subtract"); Console.WriteLine("\tm - Multiply"); Console.WriteLine("\td - Divide"); Console.Write("Your option? "); string? op = Console.ReadLine(); // Validate input is not null, and matches the pattern if (op == null || ! Regex.IsMatch(op, "[a|s|m|d]")) { Console.WriteLine("Error: Unrecognized input."); } else { try { result = Calculator.DoOperation(cleanNum1, cleanNum2, op); if (double.IsNaN(result)) { Console.WriteLine("This operation will result in a mathematical error.\n"); } else Console.WriteLine("Your result: {0:0.##}\n", result); } catch (Exception e) { Console.WriteLine("Oh no! An exception occurred trying to do the math.\n - Details: " + e.Message); } } Console.WriteLine("------------------------\n"); // Wait for the user to respond before closing. Console.Write("Press 'n' and Enter to close the app, or press any other key and Enter to continue: "); if (Console.ReadLine() == "n") endApp = true; Console.WriteLine("\n"); // Friendly linespacing. } return; } }
手記
System.Console.ReadLine
は null 許容参照型を返すので、入力文字列には null 許容型 (?
記号付き) を使用することをお勧めします。電卓 ボタンを選択するか、F5 押してアプリを実行します。
画面の指示に従い、42 の数を 119の数で除算します。 結果は次のスクリーンショットのようになります。
コンソール アプリを閉じるまで、さらに多くの計算を実行できるようになりました。 結果の小数点以下の桁数も少なくなります。 正しくない文字を入力すると、適切なエラー応答が返されます。
アプリを閉じる
まだ実行していない場合は、電卓アプリを閉じます。
Visual Studio の [出力] ウィンドウを閉じます。
Visual Studio で、Ctrl キー 押+S キーを押してアプリを保存します。
Git ソース管理を追加する
これでアプリケーションが作成されたので、Git リポジトリに追加できます。 Visual Studio を使用すると、IDE から直接使用できる Git ツールを使用して、そのプロセスを簡単に行うことができます。
ヒント
Git は、最も広く使用されている最新バージョン管理システムです。 プロの開発者でも、コーディング方法を学んでいる場合でも、Git は非常に役立ちます。 Git を初めて使用する場合は、https://git-scm.com/
Web サイトを開始することをお勧めします。 チート シート、人気のあるオンラインブック、Git の基本ビデオを見つけることができます。
コードを Git に関連付けるには、まず、コードが配置されている新しい Git リポジトリを作成します。
Visual Studio の右下にあるステータス バーで、[ソース管理に追加] 選択し、Git 選択します。
[Git リポジトリの作成] ダイアログ ボックスで、GitHub にサインインします。
リポジトリ名は、フォルダーの場所に基づいて自動入力されます。 新しいリポジトリは既定でプライベートです。つまり、アクセスできるのは自分だけです。
ヒント
リポジトリがパブリックかプライベートかに関係なく、コードのリモート バックアップを GitHub に安全に保存することをお勧めします。 チームで作業していない場合でも、リモート リポジトリを使用すると、任意のコンピューターからコードを使用できるようになります。
[作成してプッシュ] を選択します。 リポジトリを作成すると、ステータス バーに状態の詳細が表示されます。
Visual Studio で Git アクションを使用する
Visual Studio ステータス バーで使用できる Git アクションの概要を次に示します。
上/下 矢印は、現在のブランチ内の送信/受信コミットの数を示します。 このアイコンを使用して、受信コミットをプルしたり、送信コミットをプッシュしたりすることができます。
特定のコミットを表示するには、上/下 矢印を選択し、[送信/受信 表示] を選択します。
鉛筆は、コードに対するコミットされていない変更の数を示します。 このアイコンを選択すると、Git の [変更] ウィンドウでそれらの変更を表示できます。
Git メニューには、ファイルに対するリポジトリ アクション用のツールが用意されています。 Visual Studio でバージョン管理に git fetch、pull、push、sync を使用することができます。
アプリで Git を使用する方法の詳細については、「Visual Studioの Git について」を参照してください。
レビュー: コードの完了
このチュートリアルでは、電卓アプリに多くの変更を加えます。 アプリはコンピューティング リソースをより効率的に処理し、ほとんどのユーザー入力エラーを処理するようになりました。
コード全体をまとめて一か所に示します。
class Calculator
{
public static double DoOperation(double num1, double num2, string op)
{
double result = double.NaN; // Default value is "not-a-number" which we use if an operation, such as division, could result in an error.
// Use a switch statement to do the math.
switch (op)
{
case "a":
result = num1 + num2;
break;
case "s":
result = num1 - num2;
break;
case "m":
result = num1 * num2;
break;
case "d":
// Ask the user to enter a non-zero divisor.
if (num2 != 0)
{
result = num1 / num2;
}
break;
// Return text for an incorrect option entry.
default:
break;
}
return result;
}
}
class Program
{
static void Main(string[] args)
{
bool endApp = false;
// Display title as the C# console calculator app.
Console.WriteLine("Console Calculator in C#\r");
Console.WriteLine("------------------------\n");
while (!endApp)
{
// Declare variables and set to empty.
string numInput1 = "";
string numInput2 = "";
double result = 0;
// Ask the user to type the first number.
Console.Write("Type a number, and then press Enter: ");
numInput1 = Console.ReadLine();
double cleanNum1 = 0;
while (!double.TryParse(numInput1, out cleanNum1))
{
Console.Write("This is not valid input. Please enter a numeric value: ");
numInput1 = Console.ReadLine();
}
// Ask the user to type the second number.
Console.Write("Type another number, and then press Enter: ");
numInput2 = Console.ReadLine();
double cleanNum2 = 0;
while (!double.TryParse(numInput2, out cleanNum2))
{
Console.Write("This is not valid input. Please enter a numeric value: ");
numInput2 = Console.ReadLine();
}
// Ask the user to choose an operator.
Console.WriteLine("Choose an operator from the following list:");
Console.WriteLine("\ta - Add");
Console.WriteLine("\ts - Subtract");
Console.WriteLine("\tm - Multiply");
Console.WriteLine("\td - Divide");
Console.Write("Your option? ");
string op = Console.ReadLine();
try
{
result = Calculator.DoOperation(cleanNum1, cleanNum2, op);
if (double.IsNaN(result))
{
Console.WriteLine("This operation will result in a mathematical error.\n");
}
else Console.WriteLine("Your result: {0:0.##}\n", result);
}
catch (Exception e)
{
Console.WriteLine("Oh no! An exception occurred trying to do the math.\n - Details: " + e.Message);
}
Console.WriteLine("------------------------\n");
// Wait for the user to respond before closing.
Console.Write("Press 'n' and Enter to close the app, or press any other key and Enter to continue: ");
if (Console.ReadLine() == "n") endApp = true;
Console.WriteLine("\n"); // Friendly linespacing.
}
return;
}
}
class Calculator
{
public static double DoOperation(double num1, double num2, string op)
{
double result = double.NaN; // Default value is "not-a-number" which we use if an operation, such as division, could result in an error.
// Use a switch statement to do the math.
switch (op)
{
case "a":
result = num1 + num2;
break;
case "s":
result = num1 - num2;
break;
case "m":
result = num1 * num2;
break;
case "d":
// Ask the user to enter a non-zero divisor.
if (num2 != 0)
{
result = num1 / num2;
}
break;
// Return text for an incorrect option entry.
default:
break;
}
return result;
}
}
class Program
{
static void Main(string[] args)
{
bool endApp = false;
// Display title as the C# console calculator app.
Console.WriteLine("Console Calculator in C#\r");
Console.WriteLine("------------------------\n");
while (!endApp)
{
// Declare variables and set to empty.
// Use Nullable types (with ?) to match type of System.Console.ReadLine
string? numInput1 = "";
string? numInput2 = "";
double result = 0;
// Ask the user to type the first number.
Console.Write("Type a number, and then press Enter: ");
numInput1 = Console.ReadLine();
double cleanNum1 = 0;
while (!double.TryParse(numInput1, out cleanNum1))
{
Console.Write("This is not valid input. Please enter a numeric value: ");
numInput1 = Console.ReadLine();
}
// Ask the user to type the second number.
Console.Write("Type another number, and then press Enter: ");
numInput2 = Console.ReadLine();
double cleanNum2 = 0;
while (!double.TryParse(numInput2, out cleanNum2))
{
Console.Write("This is not valid input. Please enter a numeric value: ");
numInput2 = Console.ReadLine();
}
// Ask the user to choose an operator.
Console.WriteLine("Choose an operator from the following list:");
Console.WriteLine("\ta - Add");
Console.WriteLine("\ts - Subtract");
Console.WriteLine("\tm - Multiply");
Console.WriteLine("\td - Divide");
Console.Write("Your option? ");
string? op = Console.ReadLine();
// Validate input is not null, and matches the pattern
if (op == null || ! Regex.IsMatch(op, "[a|s|m|d]"))
{
Console.WriteLine("Error: Unrecognized input.");
}
else
{
try
{
result = Calculator.DoOperation(cleanNum1, cleanNum2, op);
if (double.IsNaN(result))
{
Console.WriteLine("This operation will result in a mathematical error.\n");
}
else Console.WriteLine("Your result: {0:0.##}\n", result);
}
catch (Exception e)
{
Console.WriteLine("Oh no! An exception occurred trying to do the math.\n - Details: " + e.Message);
}
}
Console.WriteLine("------------------------\n");
// Wait for the user to respond before closing.
Console.Write("Press 'n' and Enter to close the app, or press any other key and Enter to continue: ");
if (Console.ReadLine() == "n") endApp = true;
Console.WriteLine("\n"); // Friendly linespacing.
}
return;
}
}
次の手順
このチュートリアルの第 2 部に進みます。