1 名前:デフォルトの名無しさん [2008/02/28(木) 00:01:39 ] エスケープシーケンスやWin32APIなどの環境依存なものでもOK。 ただしその場合、質問者は必ず環境を書きましょう。 ※sage禁止です(と代々スレに書いてありますが自己判断で)。 【前スレ】 【初心者歓迎】C/C++室 Ver.49【環境依存OK】 pc11.2ch.net/test/read.cgi/tech/1203478421/ 【アップローダー】(質問が長い時はココ使うと便利) kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.htm
481 名前:デフォルトの名無しさん mailto:sage [2008/03/07(金) 01:13:18 ] >>479 APIと違って、バッファリングするのが前提だからfseek()などでバッファを同期を取ることに決められている。
482 名前:デフォルトの名無しさん mailto:sage [2008/03/07(金) 01:16:55 ] >>461 Naive_Grid_Class.h の最後に ; が足りないとか、 BOOLの定義がどこにもないとか。
483 名前:デフォルトの名無しさん mailto:sage [2008/03/07(金) 01:17:54 ] >>480 同期を取っても書き換わらない?
484 名前:デフォルトの名無しさん [2008/03/07(金) 01:22:57 ] >>475 そのようにすれば、できました! ありがとうございます。 >>476 stringstreamも勉強します。
485 名前:445 mailto:sage [2008/03/07(金) 01:49:51 ] >>481 なるほど。仕様ですか・・・ 多分FILE構造体の内容とかから必然なのかな? 直感的には把握が難しかったです >>483 fseekはさめば書き換わりますが、 はさんでなくてもfwriteの結果が1というのが 納得いかず・・・ 試しにfread/fwrite/fseek(fp, 0, SEEK_END) というのもやってはみたけれどやはり書き換わらず・・・
486 名前:デフォルトの名無しさん [2008/03/07(金) 02:03:11 ] int main(){ fin.open("aaa... fout.open("bbb... function(....); } function(.....){ fout << "thanks" <<'\n'; } のようにmain関数でデータファイルを開いて、 function関数の中に開いたファイル持ってきて、書き込みたいんですけど。 どうするのがいいのでしょうか?
487 名前:デフォルトの名無しさん mailto:sage [2008/03/07(金) 02:11:36 ] >>486 ストリームを引数にとればいいんじゃねーの?
488 名前:デフォルトの名無しさん mailto:sage [2008/03/07(金) 02:23:55 ] >>486 ストリームを大域変数にすればいいんじゃねーの?
489 名前:デフォルトの名無しさん mailto:sage [2008/03/07(金) 02:48:25 ] >>486 ストリームを参照で取る constで取ったらあかんよ
490 名前:デフォルトの名無しさん [2008/03/07(金) 03:42:36 ] >>486 (ofstream& fout[], ifstream& fin[]) ってことですか?? 参照型の配列は許されないとかなるんですが。。。 困り果てた。
491 名前:デフォルトの名無しさん mailto:sage [2008/03/07(金) 03:47:08 ] >>490 何故いきなり配列に? >486では一言もそんな話が……
492 名前:デフォルトの名無しさん mailto:sage [2008/03/07(金) 03:50:43 ] >>490 常考参照のポインタだろ *&fout
493 名前:デフォルトの名無しさん mailto:sage [2008/03/07(金) 04:00:42 ] #include <iostream> これで通る #include <fstream> void sub(std::fstream* f) { f[0]; } int main() { std::fstream f[10]; sub(f); }
494 名前:デフォルトの名無しさん [2008/03/07(金) 04:17:54 ] >>493 すいません、素人目からはさっぱりなんですが。。。 fout,fin???どうなったのでしょうか??
495 名前:デフォルトの名無しさん mailto:sage [2008/03/07(金) 04:25:17 ] >>494 配列だったらリファレンスではなくポインタで渡せばいいだけの話。
496 名前:デフォルトの名無しさん mailto:sage [2008/03/07(金) 04:28:51 ] >>494 あんた>486=>490? >489に答えがあるのに、それをどう曲解したのか>490になって、 >491の質問を無視して>494みたいなこと言われても最早誰も対処できないぞ。
497 名前:デフォルトの名無しさん mailto:sage [2008/03/07(金) 07:12:46 ] もらった回答をすっ飛ばす奴の神経がわからんね。 漢字読むのが面倒臭いからって、上の行↑を「もらったをすっばすのがわからんね」と読んで 「うーん、さっぱりわかりません」とか一人で勝手に困ってるようなものだろ。
498 名前:デフォルトの名無しさん [2008/03/07(金) 08:49:37 ] どっちでもいいといえば どっちでもいいのですが、 現在ゲームを作ってまして、敵の動きを実装するのですが、 C言語で関数のポインタを保持し、タイミングが来たら 保持していた関数を呼び出すのと C++で、基本のクラスを用意し、それから派生してポリモーフィズムで呼び出すのと どちらが良いでしょうか 開発規模は個人なのでそれほど多くならないです、ですがまだ、仕様が決まってないのでなんともいえないのです。 なにが不満かというと Cだと 関数だらけになってしまう C++だと 開発に時間がかかったら保守が大変そうなことです
499 名前:デフォルトの名無しさん [2008/03/07(金) 09:01:36 ] 作ったことがないが、C++に一票
500 名前:デフォルトの名無しさん [2008/03/07(金) 09:03:21 ] 迷ったらC++。これ鉄則。
501 名前:デフォルトの名無しさん mailto:sage [2008/03/07(金) 10:54:41 ] >>498 Commandパターン or Callback by template
502 名前:デフォルトの名無しさん mailto:sage [2008/03/07(金) 11:07:04 ] くだらない質問で申し訳ありません。 namespace myname{ hogehogehoooge; }; //← namespace mymyname{ hagehagehaaage; } //← コンパイル自体はどっちでも通ったのですが、どっちが本来の文法的に正しいのでしょうか。
503 名前:デフォルトの名無しさん mailto:sage [2008/03/07(金) 11:25:44 ] コンパイラ的には上のセミコロンは空文があるってだけかと
504 名前:デフォルトの名無しさん mailto:sage [2008/03/07(金) 11:43:35 ] >503 なるほど、納得しました。
505 名前:デフォルトの名無しさん mailto:sage [2008/03/07(金) 13:33:34 ] 物凄くくだらない質問なのですが教えてください double x=1.0; int y = 10000; int z = y * x; この場合z=yって成り立つのでしょうか?
506 名前:デフォルトの名無しさん mailto:sage [2008/03/07(金) 13:36:02 ] >>505 成り立つよ 浮動小数点の誤差がどうとか言う観点だよな?
507 名前:デフォルトの名無しさん mailto:sage [2008/03/07(金) 13:57:06 ] はい、そうです ありがとうございました
508 名前:デフォルトの名無しさん mailto:sage [2008/03/07(金) 14:07:28 ] メンバに変数しかないクラス(ようするに構造体)を継承して、 それらのポインタをdynamic_castしたい場合、親クラスに virtualな関数を無理やり入れておくしかないのでしょうか?
509 名前:デフォルトの名無しさん mailto:sage [2008/03/07(金) 14:09:33 ] >>508 dynamic_castの意味分かって言ってる?
510 名前:デフォルトの名無しさん mailto:sage [2008/03/07(金) 14:10:34 ] >>508 手っ取り早く済ませたいならそうだね。 手間がかかってもいいなら、たぶん dynamic_cast の必要性を 見直したほうがいいんだろうけど。
511 名前:デフォルトの名無しさん mailto:sage [2008/03/07(金) 15:23:55 ] >>509 ,510 関数テーブルで引数が違う関数をまとめる場合に、 引数型を全部派生にして親クラスのポインタを 受け取るようにしとくと、キャストミスも無くて便利かなと 思ったんですが。 多分設計見直したほうが良いパターンなんでしょうね。
512 名前:デフォルトの名無しさん mailto:sage [2008/03/07(金) 15:49:54 ] デストラクタを仮想にしておけば良いんじゃないかな このパターンで自分もはまったな 引数に<list>をとるか可変長引数とか配列とか色々やり用はあるな
513 名前:デフォルトの名無しさん mailto:sage [2008/03/07(金) 16:23:58 ] >>511 つテンプレートの特殊化
514 名前:468 [2008/03/07(金) 16:44:37 ] www.borujoa.org/upload/source/upload17235.txt すみません。ド素人のプログラマですが、質問です。 なるべく上のファイルを利用してファイルソートを行いたいのですが、 これからどうすればいいのかわからず手が止まっております。 ソースではなく文章でいいので答えていただけますか? filesortがファイルをソートする関数部分です。 つまりVectorとsortを使って何とかしたいわけですが、 この書き方であると要素ごとでしかソートできません。 もちろん要素だけのソートはできました。 なんかあとちょっと弄ればできそうな気がするんですが、 僕の脳ではどうしようもありません。 どなたかご指導ください。 私的にはsetさえ使えば100人力じゃぁみたいな感じになるので、 setを使いたくありません。その点も含めてよろしくお願いいたします。 あとこのソース見て「ここをこうした方がいいのでは?」と思う人はご指摘ください。 よろしくお願いいたします。勉強になります。 開発環境:CentOS 5 コンパイラ:g++ コンパイルエラー:無し
515 名前:デフォルトの名無しさん mailto:sage [2008/03/07(金) 16:49:15 ] クラスについてさっぱりわかってないからこんなこと思うのかも知れませんが、 クラスの公開メンバ関数のアドレスを外部に教えてあげて、 そこから直接クラスの関数にアクセスすることってできますか? 具体的に言うと、Wik32APIでの、ウィンドウプロシージャに、クラスのメンバ関数を使いたいのですが…
516 名前:デフォルトの名無しさん mailto:sage [2008/03/07(金) 17:06:28 ] >514 filesortの中身をちらっと読んだだけ。 ・カンマ区切りを取り出す常套手段は 1:スペース記号、タブ記号をすべて別の文字列で一旦置換 2:カンマ記号をすべてスペースに置換 3:stringstreamに流し込んで >> を使って読み込む 4:1:で入れ替えてたのを元にもどす です。こうした方がいいです。 ・名前を入れ替えたいだけじゃないんですよね? 今のあなたのファイルは「名前データを取り出して、それをベクターに格納。そのベクターをソート」 している「だけ」ですよ。 あきらめてsetを使うか、set相当のものを自分で書くか、 そうでなければsort相当のものを自分で書いてください。 ・fin>>temp この部分は、もし入力ファイル中にスペースがあると困るのではないかと。 nameに「Richard Feynman」って入ったら、Richardで切れますけど、いいんですか? 一行取り出したいならgetlineを使いましょう。
517 名前:デフォルトの名無しさん mailto:sage [2008/03/07(金) 17:07:45 ] >>511 普通の関数は仮想にするなよ つEffective C++ 第38項 ダウンキャストはやめよう つEffective C++ 第39項 というかEffective C++を購入して一読する事を強く勧める。
518 名前:デフォルトの名無しさん mailto:sage [2008/03/07(金) 17:12:53 ] >>515 メンバ関数の実装は、クラスのポインタを引き渡していることが多い。 (thisポインタが引数としてわたっている)。 よって、関数ポインタを取ってきたところで、メンバ以外からマトモに使えません。
519 名前:デフォルトの名無しさん mailto:sage [2008/03/07(金) 17:31:14 ] >>513 511じゃないが参考までにどういう形で実装するのか教えてくれませんか? テンプレートを使った経験がないのでどういう風に使うのか見当がつきません
520 名前:452 mailto:sage [2008/03/07(金) 18:21:57 ] >>455-456 亀ですがレスthx Winsockと同時に使うから文字列をstd::stringじゃなくてchar*で使ってたんですが、 例外処理さえつければ>>452 のコードで大丈夫ですよね あと、>>455 のカマを掘られたって言うのがどうことかちょっと気になるんですが・・・
521 名前:デフォルトの名無しさん mailto:sage [2008/03/07(金) 19:07:56 ] >>518 やっぱ駄目なんですか。 共通プロシージャ用意してmapしたのを検索する方向で考えてみます。
522 名前:デフォルトの名無しさん mailto:sage [2008/03/07(金) 19:31:55 ] >>515 web.archive.org/web/20070810174250/http://techtips.belution.com/ja/vc/0009/
523 名前:デフォルトの名無しさん [2008/03/07(金) 19:42:31 ] >>521 staticなメンバ関数なら問題ない
524 名前:デフォルトの名無しさん mailto:sage [2008/03/07(金) 19:48:12 ] >>523 staticメンバ関数はstaticなメンバしかイジれないじゃん。
525 名前:デフォルトの名無しさん mailto:sage [2008/03/07(金) 20:31:15 ] >>524 そうだよ。単にクラスという名前空間に閉じ込め、 protected/privateにできるという程度の意味しかない。 どっかからインスタンスへのポインタを得て、非静的なメンバ関数を呼ぶのが 静的メンバ関数のウィンドウプロシージャの仕事。 >>522
526 名前:デフォルトの名無しさん [2008/03/07(金) 20:34:15 ] >>524 オブジェクトを作らずに呼び出そうとしてるんだからメンバなんていじる必要ない気が
527 名前:デフォルトの名無しさん [2008/03/07(金) 20:42:15 ] >>515 サンクという手法でウィンドウプロシージャを書き換えて、ウィンドウハンドルの代わりにthisをスタックに積んでメンバ関数にジャンプさせれば?
528 名前:デフォルトの名無しさん mailto:sage [2008/03/07(金) 20:47:14 ] boost::function
529 名前:デフォルトの名無しさん mailto:sage [2008/03/07(金) 21:35:51 ] >>528 どうやってやるのさ
530 名前:デフォルトの名無しさん mailto:sage [2008/03/07(金) 21:38:29 ] >>523-527 あ、オブジェクトではなく、クラスにひも付けすればよいのですね。 有り難うございました!
531 名前:デフォルトの名無しさん mailto:sage [2008/03/08(土) 01:39:03 ] とあるクラスの派生クラス郡の中で一つの派生クラスだけ 関数の引数が異なることになってしまいました こういう場合はどうしたらよいでしょうかorz
532 名前:デフォルトの名無しさん mailto:sage [2008/03/08(土) 01:51:31 ] 設計しなおす
533 名前:デフォルトの名無しさん mailto:sage [2008/03/08(土) 01:52:10 ] >>531 全クラスに引数増やすとか(そしてデフォルト引数をつけておくとか)、 その派生クラスだけ別のメンバ関数で余分の引数を設定しておくとか、 引数の集合を何かクラスにまとめて、上位の概念に置き換えることで引数を共通にするとか。
534 名前:デフォルトの名無しさん mailto:sage [2008/03/08(土) 01:53:54 ] dynamic_castしろと悪魔が囁いているぜ
535 名前:デフォルトの名無しさん mailto:sage [2008/03/08(土) 01:56:46 ] >531 1. きっとやりたいことが間違ってるから考え直す。 2. boost::any とか boost::variant とかでぶちかます。 まぁもう少しやりたいことを詳細に説明するべきだろうね。
536 名前:531 mailto:sage [2008/03/08(土) 02:14:02 ] とある計測器と連携して、とあるプロセスを監視してそのデータをモニタに表示するのですが 今回のプロセスだけ表示させたいパラメータの数が増えてしまいました 監視プロセスが複数同時に走っていて、そのうち3つを同時に表示するようにするため 表示対象をユーザーが切り替えられるようにするため 表示クラスに監視クラスのポインタをつかって保持させています 監視クラスに GetData(int OutputA, int dataB,int dataC) という関数をよういしていたのですが 最新の計器が監視できるパラメータが増えてしまって・・・orz
537 名前:デフォルトの名無しさん mailto:sage [2008/03/08(土) 02:22:28 ] >>536 そのシグニチャでGetだと言うのなら、参照かポインタ渡しじゃないの? まあそれはいいとして。 パラメータの種類を指定して、データを1種類だけGetする関数を作ったら?
538 名前:デフォルトの名無しさん [2008/03/08(土) 02:38:59 ] void calc(int& m, fstream* fio); int main(void) { fstream fio[10]; char filename[10]; int m, steps; steps = 7; fio[0].open("calc0.dat"); m = 1; while(m <= steps){ sprintf(filename, "calc%d.dat", m); fio[m].open(filename, ios::in | ios::out); m++; } m = 1; while(m <= steps){ calc(m, fio); m++; } return 0; }
539 名前:デフォルトの名無しさん [2008/03/08(土) 02:43:13 ] void calc(int& m, fstream* fio) { int i, j; int a, d[100]; j = 1; while(j <= 3){ fio[m-1] >> a; d[j] = a; j++; } j = 1; while(j <= 3){ fio[m] << d[j] <<' '<< j <<'\n'; j++; } } calc0.datの中身 5 16 77 基本的にすべてのデータファイルが同じになるようにプログラムを書いたのですが。 うまくいかないです。どこか間違っていますか?
540 名前:デフォルトの名無しさん [2008/03/08(土) 02:43:52 ] void calc(int& m, fstream* fio) { int i, j; int a, d[100]; j = 1; while(j <= 3){ fio[m-1] >> a; d[j] = a; j++; } j = 1; while(j <= 3){ fio[m] << d[j] <<' '<< j <<'\n'; j++; } } calc0.datの中身 5 16 77 基本的にすべてのデータファイルが同じになるようにプログラムを書いたのですが。 うまくいかないです。どこか間違っていますか?
541 名前:デフォルトの名無しさん mailto:sage [2008/03/08(土) 09:11:50 ] >>540 >どこか間違っていますか? あんたの説明。 結果がどうなったのか、どうなるつもりだったのか(これは全てcalc0.datと同じになるということか)、 実行した環境と処理系は何か、位のことは書いても罰は当たらんよ。
542 名前:511 mailto:sage [2008/03/08(土) 11:33:07 ] 昨日の続きなんですが、引数のの違う関数を まとめた関数テーブルって、どう実装するのが 良いでしょうか? >512のようにlistや可変長引数だと、個数が 違う場合には有効ですが、構造体を渡す場合には 無理があると思えます。 (構造体の要素をPOD型に分解してlist化するとか?) >513で書かれた特殊化では、どう実装するのかが 全く閃きませんorz キャストを使う以外で違った構造体やクラスを スムーズに(できれば低コストで)渡す方法ってあるのでしょうか?
543 名前:デフォルトの名無しさん mailto:sage [2008/03/08(土) 11:41:16 ] >>542 昨日の続きと言われても状況を把握するために過去に遡って読むのは面倒なので目的を詳しく。 まぁ、よくあるGUIライブラリの実装などでは構造体を丸ごと渡すのではなく汎用ポインタを渡す形が多いけどね。
544 名前:511 mailto:sage [2008/03/08(土) 11:42:33 ] なお今自分が使ってた方法だとこんな感じです。 class ArgBase { //引数親 public: virtual ~ArgBase(){}; } class Arg1 : public ArgBase { public: int arg; } //以下必要なだけArgBaseを引き継いだ構造体を作る //関数テーブル typedef bool(*pFunc)(ArgBase*) FUNCPTR; FUNCPTR fuctable[10]; fnctable[0] = Func1; //関数例 bool Func1(ArgBase *pArg) { //これがArg1が必要な関数なら Arg1 *ptr = dynamic_cast<Arg1*>(pArg); if(ptr == NULL) return FALSE; //処理 return TRUE; }
545 名前:デフォルトの名無しさん [2008/03/08(土) 15:49:36 ] 久しぶりにプログラムを組むのですが、初歩的なことが分からないので 教えてください。昔 float a; a=1.0 と1ではなく1.0にしなさいと教わったのですが、その詳しい理由を 忘れました。 どうしてなのでしょうか?
546 名前:デフォルトの名無しさん mailto:sage [2008/03/08(土) 15:56:19 ] >>545 1.0も中途半端だな。1.0fと書け。 1と書くとそれはint型になる。 1.0と書くとdouble型になる。 1.0fと書くとfloat型になる。 intやdoubleからfloatへの変換は警告が出る可能性があるので、 代入先と同じ型にしておけということ。生成される機械語は同じだろうけど。
547 名前:デフォルトの名無しさん mailto:sage [2008/03/08(土) 16:23:22 ] >>543 やはり間違わないように気をつけてvoid*で渡してキャストするのが 常套手段なんですかね。
548 名前:デフォルトの名無しさん mailto:sage [2008/03/08(土) 16:25:25 ] あと、 typedef bool(*pFunc)(ArgBase*) FUNCPTR; じゃなくて typedef bool(*FUNCPTR)(ArgBase*); でしたorz
549 名前:デフォルトの名無しさん [2008/03/08(土) 17:09:29 ] 現在、勉強がてらに、Windows用のクラスライブラリを無意味に作ってるのですが dynamic_castって良い機能ですねぇ 基本クラスに無意味に仮想関数を突っ込まなくても、派生クラスの機能が使えるなんて嬉しすぎる
550 名前:デフォルトの名無しさん mailto:sage [2008/03/08(土) 17:12:08 ] dynamic_cast禁止
551 名前:デフォルトの名無しさん mailto:sage [2008/03/08(土) 17:12:19 ] は?
552 名前:デフォルトの名無しさん mailto:sage [2008/03/08(土) 17:12:46 ] すげークラスライブラリきた
553 名前:デフォルトの名無しさん mailto:sage [2008/03/08(土) 17:24:08 ] 俺も今無意味にgtkのラッパークラスライブラリ作ってるよ! Window wnd("sample",MAIN_WINDOW); vBox box(MAIN_WINODW); Label sample_label("sample",MAIN_WINDOW); Button ok_button("OK",MAIN_WINDOW); CREATE(MAIN_WINDOW); ok_button.clicked(func); box << sample_label << ok_button; wnd << box; CONSTRUCT(MAIN_WINDOW); みたいにmain関数の中で書いたらコンパイルが通るようになるやつ。 今マニピュレーター実装中。
554 名前:デフォルトの名無しさん mailto:sage [2008/03/08(土) 17:26:54 ] これだから演算子多重定義が叩かれるわけだ。
555 名前:デフォルトの名無しさん mailto:sage [2008/03/08(土) 17:49:29 ] >>550 ごめんねごめんね(*‘ω‘ *) void __fastcall TForm1::N1Click(TObject *Sender) { TMenuItem* menu = dynamic_cast<TMenuItem*>(Sender); switch(menu->GroupIndex) { case 1: switch(static_cast<TSortDirection>(menu->Tag)) { case sortLarge: break; case sortSmall: break; } break; case 2: switch(static_cast<TLogOutputMode>(menu->Tag)) { case logList: break; case logSingleLine: break; } break; } UpdateTitle(); }
556 名前:デフォルトの名無しさん mailto:sage [2008/03/08(土) 18:05:19 ] Cらしいプログラムですなあw
557 名前:デフォルトの名無しさん mailto:sage [2008/03/08(土) 18:05:55 ] これなら適切にdynamic_castを使っている場面に見える。
558 名前:デフォルトの名無しさん mailto:sage [2008/03/08(土) 18:08:50 ] TForm1とかN1Clickとかいただけない
559 名前:デフォルトの名無しさん mailto:sage [2008/03/08(土) 18:17:40 ] すみません。えらく単純な質問なんですが、 C++で「なんでもいいからキーを押すと続行」 というのはどうすれば実現できるのでしょうか? 文字列や数字を読み取らせる方法は知ってますし、 ググればいくらでも出てくるのですが、 「いったん入力待ちしていかなるキーを押しても構わず実行」 という風にしたいのです。 もちろん数字読み取らせて適当な数+ENTERという風に組めば 手間が増えるだけで大体同じことはできるます。 しかし、あるデータの異常値の原因を調べるため、 異常のたびにそのデータをグラフにして打ち出させたいんですが たぶん三万回くらいやらなきゃならないんです・・・
560 名前:デフォルトの名無しさん mailto:sage [2008/03/08(土) 18:25:40 ] OSによる
561 名前:デフォルトの名無しさん mailto:sage [2008/03/08(土) 18:26:01 ] そこでpdcurses(ncurses)
562 名前:デフォルトの名無しさん mailto:sage [2008/03/08(土) 18:27:06 ] enterキーのみ反応でいいならgetchar()でもなんでもいけそうな気がする
563 名前:560 mailto:sage [2008/03/08(土) 18:33:28 ] ありがとうございます。getcharでいけました
564 名前:デフォルトの名無しさん [2008/03/08(土) 18:33:56 ] >546 ありがとうございます。 元がfloatなのにいらないお節介しなくても良さそうなのに。
565 名前:デフォルトの名無しさん mailto:sage [2008/03/08(土) 18:34:05 ] 559の間違いです。すいません
566 名前:デフォルトの名無しさん [2008/03/08(土) 18:46:22 ] msxml6.dllを使ってXMLのデータを取得しようと思っているのですが、 要素の属性の取り方だけ分かりません。 どのように取り出せばいいのでしょうか?
567 名前:デフォルトの名無しさん mailto:sage [2008/03/08(土) 18:48:37 ] >>564 >元がfloatなのにいらないお節介しなくても良さそうなのに。 大きな勘違いをしている悪寒。
568 名前:デフォルトの名無しさん mailto:sage [2008/03/08(土) 19:22:34 ] もうなんて言うか、初心者とかそういうレベルですらないんですけど、 昨日小一時間このミスに気づかなくてバグと死闘していたので… int a,c,x; unsigned int b; x = max(-c, min(x, a - b)); としたとき、 (a-b)がunsigned intとして評価されてしまうのですが、 こういうとき、オペレーターの戻り値の語ってどうやって決まるんですか? どこかの本では、大きい方に丸められるとか何とか書いてあった気がするんですが… 実際どのような規則になっているんでしょうか?
569 名前:デフォルトの名無しさん mailto:sage [2008/03/08(土) 19:30:35 ] >>568 算術型の標準変換、整数の格上げとか そんなもんどの本にも載ってるだろ。
570 名前:デフォルトの名無しさん mailto:sage [2008/03/08(土) 19:30:57 ] >>564 >元がfloatなのにいらないお節介しなくても良さそうなのに。 もとがdoubleの値(1.0)をおまいが勝手にfloat型の変数に入れようとしているのを コンパイラさんは(おせっかいかなと思いながらも)教えてくれようとしている。 レベルアップするためにも、人の忠告は素直に聞こうな。
571 名前:デフォルトの名無しさん mailto:sage [2008/03/08(土) 19:35:44 ] >>570 おまえはサル
572 名前:デフォルトの名無しさん mailto:sage [2008/03/08(土) 19:37:00 ] サルなら反省できる
573 名前:デフォルトの名無しさん mailto:sage [2008/03/08(土) 19:43:39 ] >>570 お前・・・なんという読解力のなさ・・
574 名前:デフォルトの名無しさん mailto:sage [2008/03/08(土) 19:46:59 ] >>570 の言うことは間違ってないような・・・
575 名前:デフォルトの名無しさん mailto:sage [2008/03/08(土) 19:48:09 ] >>570 は正しい事を言っている気がするが オレも読解力がないのだろうか
576 名前:デフォルトの名無しさん mailto:sage [2008/03/08(土) 19:53:38 ] 皆無
577 名前:デフォルトの名無しさん mailto:sage [2008/03/08(土) 19:54:05 ] レスをたどると元々は float a = 1; のような気がする
578 名前:デフォルトの名無しさん mailto:sage [2008/03/08(土) 19:59:33 ] >>577 それだとfloat変数の初期化だよね。 もともとは以下のようにfloat←doubleの代入だったはず。 >float a; >a=1.0
579 名前:デフォルトの名無しさん mailto:sage [2008/03/08(土) 20:08:18 ] >>569 持ってる本は2冊ともunsignedまでは書いてないんだが… 駄目なの使ってるのね…(一つは学校指定だけど) 算術型 標準変換 でググったら見つかりました、有り難う。 long double > double > float > unsigned long int > long int > unsigned int > int int > unsigned int だとばっかり思ってた。 (表現力が大きい方に…ってかいてあるからマイナスが表現できる方が上なのかと… よく考えてみたら、表現できる値の絶対値はunsignedの方が大きいけど。)
580 名前:デフォルトの名無しさん mailto:sage [2008/03/08(土) 20:15:02 ] >>566 DOMだったら、selectNodesとかselectSingleNodeとかを使えばいいよ。
581 名前:デフォルトの名無しさん [2008/03/08(土) 21:20:47 ] >578 最初に書き込んだものです。 多分みなさんが思っているよりもっと初歩的なことが 分かっていないのだと思います。 正直doubleとfloatの違いが精度の違いでfloatがメモリ確保の ためだけに使われるぐらいにしか考えていません。 情報落ちや桁落ちの問題でここまでするのでしょうか? 正しい解釈はこうですか? int a; float b; double c; a=1; b=1.0f; c=1.0;