かずま さんが書きました:あっしゅ さんが書きました:ここの配列の32と123という数字はどのような意味があるのでしょうか?
32 ですが、4バイトの int は -2147483648~2147483647 の値なので負号も
含めて 11桁。文字列の終端の '\0' も入れて、12バイト確保すればいいん
ですが、2のべき乗のほうがキリがいいと思って 16にしようとしました。
しかし、int が 4バイトとは限らず、倍の 8バイトだとしたら、桁数も
倍になるとして、32 にしました。
123のほうは、本来 z と書くべきところを int だったらなんでもいいや
と、123 と書いてしまいました。
なるほどですね、参考になります。
そのデータ型ごとの数値の範囲が頭に入らないんですがなんかいい覚えた方でもありますかね?笑
かずまさんの教えを参考に簡単な四則演算ができる電卓が完成しました。ありがとうございます。
今はここ
http://www5b.biglobe.ne.jp/~suugaku/vc+ ... ai6wa.html
を参考しながら作成しているのですが、そのページの1つ前の
最後の3行は、=のボタンを押して後すべての値を0にしています。
これが、2×3=6とし、次に×5などとすると答えは0になってしまう原因です。
電卓では2→×→3→=→×5→=とおすと、30となりなります。
では皆さん、この欠点を改善して電卓と同じように動くようにするにはどうしたらよいでしょうか。
というところと、そのページ以降の小数点を含んだ表示がうまくいきません。
文字を1つ戻って消すキーと符号を反転させるキーもあるので、そこもアドバイスいただきたいです。よろしくお願いします。
以下、今作っているもののソースの一部です。
(小数点表示の部分はいじっていない状態のものです)
コード:
int yy;
int z = 0;
int w;
/* =が押された場合 */
void C電卓アプリDlg::OnBnClickedButton3()
{
// TODO: ここにコントロール通知ハンドラー コードを追加します。
CStatic* pStatic = (CStatic*)GetDlgItem(IDC_EDIT1);
{
char buf[32];
if (yy == 1) {
sprintf_s(buf, 32, "%d", w + z);
pStatic->SetWindowTextA(buf);
}
if (yy == 2) {
sprintf_s(buf, 32, "%d", w - z);
pStatic->SetWindowTextA(buf);
}
if (yy == 3) {
sprintf_s(buf, 32, "%d", w*z);
pStatic->SetWindowTextA(buf);
}
if (yy == 4) {
sprintf_s(buf, 32, "%10.2f", ((double)w / (double)z));
pStatic->SetWindowTextA(buf);
}
w = 0;
z = 0;
yy = 0;
}
}
/* +が押された場合 */
void C電卓アプリDlg::OnBnClickedButton4()
{
// TODO: ここにコントロール通知ハンドラー コードを追加します。
yy = 1;
w = z;
z = 0;
gamenn.SetWindowTextA(_T("+"));
}
/* 1が押された場合 */
void C電卓アプリDlg::OnBnClickedButton5()
{
// TODO: ここにコントロール通知ハンドラー コードを追加します。
z = 10 * z;
z = z + 1;
CStatic* pStatic = (CStatic*)GetDlgItem(IDC_EDIT1);
char buf[32];
sprintf_s(buf, 32, "%d", z);
pStatic->SetWindowTextA(buf);
}
/* ACが押された場合 */
void C電卓アプリDlg::OnBnClickedButton17()
{
// TODO: ここにコントロール通知ハンドラー コードを追加します。
{
z = 0;
CStatic* pStatic = (CStatic*)GetDlgItem(IDC_EDIT1);
char buf[32];
sprintf_s(buf, 32, "%d", z);
pStatic->SetWindowTextA(buf);
}
}