Ex2. 電卓を作ろう

過去のブログのアーカイブ
この記事は前身のブログのアーカイブを引き継いだものです. 画像が正しく表示できないなど,コンテンツの表示に問題がある恐れがあります.

実際に動かしてみよう!

プログラムはキーボードのF5、もしくはメニューから「デバッグ(D)」→「デバッグ開始」からスタートすることができます。
calc8
数字をいれて、演算子をおして、数字をいれて、演算子をおして…思い通りの結果になりましたか?
これでベースの部分は完成です!
しかし、完璧な電卓としては程遠いですよね(^^;)
1つ、致命的なバグがあるのでそれだけ直そうと思います。

バグ修正(=を押した後の数字入力)

このままだと、演算子を押したあと、やはりもっと続きが計算したい!と思い演算子をクリックするとエラーが発生してしまいます。
流れとしてはこんな感じでエラーが発生します。

  1. [1][0]
  2. [+]
  3. [2][0]
  4. [=]
  5. 答が出る→30
  6. [+]←ここでエラー発生

これは、演算子のイベントで、入力された数字を””にリセットしていることがいけないのです。
double.Parseで数字に変換しましたが、そこで空の文字を数字に変換しようとしたというエラーです
なので、ここの部分を修正。

double num1 = Result;   // 現在の結果
double num2;            // 入力された文字
// 入力された文字が空欄なら、計算をスキップする
if (Input_str != "")
{
    // 入力した文字を数字に変換
    num2 = double.Parse(Input_str);
    // 四則計算
    if (Operator == "+")
        Result = num1 + num2;
    if (Operator == "-")
        Result = num1 - num2;
    if (Operator == "*")
        Result = num1 * num2;
    if (Operator == "/")
        Result = num1 / num2;
    // 演算子を押されていなかった場合、入力されている文字をそのまま結果扱いにする
    if (Operator == null)
         Result = num2;
}
// 画面に計算結果を表示する
textBox1.Text = Result.ToString();
// 今入力されている数字をリセットする
Input_str = "";
// 演算子をOperator変数に入れる
Button btn = (Button)sender;
Operator = btn.Text;
if (Operator == "=")
    Operator = "";
[入力された数字]の変数(Input_str)が空欄なら計算をスキップする。これで対策完了です。
これでまたプログラムを実行させてみてください。
直っているはずです。

ちなみに…

このコード、バグではないにしてもほかに対策すべき点がたくさんあります。
例えば、これだと0で除算することができます。ちなみに実際にしようとするとエラーが発生します。
電卓ってシンプルなようで結構奥深いものなんですねー…

まとめ

電卓づくりいかがだったでしょうか。簡単なようで意外と難しかったっていう方もいるかも。
電卓なんて押された順に計算するだけでシンプルだ!と思っていてもプログラミングしてみると案外一筋縄ではいかないところもあります。
今度は掛け算と割り算の計算の順序を考慮した電卓を作ってみようと思います。(ただレベルは一気に跳ね上がります…)