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と表示されます。
非常に困っていますよろしくお願いします。
No.3ベストアンサー
- 回答日時:
No.2です。
ちょっと端折りすぎました。原因はButtonNumber関数ではなく、
case IDC_BUTTON1のところでbreakしていないので、そのままBUTTON2の部分も実行されて、%d2の「2」が付加されているのでは、ということです。
流し読みなので未検証ですが・・・
何を意図して「%d1」や「%d2」としているのでしょうか?
(本題からそれますが、No.1さんの言うとおりインデントを付けて欲しかったです。また、aやzといった変数名は読みにくいのでやめましょう)
まさにそのとおりでした。汗
break入ってなかったです汗
電卓プログラムなので押したボタンを後ろにつけるということで%d1などと書いています。
ほかにもスマートな書き方があるようですが・・汗
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) Vba LongPtrについて教えてください 2 2022/08/19 11:14
- C言語・C++・C# c言語の問題です 3 2023/01/10 16:15
- JavaScript jQueryでのドラッグアンドドロップについて 1 2022/07/07 21:04
- JavaScript フォームが空欄の時にフォームの外をクリックすると、エラーが出るコードを調べています。 1 2023/06/25 11:51
- Java java 引数 戻り値のあるメソッド 3 2023/02/12 06:23
- Excel(エクセル) Excelでnullになるような式のセルをマクロで空白行と認識させるにはどうすればいいですか? 3 2023/03/13 13:42
- オープンソース Flaskでサーバー立ち上げに関して 1 2023/08/12 21:02
- JavaScript スマフォではボタンを表示させたくない 2 2023/01/20 14:26
- JavaScript アップロードファイルの種類によって処理を分岐させたいのですが書き方が分からずアドバイスお願いします 4 2023/06/17 19:12
- JavaScript 1日1回引けるJavaScriptおみくじについて 1 2022/12/12 22:28
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ポップアップメニュー
-
トラックのループの仕方
-
2÷3などの余りについて
-
C言語で%を使わない余りの出し方
-
比較回数と交換回数表示について
-
信頼区間の1.96や1.65ってどこ...
-
nCmの関数
-
複数桁10進数の*桁目だけを抽出...
-
Notepad++の関数リスト表示の変...
-
C言語のfor文です。 繰り返しの...
-
break文でループを一気に抜ける...
-
正負を反転させて出力するプロ...
-
#define _CRT_SECURE_NO_WARNIN...
-
error C2143: 構文エラー : ';'...
-
プログラムでの数字につく”f”の...
-
既定のコンストラクタがありま...
-
hit&bolwのプログラミングがで...
-
C言語 配列と関数の練習問題
-
c言語
-
std::set<int> で、ある値が何...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エディットボックスの背景の色...
-
ダイアログプログラムでEnterキ...
-
C言語win32api、エディットボッ...
-
音量調節
-
エディットコントロール入力時...
-
プログラミングでエラーが出ま...
-
エラー Run-Time Check Failur...
-
キャレットの現在位置の表示 (W...
-
LoadImageとSetCursorについて
-
コンソールアプリケーションの...
-
画像を表示したいのですが……
-
ボタンの色(WINAPI)
-
COMPORTマルチスレッドで例外発生
-
C++のcase文の書き方
-
Win32APIでウィンドウを中央に...
-
PeekMessageについて
-
CTreeCtrlのCreate関数でエラー...
-
オーバーレイみたいな処理がしたい
-
この列挙体でsysjanの関数はあ...
-
DirectInputについて再
おすすめ情報