質問 |
||
| 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 |
|
| |
| この回答への補足 | インデントつけてたんですが投稿したときスペースが消えました汗。 次回は全角スペースでちゃんとつけます汗 |
| この回答へのお礼 | この回答にお礼をつける(質問者のみ) |