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で質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# C#テキストボックスの文字を配列にいれてその後表示する 4 2022/07/17 04:47
- C言語・C++・C# c言語の問題です 3 2023/01/10 16:15
- UNIX・Linux 次の要件を満たすにはどのように修正したらよろしいでしょうか 1 2022/11/24 20:57
- JavaScript javascript作成してます。ラジオボタンで判定するコードを書いてます。 1 2023/07/18 11:03
- JavaScript 追加ボタンを押した際に ok ボタンを押した場合のみ入力値が追記されるようにしたいです 6 2022/05/29 09:57
- JavaScript Javascriptが機能せず原因が分からないので教えて頂きたいです 3 2023/06/04 14:50
- Visual Basic(VBA) visual basic初心者です。 visual studioで電卓を作成しています。 実行時にテ 1 2023/02/08 00:18
- C言語・C++・C# C++プログラミングコードにポリモーフィズムを取り入れ方を教えてください。 2 2023/06/09 11:17
- JavaScript フォームが空欄の時にフォームの外をクリックすると、エラーが出るコードを調べています。 1 2023/06/25 11:51
- C言語・C++・C# c言語の問題の説明、各所ごとに 5 2023/07/26 11:03
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
正しい五十音順について
-
アルゴリズムとプロトコールの違い
-
[ EXCEL VBA ] 図形を読み込む...
-
Dijkstraて
-
期間重複チェックがわかりません
-
グループを均等に分けるには?...
-
小町算(+,-のみ)のトレースです。
-
ドロネー三角形のプログラム
-
c言語で画像から文字を認識 キ...
-
JPEG圧縮で8×8に分割する理由に...
-
三次元形状曲面の導出法
-
Stuck
-
ハッシュアルゴリズム
-
詰め将棋をとくのは、アルゴリ...
-
アルゴリズム・ネストループ方...
-
ゲームプログラミングC/C++、SR...
-
データ構造とアルゴリズムの違...
-
巡回セールスマン問題
-
かけ算に関してのアルゴリズム
-
パックマンプログラム
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
正しい五十音順について
-
Stuck
-
アルゴリズムとプロトコールの違い
-
画像から文字を認識してテキス...
-
[ EXCEL VBA ] 図形を読み込む...
-
BCDについて
-
期間重複チェックがわかりません
-
gooという検索エンジンの後にGo...
-
2つのテキストファイルを比較...
-
ハッシュアルゴリズム
-
理系の高校生です。大学で情報...
-
あいまい検索(文字列一致率)
-
デジタル時計のアルゴリズム
-
経路探索について
-
グループを均等に分けるには?...
-
m個の数字をn個のグループに分...
-
乱数って・・・
-
確率論的な麻雀の勝ち方を教え...
-
多変数関数の最小値を求めるプ...
-
OpenCVのライセンスについて
おすすめ情報