![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?5a7ff87)
![](http://oshiete.xgoo.jp/images/v2/common/profile/M/noimageicon_setting_03.png?5a7ff87)
WINDOWS APIをc言語でプログラムしているものです。
こちらのプログラムを書いたのですが、
http://onegaisimasune.web.fc2.com/main8.txt
左クリックで線を引くのですが、
線を引いていると普通の文字は消えないのですが、
ある操作をした整数を表示させるようにすると、
その整数が変わってしまいます。
どうしたら直るのでしょうか。
宜しくお願い致します。
No.3ベストアンサー
- 回答日時:
ヒマなんで見てみました(笑)
まず
・Visual C++ でコンパイルしたら警告が出て
Microsoft(R) 32-bit C/C++ Optimizing Compiler Version 13.10.3077 for 80x86
Copyright (C) Microsoft Corporation 1984-2002. All rights reserved.
bugs.c
e:\work\t\1102\bugs.c(770) : warning C4715: 'kouzoutai' : 値を返さないコントロー
ル パスがあります
e:\work\t\1102\bugs.c(1669) : warning C4700: 値が割り当てられていないローカルな
変数 'hPen' に対して参照が行われました。
e:\work\t\1102\bugs.c(1677) : warning C4700: 値が割り当てられていないローカルな
変数 'hDC' に対して参照が行われました。
実行すると、(たぶんSEGVで)こけました。
ですのでざっと眺めてみましたが、気になる点がぞろぞろ。
>grep -i hdc bugs.c
HDC hdc,hDC;
hdc = BeginPaint(hWnd , &ps);
TextOut(hdc , 100 , 100 , str , lstrlen(str));
TextOut(hdc , 600 , 100 , str , lstrlen(str));
TextOut(hdc, 10, 10, "風が吹けば桶屋が儲かる", 22);
SelectObject(hdc , hpen);
Rectangle(hdc , 10 , 280 , 900 , 600);
SelectObject( hDC, hPen ); // 作成したペンを使用するよう
に設定
MoveToEx(hdc , start[i].x , start[i].y , NULL);
LineTo(hdc , end[i].x , end[i].y);// 四角形を描画
MoveToEx(hdc , start[num].x , start[num].y , NULL);
LineTo(hdc , end[num].x , end[num].y);// 四角形を描画
>grep -i hpen bugs.c
HPEN hPen;
HPEN hpen;
hpen = CreatePen(PS_SOLID , 0 , 0XFF << 16);
SelectObject(hdc , hpen);
DeleteObject( hPen );
hPen = CreatePen( PS_SOLID, 1, RGB(0, 0, 0) ); // 黒い点
線のペンを作成
SelectObject( hDC, hPen ); // 作成したペンを使用するよう
に設定
DeleteObject( hPen );
確かにCは変数名の大小文字を区別しますが、これはひどすぎ。
変数の名前付けで言えば
> int count, i,read,j,k,l=0,flag,flag1=0,flag2 = 0;
xxx1, xxx2, ... というのも勘弁ですが、
「何のためのフラグであるか」を明示するような名前にすべきであって、
「フラグである」ことだけがわかる名前は意味がありません。
> /* 予約語が見つかったら、カウンタに1加える */
> int BSearch(char *word)
> /* ki[i].number2を何らかのバブルソートでソーティング */
これらは練習のためにライブラリ関数を使わなかったのですか?
最後に
int WINAPI WinMain(HINSTANCE hInstance , HINSTANCE hPrevInstance ,
PSTR lpCmdLine , int nCmdShow) {
で、
if ((fp = fopen(szFileName, "r")) == NULL) { /* ファイルを開けなかったら */
fprintf(stderr, "Can't Open C Source File!\n") ;/* メッセージを表示して */
exit(2); /* シェルへ戻る */
}
ということをやってますけど、WinMainから始まるプログラムは
通常コンソールを持っていないので、ここで
出そうとしているエラーメッセージはどこにも出力されません。
他にも指摘したいところはありますがとりあえずこれだけにしておきます。
この回答への補足
ご指摘ありがとうございます。
小文字にしても不具合は直らないですよね。
どこが問題なのでしょうか。。。
もう一度直してみたいと思います。
No.4
- 回答日時:
#2のzwiです。
追記させてもらうと。
現状のプログラムは、例えるなら不十分な知識で設計された木造一階建てに2階、3階と建て増ししているような物で、崩壊しても当たり前です。
今までの経験を生かして、基礎のしっかりしたまず鉄筋コンクリート建てのプログラムを1階から作ってみましょう。
不十分な理解の部分は、この際色々実験して理解を深めてから使うようにしましょう。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# c言語 コマンドライン引数 4 2023/02/09 18:47
- C言語・C++・C# C言語 3 2022/10/04 15:07
- その他(プログラミング・Web制作) プログラムの勉強のおすすめは 7 2022/12/09 20:09
- C言語・C++・C# 至急教えてください。プログラミングの問題です。 malloc関数を使ってください!お願いします! 最 1 2022/07/21 09:28
- C言語・C++・C# 至急教えてください。プログラミングの問題です。 最初に正の整数nの入力を受け付け、次に分数の分子と分 1 2022/07/19 17:03
- C言語・C++・C# 至急教えてください! プログラミングの問題です! お願いします! 出力2と全く同じ出力をするように、 2 2022/06/22 23:10
- C言語・C++・C# 至急お願いします。プログラミングの問題です。 最初に正の整数nの入力を受け付け、次に分数の分子と分母 3 2022/07/19 17:09
- C言語・C++・C# 至急教えてください!プログラミングの問題です。 割られる整数と割る整数を受け取って、商と余りを出力す 3 2022/07/05 10:23
- C言語・C++・C# C言語で 英文字のみからなる文字列、”Radar”、”WasItACatISaw”、”a”、””(空 5 2022/12/20 15:17
- C言語・C++・C# C言語について。 3 2022/11/05 20:30
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
不具合が発生(API・C言語)
-
fortran77 自宅ではコンパイル...
-
fortran if文
-
変数の値が勝手に変化する原因
-
ProC 固定SQLでNULLってどう表...
-
C言語 バッファについて。
-
Fortran90のプログラムについて
-
Fortran90についての質問です。
-
4桁の数値を逆に表示されるプ...
-
乱数を扱いたい
-
HeapDestroyを安全に行う方法
-
プログラミング(自由課題)
-
ROBOTC の bSoundActive 変数
-
CGIを作成していて不明な記号が
-
C言語のプログラムについてです...
-
C#でボタンを押したら入力され...
-
バグが分かりません。
-
BASICプログラム入門 副書名 プ...
-
N88basicを用いたGPIB制御
-
ruby for文
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
【JAVA】数字をひし形に出力す...
-
プログラミング
-
ruby
-
変数の値が勝手に変化する原因
-
JCLの基本について教えてください
-
Fortran90についての質問です。
-
fortran if文
-
3つの整数のうち奇数のみを表示...
-
Sublime Text 3でのFortranプロ...
-
Matlabについて質問2
-
ProC 固定SQLでNULLってどう表...
-
COBOLのピリオド
-
360度を超える角度
-
main関数終了時のreturnの意味は?
-
Visual Basic 三辺の長さ? ...
-
c言語です
-
C言語 バッファについて。
-
c言語のプログラミング 2つの整...
-
_dupenv_s関数でメモリリーク
-
N88basicを用いたGPIB制御
おすすめ情報