ようこそ ゲスト さん、新規登録(無料)して気になる疑問を解決しませんか?

質問

QNo.3971043 1と表示させたいが12と表示される
質問者:mudai_yeh windows XP VC++.net 2003です。
よろしくお願いします。
症状は毎回コピーアンドペーストでプログラムを書くよりも
関数化してソースをきれいにしようと思い

BOOL ButtonNumber (int bNumber,HWND hWnd)
{
long z;
char sBuff[100];
char number[100];
wsprintf(number,"%d",bNumber);
z = GetWindowText(GetDlgItem(hWnd,IDC_EDIT1),sBuff,99);
if(z == 0){
SetWindowText(GetDlgItem(hWnd,IDC_EDIT1),number);
return TRUE;
}
if(z == 10){
//桁数が多すぎる警告メッセージ
MessageBox(NULL,"桁数が多すぎます。","警告",MB_OK);
return TRUE;
}
z = atol(sBuff);
wsprintf(sBuff,"%d1",z);
SetWindowText(GetDlgItem(hWnd,IDC_EDIT1),sBuff);
return TRUE;
}
という関数を作りました。
numberに1という数字が入っていてエディットボックスに1と表示されるはずなのですが12と表示されてしまいます。
ためしにnumberに12と入れてみると表示されるのが122
123と入力すると1232と表示されてしまいます。
SetWindowText(GetDlgItem(hWnd,IDC_EDIT1),number);
どこも間違っていないように思いますが・・なんででしょう・・

関数化せずmainに直接書き込んでいけば正常に1と表示されます・
switch (LOWORD(wParam))
{
case IDC_BUTTON1:
ButtonNumber(1,hWnd);
case IDC_BUTTON2:
a = GetWindowText(GetDlgItem(hWnd,IDC_EDIT1),sBuff,99);
if(a == 0){
SetWindowText(GetDlgItem(hWnd,IDC_EDIT1),"2");
return TRUE;
}
if(a == 10){
//桁数が多すぎる警告メッセージ
MessageBox(NULL,"桁数が多すぎます。","警告",MB_OK);
return TRUE;
}
a = atol(sBuff);
wsprintf(sBuff,"%d2",a);
SetWindowText(GetDlgItem(hWnd,IDC_EDIT1),sBuff);
return TRUE;

この場合BUTTON1は12と意図しない表示をしますが
BUTTON2はちゃんと2と表示されます。
非常に困っていますよろしくお願いします。
困り度:
  • すぐに回答を!
質問投稿日時:
08/04/23 22:23
この質問に対する回答は締め切られました。

回答良回答20pt

ANo.3 No.2です。ちょっと端折りすぎました。

原因はButtonNumber関数ではなく、
case IDC_BUTTON1のところでbreakしていないので、そのままBUTTON2の部分も実行されて、%d2の「2」が付加されているのでは、ということです。
流し読みなので未検証ですが・・・

何を意図して「%d1」や「%d2」としているのでしょうか?

(本題からそれますが、No.1さんの言うとおりインデントを付けて欲しかったです。また、aやzといった変数名は読みにくいのでやめましょう)
回答者:64bit
種類:アドバイス
どんな人:経験者
自信:参考意見
回答日時:
08/04/23 22:51
この回答へのお礼まさにそのとおりでした。汗
break入ってなかったです汗
電卓プログラムなので押したボタンを後ろにつけるということで%d1などと書いています。
ほかにもスマートな書き方があるようですが・・汗

回答

ANo.2 最後の方で、
>wsprintf(sBuff,"%d2",a);

この「2」ではないですか?
回答者:64bit
種類:アドバイス
どんな人:経験者
自信:参考意見
回答日時:
08/04/23 22:35
この回答へのお礼この回答にお礼をつける(質問者のみ)

回答良回答10pt

ANo.1 見づらいですね。。。
インデントを付けて貰えませんか?(全角空白を使うなどして
回答者:Lbfuvab
種類:補足要求
どんな人:経験者
自信:参考意見
回答日時:
08/04/23 22:26
この回答への補足インデントつけてたんですが投稿したときスペースが消えました汗。
次回は全角スペースでちゃんとつけます汗
この回答へのお礼この回答にお礼をつける(質問者のみ)