- 1 名前:デフォルトの名無しさん mailto:sage [2007/08/19(日) 20:07:56 ]
- スレを勃てるまでもない低俗なC/C++の質問はここでお願いします。
過去ログ スレを勃てるまでもないC/C++の質問はここで pc11.2ch.net/test/read.cgi/tech/1167476845/ スレを勃てるまでもないC/C++の質問はここで 2 pc11.2ch.net/test/read.cgi/tech/1178503366/
- 136 名前:デフォルトの名無しさん mailto:sage [2007/09/09(日) 20:09:18 ]
- >>135 ありがとうございます。ちょと調べてみます。
- 137 名前:デフォルトの名無しさん mailto:sage [2007/09/09(日) 20:13:29 ]
- パケットモニタも用意しよう。
暗闇を照らすものは多ければ多いほどいい。
- 138 名前:デフォルトの名無しさん [2007/09/09(日) 21:57:47 ]
- #include <stdio.h>
#include <sys/types.h> #include <sys/socket.h> #include <netinet/in.h> int main() { int sock0; struct sockaddr_in addr; struct sockaddr_in client; int len; int sock; sock0 = socket(AF_INET, SOCK_STREAM, 0); addr.sin_family = AF_INET; addr.sin_port = htons(12345); addr.sin_addr.s_addr = INADDR_ANY; bind(sock0, (struct sockaddr *)&addr, sizeof(addr)); listen(sock0, 5);
- 139 名前:デフォルトの名無しさん [2007/09/09(日) 21:58:48 ]
- while (1) {
len = sizeof(client); sock = accept(sock0, (struct sockaddr *)&client, &len); write(sock, "HELLO", 5); close(sock); } close(sock0); return 0; } 364 名前:デフォルトの名無しさん[] 投稿日:2007/09/09(日) 21:48:41 このプログラムは複数のクライアントと接続するサーバプログラムらしいのですが なぜ複数のクライアントと接続することができるんですか? 実際、このプログラムはどのように動作するんですか? まず、listen(sock0, 5);で接続受付状態になって停止して 接続を受け付けたらwhile以下を実行するんですよね?
- 140 名前:デフォルトの名無しさん [2007/09/09(日) 22:00:34 ]
- コピペ?
- 141 名前:デフォルトの名無しさん mailto:sage [2007/09/09(日) 22:03:03 ]
- すいません
聞く場所を間違えたのでここにコピペしました
- 142 名前:デフォルトの名無しさん mailto:sage [2007/09/09(日) 22:11:19 ]
- >>121
だから>>91が意味わからんって言ってるんじゃないの。 「補足」どの部分の何を補足してるつもりなのか、意味がわからん。
- 143 名前:140 [2007/09/09(日) 22:17:53 ]
- >>141
すまそんとりあえず分かる範囲で… listen関数の第2引数は待ち受けの数を表し、 複数のクライアントからの接続要求を待つようです。
- 144 名前:デフォルトの名無しさん mailto:sage [2007/09/09(日) 22:32:27 ]
- >>143
このプログラムでは待ちうけ数が5であるということは 接続要求が1つ来たらコードのlisten以下に処理が移るということですよね? このときの待ち受け数は4でこのプロセスはwhile内部の処理を行う そして、closeしたら待ち受け数が5になる 以下接続要求が来るごとにそれぞれのプロセスがlisten以下をcloseされるまで 実行するということですか? かなり日本語がおかしくて申し訳ないです
- 145 名前:デフォルトの名無しさん mailto:sage [2007/09/09(日) 22:42:01 ]
- 違う。
listenは5つ分の接続要求を貯めるキューを作ってポートを開くだけ。 acceptで実際に接続が来るまで待ち、接続が来たらacceptから下にいく。 クライアントにHELLOを送って、接続を閉じて、またacceptで次の接続を待つ。
- 146 名前:デフォルトの名無しさん mailto:sage [2007/09/09(日) 22:47:06 ]
- 待ち受け数とかプロセスとか妙な言葉を使ってるけど、別に複数のプロセスが立ち上がるわけでもないし、同時並行的に5つの接続を捌けるわけでもない。
listenに指定する5っていうのは、プログラムの処理が追いつかなくてクライアントをどんどんacceptするのが追いつかないときに、OSが裏で5つまで接続要求を貯めておけるだけ。 6つめが来るとクライアントは接続拒否される。
- 147 名前:140 [2007/09/09(日) 22:47:45 ]
- ソケットは扱った事が余り無いのでなんとも言えませんが
その通りだと思います。 また、複数の接続要求(この場合だと5以下)が来た時は、 待ち行列に置かれアクセプト待ちに 越えると無視されるようです。 つ UNIXネットワークプログラミング入門 雪田修一 著 買ったは良いが今日まで読む機会が無かったありがとう…orz
- 148 名前:144 mailto:sage [2007/09/09(日) 22:54:48 ]
- >>145
>>146 並列的に処理をするものとばかり・・・ 実際は処理を行っているのは1つだけであとはためておくんですね listenで停止する(待つ)のではなくてacceptで停止して接続を待つんですね
- 149 名前:144 mailto:sage [2007/09/09(日) 22:59:27 ]
- あともうひとつ聞きたんですがlen = sizeof(client)という処理を行っているんですけど
この時点でclientには代入などが行われていないのでこのような処理を行うことは 出来ないと思うのですが?
- 150 名前:デフォルトの名無しさん mailto:sage [2007/09/09(日) 23:08:02 ]
- 代入してなくても、その変数のサイズ (つまり sockaddr_in 構造体のサイズ) くらいはわかる
- 151 名前:144 mailto:sage [2007/09/09(日) 23:09:28 ]
- >>150
ああそういえば・・・ 色々答えていたただいてありがとうございました
- 152 名前:140 [2007/09/09(日) 23:32:37 ]
- #include <sys/types.h>
#include <sys/socket.h> int accept(int s, struct socketaddr *addr, socklen_t *addrlen); s…ソケットに結びついているディスクリプタ addr…ユーザプログラムの責任でアロケートしたアドレス格納用バッファへのポインタ addrlen…socklen_tへのポインタ よって struct sockaddr_in client; とあるので 第2引数にはclientのポインタが… &client 第3引数にはアドレス用バッファのバイト数が入ります。 int len = sizeof(client); はぁ、もう寝よ…
- 153 名前:デフォルトの名無しさん mailto:sage [2007/09/10(月) 00:04:13 ]
- おやすみ。
明日からは ネットワークプログラミング相談室 Port20 pc11.2ch.net/test/read.cgi/tech/1186418855 へどうぞ。
- 154 名前:デフォルトの名無しさん mailto:sage [2007/09/10(月) 00:11:46 ]
- (struct tm)* now;
と書いてもキャストだと思わず「struct tm型」のポインタだと思ってくれるコンパイラない?
- 155 名前:デフォルトの名無しさん [2007/09/10(月) 17:26:31 ]
- 今度、就職するときにC,C++を勉強しなくてはいけないのですが
オススメの教習本ってありますか?
- 156 名前:デフォルトの名無しさん mailto:sage [2007/09/10(月) 17:46:15 ]
- Boostのドキュメント
- 157 名前:デフォルトの名無しさん mailto:sage [2007/09/10(月) 18:19:54 ]
- >>155
参考書スレがあるから、そっちを読んだほうがいい。 とりあえず自分からアドバイスできるのは、 ・文法だけ理解しても、使いこなすことはできない ・世の中、良書もあれば、ろくでもない本もある。とくに後者の罠は引っかかりやすい。 ってこと。 文法を解説する本だけでなく、 使いこなし方を解説する本も読もう。 C++の使いこなし入門としては、 Effective C++ Effective STL この2冊をお勧めする。 本の値段は安くないが、値段の10倍の価値はある。 少なくとも自力で悟りを開くよりは、遥かに近道だ。
- 158 名前:デフォルトの名無しさん mailto:sage [2007/09/10(月) 22:00:27 ]
- 質問です。実行中のプログラムにコマンドラインから設定を渡すにはどうすればよいでしょうか?
これは、実行中のプログラムがコマンドラインを監視するのではなく、 2重起動時にパラメータだけ渡されるようなイメージです。 お願いします。
- 159 名前:デフォルトの名無しさん mailto:sage [2007/09/10(月) 22:09:32 ]
- 先に起動した方は何かの通信手段でデータを受信できるように待機しておいて、
後に起動した方はその通信手段でコマンドライン情報を送信する。
- 160 名前:158 mailto:sage [2007/09/10(月) 22:12:35 ]
- >>159
共有メモリ/Socket以外の方法で可能なら、それを教えてください。 へたれですいません。お願いします。
- 161 名前:デフォルトの名無しさん mailto:sage [2007/09/10(月) 22:16:50 ]
- なぜ共有メモリやらソケットがイヤなのかその理由を書かないと、何か提案しても、やっぱりそれもイヤとか言われる予感。
あと、ANSIの範囲外の話は、OSの種類を書いてください。
- 162 名前:158 mailto:sage [2007/09/10(月) 22:23:09 ]
- >>161
上記以外の方法で、より簡単な方法があればそれで行きたいからです。 規格はANSIで。Winだったらメッセージ使うんですが。 それと、上記の方法がいやな理由は以下の通り。 ・共有メモリ -> 保守/拡張がめんどい ・ソケット -> プログラム規模が大きくなるからめんどい よろしくお願いします。
- 163 名前:デフォルトの名無しさん mailto:sage [2007/09/10(月) 22:26:45 ]
- ANSI ではプロセス間通信の方法は fopen で同じファイルを読み書きする以外にありません。 終わり。
- 164 名前:デフォルトの名無しさん mailto:sage [2007/09/10(月) 22:31:25 ]
- ちなみに共有メモリもソケットも ANSI には無いものですから 残念
- 165 名前:158 mailto:sage [2007/09/10(月) 22:44:57 ]
- >>163, 164
ANSIではファイル以外にはないですが・・・どうもです! 共有メモリってANSIではないのですね。勉強になります。 ソケットはそうですね。OS依存で言語使用ではないですね。仰るとおり。 ご丁寧にどうも!
- 166 名前:やおい [2007/09/10(月) 23:49:58 ]
- typedef unsigned long dword;
typedef unsigned char byte; typedef union _struct{ byte data[12]; struct test_bit{ dword program_info_length :12; dword flag_4 :4; dword PCR :13; dword flag_3 :3; dword last_section_number :8; dword section_number :8; dword current_next_indicator:1; dword version_:5; dword flag_11:2; dword program_number :16; dword section_length:12; dword falg_2_ :2; dword flag_0:1; dword testdata :1; dword table_id :8; }bit; }header_type;
- 167 名前:やおい mailto:sage [2007/09/10(月) 23:50:47 ]
-
上記のようなビットフィールド構造を作ってdata配列に値を入れて共用体のメンバから 欲しいビット値を手に入れると言ったプログラムを作ってます。 上記の様に定義してprintfで出力し一つ一つ確認を行ったところ dword program_number以降に入るデータが期待する値と違うものが入ってしまいます。 共用体で切った容量と、構造体で切った配列は同じ大きさだと思うのですが・・・何故こんな 事が起こるのかわかりません・・・。 ちなみに dword program_number :16;の部分を >dword program_number1 :8; >dword program_number2 :8; で二つに分けるとprogram_number以降も正しくデータが入りました。 原因が分かる方が居ましたら是非、お願いします。
- 168 名前:デフォルトの名無しさん mailto:sage [2007/09/11(火) 02:41:37 ]
- 質問です。
char* foo(){ return new char[50]; } という関数があって、戻り値をdeleteしたいとき、 char* buf=foo(); delete buf; でよいの? delete[]にできなくて気持ち悪いんだが。 char[] foo(){ とか書けないし。
- 169 名前:デフォルトの名無しさん mailto:sage [2007/09/11(火) 04:32:34 ]
- >>168
普通にdelete[] bufと書けばいいのでは?
- 170 名前:デフォルトの名無しさん mailto:sage [2007/09/11(火) 07:24:39 ]
- 最後Enterを押すまでウィンドウを閉じないようにしたいのですがどうすればいいですか?
- 171 名前:デフォルトの名無しさん mailto:sage [2007/09/11(火) 07:50:08 ]
- >>170
止めたいところで getchar();
- 172 名前:デフォルトの名無しさん mailto:sage [2007/09/11(火) 08:05:49 ]
- テキストファイルを読み込んで指定した文字が何個含まれるかを出力するプログラム
を作りたいと思いこんな感じで書いてみたんですが、stringで宣言したbufファイル はstrstrでは使えないみたいで困ってます 他に何かいい方法ありませんか? int count=0; string buf; while(getline(test, buf)) {//読み込んだテキストファイル(test)を1行ずつbufにコピー if(strstr(buf,"test")!=NULL)//もしbufにtestという文字があれば count++; } out<<cout<<endl;//out.textに何個あったか書き出す
- 173 名前:デフォルトの名無しさん mailto:sage [2007/09/11(火) 08:15:30 ]
- C++は知らない俺の案
string buf → char buf[1024] としてgetlineではなくfgetsを使う。 ただしstrstr(buf,"test")とするといつまでも一個めの"test"に引っかかるので、 char* start; while(...){ if((start=strstr(buf,"test")) != NULL){ count++; start++; //startを"test"の先頭の次、つまり'e'を指すようにして、次回同じ"test"にひっかからないようにする } } などとする
- 174 名前:173 mailto:sage [2007/09/11(火) 08:17:23 ]
- 追加
stringを使うにしても何にしても while の中でもう一個ループ組まないと一行に2回以上"test"があっても1回しか数えてくれないよ
- 175 名前:173 mailto:sage [2007/09/11(火) 08:20:43 ]
- たびたびすまん
if((start...) != NULL) じゃなくて while((start...) !=NULL) だ。
- 176 名前:デフォルトの名無しさん mailto:sage [2007/09/11(火) 08:23:33 ]
- >>172
strstreamとか strstreambufとかを調べろ
- 177 名前:デフォルトの名無しさん mailto:sage [2007/09/11(火) 08:27:49 ]
- >>170
話を端折りすぎ。 何のために? 誰が作ったウィンドウを? さっぱりわからん。
- 178 名前:デフォルトの名無しさん mailto:sage [2007/09/11(火) 08:34:11 ]
- >>172
buf.find("test") != std::string::nposか、 std::strstr(buf.c_str(), "test") != NULL でも、これだと1行に2個以上あったときにまずくないか?
- 179 名前:デフォルトの名無しさん mailto:sage [2007/09/11(火) 08:52:37 ]
- C言語らしく。
まずは、ある文字列が1行に何回出現するのかカウントして返す関数を作るべし。 その後に、1行読んでは、出現回数を積算するループを回すべし。
- 180 名前:デフォルトの名無しさん mailto:sage [2007/09/11(火) 08:53:48 ]
- >>173
おいおい、間違いすぎだろ。それから、startを更新しているのに使っていないぞ。 それに、strstr()でマッチしたときにstartはstrlen()分進める方がよくないか?
- 181 名前:デフォルトの名無しさん mailto:sage [2007/09/11(火) 08:58:49 ]
- >>171
ありがとうございます。うまくいきました
- 182 名前:やおい mailto:sage [2007/09/11(火) 09:09:19 ]
- >>166-167
この問題についても分かる方居ましたら是非お願いします・・・。
- 183 名前:デフォルトの名無しさん mailto:sage [2007/09/11(火) 09:15:37 ]
- ビットフィールドの配置なんて処理系依存なんだから、
まずはお前が何のコンパイラを使っているか書かないと始まらない。
- 184 名前:デフォルトの名無しさん mailto:sage [2007/09/11(火) 09:29:07 ]
- >>182
フィールド幅が16だから、16ビット境界(2バイト境界)に配置されたと思われ。 pragma packかなにかでスタブ0にしてやれば間が埋まって想定どおりになるかと。 それはさておき、ビットフィールドに於いて、整数型の幅は意味がないので dwordなんて書かれると却って混乱する。signed/unsignedと書いておくことお勧め。
- 185 名前:デフォルトの名無しさん mailto:sage [2007/09/11(火) 18:36:31 ]
- C言語で何かアプリケーションを作成したい時、ソフトは何を使えばいいですか?
GUIの物を作ってみたいのですが。 ちなみにOSはWindowsXPを使っています
- 186 名前:デフォルトの名無しさん mailto:sage [2007/09/11(火) 18:39:25 ]
- VC
- 187 名前:デフォルトの名無しさん mailto:sage [2007/09/11(火) 18:54:21 ]
- Visual C++というのでいいのでしょうか?
- 188 名前:デフォルトの名無しさん mailto:sage [2007/09/11(火) 18:57:53 ]
- VC#
- 189 名前:デフォルトの名無しさん mailto:sage [2007/09/11(火) 18:59:44 ]
- >>185
C++ではなく、Cで? それはまた酔狂だな。 VisualC++なんていらない。 BCCでも、PlatformSDK付属コンパイラでも、何でもいいよ。
- 190 名前:デフォルトの名無しさん mailto:sage [2007/09/11(火) 20:27:52 ]
- 何でも良いけど強いてというならVisualC++で、コンパイラオプションを設定してCとしてコンパイルすれば良い。
- 191 名前:デフォルトの名無しさん mailto:sage [2007/09/11(火) 21:45:11 ]
- VC++6.0なら拡張子を .c にしとけば勝手にCだと思ってくれるよ
2005は知らね
- 192 名前:デフォルトの名無しさん mailto:sage [2007/09/11(火) 22:21:48 ]
- 2005もだけど
- 193 名前:デフォルトの名無しさん mailto:sage [2007/09/11(火) 23:47:52 ]
- ありがとうございます。それを取って使ってみようと思います。
- 194 名前:やおい mailto:sage [2007/09/14(金) 00:03:55 ]
- >>183-184
遅くなってすみません。 返信ありがとうございました。 言われた通りpragmaを使って挑戦したいと思います。 ビットフィールドって処理系に依存していたんですね。 その編の事も含めて初めて知りました。 ちなみに使っているのはVisual C++6.0です。
- 195 名前:デフォルトの名無しさん mailto:sage [2007/09/18(火) 01:47:52 ]
- ファイルがあって先頭にHEADERがついています
------- ○ ○○○ ○ ○ ○ 以下必要な部分…1万行以上 -------- 先頭部分が6行くらいで一定で続いていて その後の必要な部分はRGB値がこの順番で入っています この形式のファイルを1000個くらい連続で読み込む必要があるのですが こういう作業をしたことが無いので、ヒントやどういう風にやればいいのか教えてください。 先頭6行分を飛ばして、あとをfscanf(%f)なんかで読めるといいのですが…
- 196 名前:デフォルトの名無しさん mailto:sage [2007/09/18(火) 01:57:15 ]
- >>195
固定長ならfseek()でスキップ、可変長ならfgets()で空読み
- 197 名前:デフォルトの名無しさん mailto:sage [2007/09/18(火) 13:28:35 ]
- >>195
ヒント 同じような処理をしているプログラムのソースを見る。 unix系には、画像のファイル形式で、テキストなのがあったと思う。 ていうか、あなたのは、まさに、それなんじゃないか? ファイルの拡張子なんだい? それで検索すれば見つかると思うぞ。 ちなみに、学校の宿題っぽいな。
- 198 名前:デフォルトの名無しさん mailto:sage [2007/09/18(火) 19:43:59 ]
- PPMやBMPならばfgetsでヘッダーを全部とばして、そのあとfreadすればOK.
- 199 名前:デフォルトの名無しさん mailto:sage [2007/09/18(火) 21:13:03 ]
- >>198
ハァ?
- 200 名前:デフォルトの名無しさん mailto:sage [2007/09/18(火) 23:32:55 ]
- >>199
pbmのtypoだろ。察してやれよ。 # だとしたら、pgmの立場がないけどねw
- 201 名前:デフォルトの名無しさん mailto:sage [2007/09/22(土) 02:07:32 ]
- C++のmutableは、どういう時に使うものなのでしょうか?
- 202 名前:デフォルトの名無しさん mailto:sage [2007/09/22(土) 02:10:41 ]
- 例えばこういうとき。
class MyObject { mutable int hashcode_cache; public: int hashcode() const { if(hashcode_cache == 0) { hashcode_cache = なにかすごい複雑な計算; } return cached_hashcode; } };
- 203 名前:デフォルトの名無しさん mailto:sage [2007/09/22(土) 02:48:03 ]
- なるほど。
ありがとうございます。
- 204 名前:デフォルトの名無しさん mailto:sage [2007/09/23(日) 03:51:04 ]
- void foo(int *ar){
printf("%d",ar[2]); } void main(){ int array[2][2] ={{0,1},{2,3}} printf("%d",array[0][0]); //a printf("%d",array[0]); //b printf("%d",array[2]); //c foo(&array[0][0]); //d } 上のaは0が表示、 bはa[0][0]のアドレスが表示され、 cは配列の範囲外参照になる、で合ってますか? (cのarray[2]でarray[1][0]が表示されたりはしませんよね?) そしてdですが、やはりこれも範囲外参照、ということになりますか? どうにかして二次元配列を一次元扱いすることはできませんか?
- 205 名前:デフォルトの名無しさん mailto:sage [2007/09/23(日) 08:24:29 ]
- >>204
int * p = & array[0][0]; for (int i = 0; i < sizeof(a); ++i) { printf("%d\n", p[i]); }
- 206 名前:デフォルトの名無しさん mailto:sage [2007/09/23(日) 08:42:46 ]
- C++でもおkってんならboost::multi_arrayを導入するのを考えてもいいよ
って僕の隣のboost厨がいってます
- 207 名前:デフォルトの名無しさん mailto:sage [2007/09/23(日) 15:42:16 ]
- >>205
環境が整い次第、それで試してみます。 二次元配列はそれぞれの列(行?)が連続的に配置されているとは限らない、とどっかに書いてあったので、 それを鵜呑みにしていました……。 ということは>>204のdはarray[1][0]を表すということですよね。 それならなんとかなりそうです。 ありがとうございます。 >>206 C++は今はちょっと…… 答えてくださりありがとうございます。
- 208 名前:デフォルトの名無しさん mailto:sage [2007/09/23(日) 16:27:40 ]
- >>207
>ということは>>204のdはarray[1][0]を表すということですよね。 いいえ。関数内でアクセスしているのは、array[1][0]ですが。
- 209 名前:デフォルトの名無しさん mailto:sage [2007/09/23(日) 17:21:40 ]
- >>207
隙間なく連続しているとは限らないというのは、正しい。
- 210 名前:デフォルトの名無しさん mailto:sage [2007/09/23(日) 18:12:53 ]
- >>207
>二次元配列はそれぞれの列(行?)が連続的に配置されているとは限らない、とどっかに書いてあったので、 いいえ、それが二次元配列として定義されたものなら連続しているはずです。
- 211 名前:デフォルトの名無しさん mailto:sage [2007/09/24(月) 15:58:38 ]
- #include <stdio.h>
#include <stdlib.h> void dary(int *ary,size_t n); void pary(int *ary,int *aryeof); int main(){ int ary1[100] = {0}; int ary2[10][10] = {0}; int i,j,*temp; dary(ary1,100); pary(&ary2[0][0],&ary2[9][9]); for(i = 0,j = 1; i < 100; i++,j++){ printf("%-3d ",ary1[i]); if(!(j%10)) putchar('\n'); } for(temp = &ary2[0][0],j = 1; temp <= &ary2[9][9]; temp++,j++){ printf("%-3d ",*temp); if(!(j%10)) putchar('\n'); } return 0;} void dary(int *ary,size_t n){ int i = 0; for(i = 0; i < n; i++) ary[i] = i;} void pary(int *ary,int *aryeof){ int i = 0; int *temp; for(temp = ary,i = 0; temp <= aryeof; temp++,i++) *temp =i;}
- 212 名前:デフォルトの名無しさん [2007/09/25(火) 22:39:29 ]
- 超初心者質問ですが「defineできる」とはどういう意味ですか?
defineで定数を宣言するということでしょうか?
- 213 名前:デフォルトの名無しさん mailto:sage [2007/09/25(火) 22:48:24 ]
- 前後の文脈が分からんとなんとも。
直訳すると「定義することが出来る」か?
- 214 名前:デフォルトの名無しさん [2007/09/26(水) 01:44:40 ]
- すみません、これの違いって何ですか?
ポインタかどうか?だけですか? MyClass my; my.foo(5); と、 MyClass* my; my = new MyClass; my->foo(5); delete my;
- 215 名前:デフォルトの名無しさん [2007/09/26(水) 01:49:08 ]
- VC6 の SDK で、ボタンを作ってあーだこーだしているのですが、
描画がうまくいきません。マウスを左クリックしたときに そのメッセージを捕まえて、描画更新すればよいのかと思って いたのですが、上手くいきません。 WM_LBUTTONDOWNと、WM_LBUTTONUPは取れてます。が、ボタンを押す と、凹まないし、凹んだと思ったら、他のボタンは凹まないし・・ 描画処理が足らないのかと思っているのですが、どこに何を入れれば いいのでしょう?ちなみにWM_LBUTTONDOWNを受信したときに InvalidateRectと、UpdateWindowを呼んでみたのですが、何も変わりませんでした。 よろしくおねがいします。
- 216 名前:デフォルトの名無しさん mailto:sage [2007/09/26(水) 02:02:57 ]
- >>214
前者はローカル変数としてスタックに確保しているが、 後者はヒープに確保している。 巨大なクラスでないなら前者にするべき。
- 217 名前:214 [2007/09/26(水) 02:07:53 ]
- >>216
そういうことでしたか。ありがとうございます。 サクっとは前者で、ぐごごご、は後者みたいな感じですね。 これからはサイズや用途などを考えて使い分けるようにします。
- 218 名前:デフォルトの名無しさん [2007/09/26(水) 02:11:52 ]
- >>212
文脈がわからんからなんともいえないけど、「defineできる」って、 誰かに言われたの?だとすると、「defineできる」って言わせる何か (プライスレス)があったわけだと思うわけですよ。 もし、そこに整数や文字列なんかがあった場合、それらはソース コード上に書くよりdefineできるから、そこらへん修正しちゃってYO みたいな感じになるのかな?
- 219 名前:超初心者です [2007/09/26(水) 02:13:15 ]
- 質問があるんですがよろしくお願いします。
C++を使ってヘリコプタのシミュレータを作っています。 今回「compact flight controller」というコントローラを使いたいと考えています。 コントローラで動きを入力するとその動きがシミュレータにも反映されるようにしたいです。 入力した動きを数値化して代入すればいいのかなと思っているのですが、 動きをC++に取り込む方法が分かりません。誰か教えて頂けませんか? 説明がへたくそですごく分かりにくくなってしまいました。申し訳ありません。
- 220 名前:デフォルトの名無しさん mailto:sage [2007/09/26(水) 07:02:17 ]
- >>219
質問のポイントが漠然としすぎてる。 まるで、 私の代わりに作ってください と言っているようなものだ。
- 221 名前:デフォルトの名無しさん mailto:sage [2007/09/26(水) 08:03:39 ]
- デバイスドライバと連携をとりたいとかかなあ。
- 222 名前:デフォルトの名無しさん mailto:sage [2007/09/26(水) 08:36:58 ]
- >>219
DirectX
- 223 名前:超初心者です [2007/09/26(水) 15:55:37 ]
- すいません。漠然としすぎでした。本当に初心者なのでどう質問していいか
分かりませんでした。 ジョイパッドの入力データをC++に取り込む関数みたいなものがあると 聞いたので、もしあるのなら教えていただきたいです。
- 224 名前:デフォルトの名無しさん mailto:sage [2007/09/26(水) 16:11:41 ]
- 超初心者はプログラムするな
- 225 名前:デフォルトの名無しさん mailto:sage [2007/09/26(水) 16:14:01 ]
- あほか
- 226 名前:デフォルトの名無しさん mailto:sage [2007/09/26(水) 16:20:33 ]
- DXライブラリ使いなさい
目的の関数はマニュアル見れば一発で見つかるから
- 227 名前:デフォルトの名無しさん mailto:sage [2007/09/26(水) 17:00:31 ]
- 質問です
cout.precision(17); cout << .8F + .1F << endl; //Line a cout << .8 + .1 << endl; //Line b これを実行すると 0.90000003576278687 0.90000000000000002 と表示されるのですが0.900000000・・・とならないのは Line aのほうはfloat型、Line bのほうはdouble型でメモリ上に確保されていて 確保していない領域まで表示してしまった結果と考えてよいのでしょうか? まったく見当違いなことを言っていましたら、どなたかなぜ0.9000・・・・とならないのかご指導お願いできますか? よろしくお願いします
- 228 名前:デフォルトの名無しさん mailto:sage [2007/09/26(水) 17:25:42 ]
- >>227
2進数だから。
- 229 名前:デフォルトの名無しさん mailto:sage [2007/09/26(水) 17:28:31 ]
- たとえば、
10進数の0.5は、2進数なら0.10000000000000000・・・・・ では、 10進数の0.9を、2進数で現わすと? 何桁必要なのか。 それを有限の桁数で打ち切って、さらに10進数に変換すると、どうなるのか。 ちょっと自分で計算してみればわかる。
- 230 名前:デフォルトの名無しさん mailto:sage [2007/09/26(水) 18:01:12 ]
- >>228
>>229 ありがとうございます 二進数だと0.111001100110011・・・・ って感じで無限に続いてっちゃうんですね それでサイズに入らない分は切り捨てられると なんかぜんぜん見当違いなことかいててすみません 勉強になりました ありがとうございました
- 231 名前:デフォルトの名無しさん [2007/09/26(水) 22:47:40 ]
- [1] 授業: 教科書
[2] OS Windows [3]問題 double data[5] ={10.8,20.3,30,6.40,10.4,2.12}: 配列の全要素の合計と平気を求めるプログラムをポインタを使って作成しなさい 誰か宜しくお願いします ちなみに初心者です
- 232 名前:デフォルトの名無しさん mailto:sage [2007/09/26(水) 23:10:54 ]
- >>231
template <int N> double sum( double (&array)[N] ) { double result = 0; for( double* i = array ; i < &array[N] ; ++i) { result += *i ; } return result ; } template <int N> double average( double (&array)[N] ) { return sum(array)/N ; }
- 233 名前:デフォルトの名無しさん mailto:sage [2007/09/26(水) 23:16:12 ]
- double result = 0;
↓ double result(0.0) ; のほうがいい気がする。
- 234 名前:774 [2007/09/27(木) 22:47:40 ]
- log10f()はVC6ではどのライブラリに含まれてるんでしょうか?
リンクで未解決になっちゃう。
- 235 名前:デフォルトの名無しさん mailto:sage [2007/09/27(木) 22:56:38 ]
- >>234
VC6はC99未対応だから無いんで内科医?
- 236 名前:デフォルトの名無しさん [2007/09/28(金) 01:13:27 ]
- 未入力のエラーチェックしたいのですが
getsだと簡単なのにscanfだとうまくいかない getsは非推奨だそうなので出来ればscanfでやりたいのですが いい方法ありますか?
|

|