
C♯で電卓を作成しています。演算子を押すと何故か0が表示されてしまいます。
例として1+2を計算したいとして、1のボタンを押すと1と入力されテキストボックスに1と反映される。ここで+ボタンを押すとテキストボックスには0と表示され、そのまま2のボタンを押すと2とテキストボックスに表示され計算すると3と出る。計算は大丈夫なのだが、演算子を押すと0がテキストとして表示されてしまいます。先生からは、Input_strが演算子かみたあと、Input_strは空欄か?をみて、Input_strに入ってる値を既に入力されている値にくっつけるようにと言われていますが、いまいちプログラムにすることができません。
また、=が押されたら入力されていた数値がリセットされるようにしたいです。
ご教示よろしくお願いします
Input_str = "";
double Result = 0;
string Operator = null;
…………
private void process_Click(object sender, EventArgs e)
double num1 = Result; // 現在の結果
double num2; // 入力された文字
// 入力された文字が空欄なら、計算をスキップする
if (Input_str != "")
{
// 入力した文字を数字に変換
num2 = double.Parse(Input_str);
// 四則計算
if (Operator == "+")
Result = num1 + num2;
txtbox.Text = Result.ToString();
if (Operator == "-")
Result = num1 - num2;
txtbox.Text = Result.ToString();
if (Operator == "*")
Result = num1 * num2;
txtbox.Text = Result.ToString();
if (Operator == "/")
{
if (num2 == 0)
{
txtbox.Text = “ 0 で割ることはできません”;
}
else
{
Result = num1 / num2;
txtbox.Text = Result.ToString();
}
// 演算子を押されていなかった場合、入力されている文字をそのまま結果扱いにする
if (Operator == null)
Result = num2;
}
// 今入力されている数字をリセットする
Input_str = "";
// 演算子をOperator変数に入れる
Button btn = (Button)sender;
Operator = btn.Text;
if (Operator == "=")
Operator = "";
}
A 回答 (2件)
- 最新から表示
- 回答順に表示
No.2
- 回答日時:
①IF文は、{}で囲わない場合は、次の1文だけが、条件に合致した場合の処理対象です。
2行目以降は、IF文の対象外ですから、必ず実行されます。このことから、txtbox.Text = Result.ToString();は重複しているようです。
②初期に「double num1 = Result; // 現在の結果」とありますが、Resultの値の設定は予めきちんとできているのでしょうか。
Result==0ならば、num1==0となり、Result = num1 + num2はnum2の値になります。
この辺をもう少し採光したらよろしいのではないでしょうか。
No.1
- 回答日時:
あなたの問題はアルゴリズムができていないことです。
慣れないうちはいきなりコーディングしないでフローチャートを作ることを心がけることです。
それができていない人に問題点を指摘しても、アルゴリズム上の重大性ととらえることがないため、ただのコーディングミスで終わってしまい、プログラマとしての基礎的素養の醸成にならないのです。
この程度の命題でこういう問題に陥る人のレベルは我々はよく認識できます。
こんな指摘すると言い訳をする人がほとんどですが、ではフローチャートが書けるかと言うと、まともに書けなかったりするもんです。
ようするにアルゴリズムをしっかり表現できないんです。
アルゴリズムを表現できなくてどうしてまともなプログラムが作れるでしょう。
面倒くさいというかもしれませんが、ちゃんとアルゴリズムがわかっていれば、フローチャートなんて物の5分か10分でさらさらっと走り書きでるもんで、それで問題ははっきりさせられます。
少なくともプロファイルに記したような世界で長年プログラミングをしてきた私のようなプロをはそう考えますし、多くの手下にもそうさせてきました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
正しい五十音順について
-
グループを均等に分けるには?...
-
[ EXCEL VBA ] 図形を読み込む...
-
BCDについて
-
三次元形状曲面の導出法
-
電子回路のAD変換のアルゴリズ...
-
一番近い組み合わせを見つけるには
-
ファイルの開き方
-
あるプログラムのコマンドライ...
-
65536は2の何乗なのでしょうか?
-
VBAにてメール作成した際、一部...
-
VBAで仕様書は書きますか?
-
Vba UserFormを前面に出す方法...
-
寿命
-
COBOLでBLOCK CONTAINS句につい...
-
OS入ってる機器のソフト・アプ...
-
変化させるセルが変化しない
-
空elseの有無
-
C++でアボート(Abort)で処理が...
-
自動クエリとはどういうもので...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
正しい五十音順について
-
BCDについて
-
経路探索について
-
[ EXCEL VBA ] 図形を読み込む...
-
ハノイの塔のさいきアルゴリズ...
-
最大公約数を求めたい!
-
C♯で電卓を作成しています。演...
-
アルゴリズムとプロトコールの違い
-
ゲームプログラミングC/C++、SR...
-
シードを考慮したトーナメント...
-
アルゴリズムが苦手な人の、特...
-
c言語で画像から文字を認識 キ...
-
Stuck
-
Dijkstraて
-
グループを均等に分けるには?...
-
(文字列検索の手法について)...
-
多変数関数の最小値を求めるプ...
-
ハッシュアルゴリズム
-
期間重複チェックがわかりません
-
情報Iの「アルゴリズムの表現」(...
おすすめ情報