1 名前:デフォルトの名無しさん mailto:sage [2007/12/08(土) 14:09:22 ] エスケープシーケンスやWin32APIなどの環境依存なものでもOK。 ただしその場合、質問者は必ず環境を書きましょう。 ※sage禁止です(と代々スレに書いてありますが自己判断で)。 【前スレ】 【初心者歓迎】C/C++室 Ver.44【環境依存OK】 pc11.2ch.net/test/read.cgi/tech/1194016813/ 【アップローダー】(質問が長い時はココ使うと便利) kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.htm
445 名前:デフォルトの名無しさん mailto:sage [2007/12/17(月) 23:52:34 ] >>443 例えば80486以降のインテル系CPUはSTOSB STOSW STOSDという三つの命令があり、 それぞれバイト、ワード、ダブルバイト単位でレジスタから転送を行う。 他のCPUでもサイズに応じた専用のインストラクションを持っていることはよくある。 そのどれを使うかとかいったヒントになる可能性があると思う。
446 名前:デフォルトの名無しさん mailto:sage [2007/12/17(月) 23:53:00 ] clear?
447 名前:445 mailto:sage [2007/12/17(月) 23:53:15 ] ダブルバイトってなんだよ。ダブルワードの間違いな。
448 名前:デフォルトの名無しさん [2007/12/17(月) 23:56:16 ] >>445 なるほど。ありがとうございます。 しかしその程度なら、要求されたサイズの下位数ビットを見れば判断できる気もするが・・・。
449 名前:デフォルトの名無しさん mailto:sage [2007/12/18(火) 00:05:43 ] >>443 callocは一応「配列を確保する関数」だからじゃない? 最適化に関しては↓がヒントになるかも。 www.bohyoh.com/CandCPP/FAQ/FAQ00096.html
450 名前:デフォルトの名無しさん [2007/12/18(火) 00:09:54 ] >>449 最適化については何も解説していないような・・・
451 名前:デフォルトの名無しさん mailto:sage [2007/12/18(火) 01:03:49 ] >>420 ファンダメンタルかよ
452 名前:デフォルトの名無しさん [2007/12/18(火) 02:16:52 ] signed型へ<<や>>演算したときの結果の符号ビットや符号拡張有無って 規格で決まっていますか?
453 名前:デフォルトの名無しさん mailto:sage [2007/12/18(火) 02:32:06 ] >>452 いいえ。
454 名前:デフォルトの名無しさん [2007/12/18(火) 09:57:37 ] C++ 初心者です。C++ でこんなコードを見かけたのですが、 struct S { S( int x ) : x_( x ) {} int x() { return x_; } int x_; }; 2 行目の意味がわかりません。とくに x_( x ) {} の部分が頭の中でパーズできないんですが、これは何を定義しているの?
455 名前:デフォルトの名無しさん mailto:sage [2007/12/18(火) 09:59:38 ] : x_( x ) だな x_をxで初期化している コンストラクタ初期化子とかでぐぐると幸せになるかも
456 名前:デフォルトの名無しさん mailto:sage [2007/12/18(火) 10:37:10 ] この書き方で「2行目の意味が」ってのも凄いな ナチュラルな喧嘩の売り方するなぁと感心したw
457 名前:デフォルトの名無しさん mailto:sage [2007/12/18(火) 10:42:22 ] コンストラクタの初期化子で配列の初期化ってできる?
458 名前:デフォルトの名無しさん mailto:sage [2007/12/18(火) 11:07:46 ] >>457 組み込み配列についてはできません。 std::vector ならできます。
459 名前:デフォルトの名無しさん mailto:sage [2007/12/18(火) 11:26:54 ] >>458 ありがとう じゃあコンストラクタ内で普通に代入するか もう一つ質問 固定長配列にvectorを使う意味ってある? あるとしたら何?
460 名前:デフォルトの名無しさん mailto:sage [2007/12/18(火) 11:34:14 ] >>459 サイズの管理も一緒にしてくれる。 未来永劫何があってもサイズが変わらない場合を除けば、この利点は小さくない。
461 名前:デフォルトの名無しさん mailto:sage [2007/12/18(火) 11:35:23 ] >>459 多くの実装では assert() などでデバッグ用の範囲チェックが入っている。 begin(), end() があるので標準アルゴリズムが使いやすい。 要素の比較に基づく比較演算子が定義されている。 安全で軽い swap() が使える。
462 名前:デフォルトの名無しさん mailto:sage [2007/12/18(火) 12:02:09 ] C言語でvoid型の関数を任意の場所で終了させるにはどうすればいいのでしょうか? 何か値を返せる関数ならreturnすればいいと思うのですが voidなのでreturnをすると怒られてしまいました
463 名前:デフォルトの名無しさん mailto:sage [2007/12/18(火) 12:04:39 ] return;
464 名前:デフォルトの名無しさん mailto:sage [2007/12/18(火) 12:05:52 ] >>462 void func(){ return; }
465 名前:デフォルトの名無しさん mailto:sage [2007/12/18(火) 12:09:42 ] >>462 void func() { ...; goto end; ...; end: } or void func() { ...; if (0) { ...; } }
466 名前:デフォルトの名無しさん mailto:sage [2007/12/18(火) 12:15:41 ] >>460-461 サンクス
467 名前:デフォルトの名無しさん mailto:sage [2007/12/18(火) 12:16:11 ] ああ、なるほど 値さえ返さなきゃ怒られないんですね 0を返しておりました
468 名前:デフォルトの名無しさん mailto:sage [2007/12/18(火) 12:20:25 ] >>460 static const int foo[] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; みたいな固定長配列なら、sizeof(foo) / sizeof(* foo)でsize()相当だと思うが、それでもメリットだと?
469 名前:デフォルトの名無しさん mailto:sage [2007/12/18(火) 12:23:26 ] STLのコンテナとして使える
470 名前:デフォルトの名無しさん mailto:sage [2007/12/18(火) 12:26:16 ] boost::array
471 名前:デフォルトの名無しさん mailto:sage [2007/12/18(火) 12:50:19 ] じゃあそれポートして使いまする
472 名前:デフォルトの名無しさん mailto:sage [2007/12/18(火) 12:51:25 ] 固定長配列テンプレートはいいよね 余分な領域取らないし
473 名前:デフォルトの名無しさん mailto:sage [2007/12/18(火) 12:59:15 ] boost::checked_deleteってそんなに役に立つか?
474 名前:デフォルトの名無しさん mailto:sage [2007/12/18(火) 13:03:58 ] 初心者でも何か作れる物はないだろうか?
475 名前:デフォルトの名無しさん mailto:sage [2007/12/18(火) 13:05:18 ] >>474 アドレス帳 ノベルゲーム etc
476 名前:デフォルトの名無しさん mailto:sage [2007/12/18(火) 13:07:47 ] >>475 ノベルゲームを作れるお勧めのwindows上で動く アプリとかありませんかね。
477 名前:デフォルトの名無しさん mailto:sage [2007/12/18(火) 13:20:59 ] C言語でいいじゃん printfとscanfで作れるぞ
478 名前:デフォルトの名無しさん mailto:sage [2007/12/18(火) 13:25:14 ] おまえらって何が目的でC言語使ってんの?
479 名前:デフォルトの名無しさん mailto:sage [2007/12/18(火) 13:29:21 ] >>473 なんで役に立たないと思うの? あと、 boost スレに行ったほうがいいかもね。
480 名前:デフォルトの名無しさん mailto:sage [2007/12/18(火) 13:45:48 ] >>478 プログラミングするのが楽しいから
481 名前:デフォルトの名無しさん mailto:sage [2007/12/18(火) 15:18:50 ] まともに仕事で使おうとすると、 boostなんてフリーのライブラリは、 使用許可がおりない件について 誰が責任もてるの、って怒られるぜよ
482 名前:デフォルトの名無しさん mailto:sage [2007/12/18(火) 15:34:04 ] boostからポートした自作ライブラリを使うんだよ
483 名前:デフォルトの名無しさん mailto:sage [2007/12/18(火) 15:36:43 ] それを言い出すと、gccや下手すればLinuxそのものも使えなくなる罠。
484 名前:デフォルトの名無しさん mailto:sage [2007/12/18(火) 15:41:40 ] >>483 プロジェクトの種類や客の流儀とかなんとかで、 そのとおりな制約がつく仕事も実際、けっこうある。 ・・・いや、あった。もう地獄から永久に開放されて こんな時間に2chしてる俺にはどうでもいい話
485 名前:デフォルトの名無しさん [2007/12/18(火) 15:46:46 ] 参照のつかいかたがよくわからないので教えてください。POCO::Loggerというライブラリをつかっています。 hasがLoggerのポインタを返して、getが参照を返します。createで作ります。 POCO::Logger* buff = POCO::Logger::has("hoge"); if (buff == NULL) { // 無いから作る POCO::Logger& logger = POCO::Logger::create("hoge"); logger.information("@@@@@"); } else { // あるから使う POCO:Logger& logger = POCO::Logger:get("hoge"); logger.information("@@@@@"); } // @ほんとはここでlogger.information("@@@@@")にして、↑の@@@@@出力部分は消して共通化したい というコードは動くんですが、最終行で出力する処理を入れて 共通化したいんですけど、参照ってポインタみたいにいれないでおくとかができないと思っています。 このような実装はみなさんどのようにされていますか?
486 名前:デフォルトの名無しさん mailto:sage [2007/12/18(火) 15:51:11 ] >>481 フリーとは言っても誰が作ってると思う? 使用許可を出さない奴本人に 『おまえが判断できる程のレベルかよ?』 って言い返す。
487 名前:デフォルトの名無しさん mailto:sage [2007/12/18(火) 15:52:29 ] >>479 不完全型のチェックにしか使えないよね。 全く役に立たないとは思わないけど、あえて使う意味はあるのかと。
488 名前:デフォルトの名無しさん mailto:sage [2007/12/18(火) 16:13:45 ] >>485 POCO::Logger & logger = buff == NULL ? POCO::Logger::create() : POCO::Logger::get(); logger.information();
489 名前:デフォルトの名無しさん [2007/12/18(火) 16:22:40 ] >>488 ぉぉすばらしい。ありがとうございます。そのような発想はありませんでした。 ちょっとトリッキーな気がするのですが、C++で参照を使うときは常識ですか?
490 名前:デフォルトの名無しさん mailto:sage [2007/12/18(火) 16:45:28 ] C++と言わず参照と言わず、割と使うけど。 Cでもこんなのとか。 FILE * fp = fileName == NULL ? stdin : fopen(fileName, "r");
491 名前:デフォルトの名無しさん mailto:sage [2007/12/18(火) 17:52:49 ] >>490 の FILE * fp = fileName == NULL ? stdin : fopen(fileName, "r"); って どのように分解(解釈)されるの?
492 名前:デフォルトの名無しさん mailto:sage [2007/12/18(火) 17:57:10 ] >>491 fileNameがNULLだったらstdin、そうでなければfileNameをfopen()した結果をfpに代入。
493 名前:デフォルトの名無しさん mailto:sage [2007/12/18(火) 18:05:23 ] >>492 有難うございます。日本語ではそうなるのですか。 すみません、この1行をC言語に1行ごと(ステップ)に分解して書いたらどうなるのですか?
494 名前:デフォルトの名無しさん mailto:sage [2007/12/18(火) 18:11:18 ] FILE *fp ; if( fileName == NULL ) { fp = stdin ; } else { fp = fopen(fileName,"r"); }
495 名前:デフォルトの名無しさん mailto:sage [2007/12/18(火) 18:12:19 ] まあ、参照は初期化必須だから、>>488 を分割して書く事は出来ないがな。
496 名前:デフォルトの名無しさん mailto:sage [2007/12/18(火) 18:12:26 ] FILE * fp = fileName == NULL ? stdin : fopen(fileName, "r");
497 名前:デフォルトの名無しさん mailto:sage [2007/12/18(火) 18:13:39 ] boost::optionalをパクればいい
498 名前:デフォルトの名無しさん mailto:sage [2007/12/18(火) 18:23:44 ] >>494 有難うございました そうなるのですか、なんか>>490 だと読みにくいですね >>495 となると、参照のときは読みにくい構文使うしかないということですね
499 名前:デフォルトの名無しさん mailto:sage [2007/12/18(火) 18:56:32 ] >>498 俺が三項演算子を使うときは、条件部を必ず(単項式であっても)括弧で括ってる。 >>490 の例の場合は、 FILE * fp = (fileName == NULL) ? stdin : fopen(fileName, "r"); まぁ、この辺は各々のスタイルの問題。 読みにくさについては内容の複雑さによりけりで、たとえば int n = (hoge) ? 10 : 20; 程度の内容をif-else文で書くと、俺の感覚だと「無駄に物々しい」感じがして、逆にわかりにくいかな。
500 名前:デフォルトの名無しさん mailto:sage [2007/12/18(火) 19:12:34 ] 三項演算子は禁止、 って、けっこうコーディングルールにされることが多い
501 名前:デフォルトの名無しさん mailto:sage [2007/12/18(火) 19:18:45 ] 生粋の三項演算子erな漏れには辛い職場だ
502 名前:デフォルトの名無しさん mailto:sage [2007/12/18(火) 19:29:24 ] >>498 こんなんでもいんじゃね? POCO::Logger* buff = POCO::Logger::has("hoge"), *logger; if (buff == NULL) { // 無いから作る logger = &POCO::Logger::create("hoge"); } else { // あるから使う logger = &POCO::Logger:get("hoge"); } logger->information("@@@@@"); というかhas()が返すアドレスの実体はgetで得られるインスタンスとは別物なん? 同一ならそのまま使えるだろうけど
503 名前:デフォルトの名無しさん mailto:sage [2007/12/18(火) 19:29:27 ] ff
504 名前:デフォルトの名無しさん mailto:sage [2007/12/18(火) 19:36:13 ] 例外処理のthrowのメリットは? 普通に関数にとばすのはだめなのかい
505 名前:デフォルトの名無しさん mailto:sage [2007/12/18(火) 20:21:22 ] 普通に関数に飛ばすとは、どういうやり方? throwは関数の呼び出し元の呼び出し元の呼び出し元の・・・にずーっと遡っていけるところに意味がある
506 名前:デフォルトの名無しさん mailto:sage [2007/12/18(火) 20:23:41 ] 昔のCのように、abort()を呼ぶとかそういう話?
507 名前:デフォルトの名無しさん mailto:sage [2007/12/18(火) 20:53:58 ] >>504 の考える例外的な事態というのは、その場でプログラムを終了するタイプ「のみ」なんじゃないかな。 確かに、すぐ終了するのであれば、例外処理の存在意義である「簡潔かつ強力に特定の段取りまで戻る」 能力は要らないからね。 >>504 でも、例外発生後もまだプログラムを続行させる場合、「関数に飛ばして」例外処理を実現しようとすると、 結構面倒というか、入り組んでしまうことがある。 f1()から呼んだf2()から呼んだf3()から呼んだf4()の中で何か「例外的な状態」になった場合、f4()内に if (失敗したという証拠) { 例外処理(); return 失敗したという合図; } を書くだけでなく、場合によってはf2()やf3()も、その「合図」がちゃんとf1()のもとへ帰っていけるよう、 バケツリレーのような構造の実現に協力しなくちゃならなくなったりするわけだ。 その例外は、自分とは直接関係ないことなのにね。
508 名前:デフォルトの名無しさん mailto:sage [2007/12/18(火) 21:01:10 ] ただやっぱり、Joelもいってるように、例外はきちんと ハンドリング出来ているかが、コード面を眺めたくらいでは すぐには判らないという弱点があるね。 戻り値ベース: fp = fopen(filename, "w"); fwrite( var, 1,len,fp ); //ププ。エラー処理忘れやがんの。 例外ベース: fs = new FileStream( filename, WRITE ); fs.Write( var ); //ファイル無かったら例外投げるから、 //呼ぶ側で対処しろと言うことかな〜?
509 名前:デフォルトの名無しさん mailto:sage [2007/12/18(火) 21:07:30 ] >>420 インターフェースが結構違うのでわからないんです 参考に見た6.0の解説を上げてみると 〜〜〜 左フレームのFileメタブをクリックして、Source FileのGlSampleView.cppファイルを開く 右のフレームに現れるソースファイル上で、右クリック。表示メニューのClassWizardを選択する←この時点で分からない ここでViewクラスのメッセージ処理をカスタマイズする。 メッセージ欄から「WM_CREATE」を選択して関数追加ボタンをクリックする。 するとOnCreate()関数がGlSampleView.cppファイルに自動的に追加される。 〜〜〜 クラスウィザードのようなものは別の方法で見つけたんですがすると4行目のWM_CREATEが無い といったように前に進みません
510 名前:339 mailto:sage [2007/12/18(火) 22:32:05 ] 1>index.obj : error LNK2019: 未解決の外部シンボル "public: __thiscall std::ios_base::Init::Init(void)" (??0Init@ios_base@std@@QAE@XZ) が 関数 "void __cdecl std::`dynamic initializer for '_Ios_init''(void)" (??__E_Ios_init@std@@YAXXZ) で参照されました。 1>index.obj : error LNK2019: 未解決の外部シンボル "public: __thiscall std::ios_base::Init::~Init(void)" (??1Init@ios_base@std@@QAE@XZ) が 関数 "void __cdecl std::`dynamic atexit destructor for '_Ios_init''(void)" (??__F_Ios_init@std@@YAXXZ) で参照されました。 1>D:\ta\c\works\online\Debug\dos.exe : fatal error LNK1120: 外部参照 2 が未解決です。 ===index.cpp==== #include <iostream> int main() { std::cout << "Kitty on your lap"; return 0; } =============== /O2 /D "_MBCS" /FD /EHsc /MT /Fo"Debug\\" /Fd"Debug\vc80.pdb" /nologo /c /TP /errorReport:prompt /OUT:"D:\ta\c\works\online\Debug\dos.exe" /NOLOGO /MANIFEST /MANIFESTFILE:"Debug\dos.exe.intermediate.manifest" /SUBSYSTEM:CONSOLE /ERRORREPORT:PROMPT kernel32.lib リンクがうまくいってないってことかな? ちゃんとライブラリフォルダをC:\Program Files\Microsoft Platform SDK\Libに設定しているのだが・・。
511 名前:デフォルトの名無しさん mailto:sage [2007/12/18(火) 23:00:25 ] たまに見かけるけとKitty on your lapて何なん? 調べてみたらゲームみたいだけどあれが元ネタ?
512 名前:デフォルトの名無しさん mailto:sage [2007/12/18(火) 23:35:44 ] >>510 iostreamってSDKじゃないだろ。
513 名前:デフォルトの名無しさん mailto:sage [2007/12/18(火) 23:36:20 ] 猫でも分かるの人がサンプル文字列に使ってたな。 さらなる元ネタはよくわからないが。
514 名前:デフォルトの名無しさん mailto:sage [2007/12/19(水) 00:07:13 ] 古いギャルゲーのタイトル
515 名前:デフォルトの名無しさん mailto:sage [2007/12/19(水) 01:29:06 ] 問題分が 以下の手順を従い、経路選択アルゴリズムを評価せよ。 通信の発生:ランダムに送受信ノードを決定する。 通信の確定:与えられた送受信ノードの経路を決定し、その経路上のリンクの空き容量を1Mbpsだけ減少させる。 ただし、空き容量のないリンクが存在する場合、この通信は確立しなかったものとして、何も行わない。 通信の終了:n回前に発生した通信の経路上の空き容量を1Mbpsだけ増加させる。ただし、その通信が確立していなかった場合には何も行わない。 評価:10000回の通信を発生させ、そのうちで確立できなかった通信の割合を求める。 試行の繰り返し:nの値を変えながら、上記の試行を繰り返す プログラム自体(kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5554.txt )は拾ってこれたのですが どこにグラフを入力していいのか分からなく困っています。 ちなみにグラフは以下に書きます kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5555.txt 左と中央がノードで右がそれをつなぐリンクの容量です。
516 名前:デフォルトの名無しさん mailto:sage [2007/12/19(水) 01:38:58 ] 宿題スレへ
517 名前:デフォルトの名無しさん mailto:sage [2007/12/19(水) 02:08:39 ] >>508 戻り値だってコード面見てエラー処理の抜けは気づきにくい。 Joel とかが言ってるのは、エラー処理に問題のあるコードと 適切なコードとの違いが微妙すぎるって言う問題。まぁこっちの問題も 一緒といえば一緒なんだけどな。処理の順番とか。
518 名前:デフォルトの名無しさん mailto:sage [2007/12/19(水) 09:00:37 ] VC++ 2005での関数インライン化について教えてください。 通常、インライン関数は定義をヘッダに書かないとコンパイル できませんが、/LTCGオプションでリンク時のモジュール間 インラインを指定すると以下のようなコードがビルド可能 だと思ったのですが、実際はリンクエラーとなります。 もちろんinlineキーワードを外すとビルドできます。 /LTCGを指定してもinlineキーワードを付けるとインライン 対象関数の定義は呼び出しソースファイルから可視でなくて はいけないのでしょうか?/LTCGのリンク時モジュール間 インラインの正しい使用法を教えてください。 //aaa.hヘッダーファイル double MySquare(double); //aaa.cppソースファイル inline double MySquare(double d) { return d * d; } //bbb.cppソースファイル #include "aaa.h" int main() { double d = MySqiare(3.14); }
519 名前:デフォルトの名無しさん [2007/12/19(水) 09:15:43 ] よく空間的局所性の高いコードは速いとかいいますけど、最近のx86で あるアドレスの値を読み込むと、その先何バイト位がキャッシュに載るんですか?
520 名前:デフォルトの名無しさん mailto:sage [2007/12/19(水) 09:46:40 ] VC8(VC2005)で template<class T> std::list<T>::iterator MoveListItr(std::list<T> *pLst) 〜略〜 というSTLのイテレータを返すテンプレートが、イテレータの記述部分 (std::list<T>::iterator)で「型ではない」とエラーが出ます。 VC7まではこれで通ったのですが、文法に問題があるのでしょうか? それともVCの問題なのでしょうか?
521 名前:デフォルトの名無しさん [2007/12/19(水) 09:53:01 ] template<class T> typename std::list<T>::iterator MoveListItr(std::list<T> *pLst)
522 名前:デフォルトの名無しさん mailto:sage [2007/12/19(水) 10:00:51 ] >>520 typename std::list<T>::iterator MoveListItr(std::list<T> *pLst) って書けばいいんじゃないかな。 いわゆる特殊化ってやつがあるせいで、classname<T>::hogeという記述だけでは、 hogeが値なのか型名なのか断定できない。 そういう場合、「これは型名ですよ」というのをコンパイラに教えるために、typenameを書く。 今回のVC7と8の違いは、「ここは関数の戻り値の型を書く場所だから、型名に決まってるよな」 とコンパイラが判断したか否か、の違いだと思うんだけど、 VC7の気が利いているのか、VC8が「VC7が無視した何らかの可能性」を見て断定を避けたのか、 どっちなのかは俺にはわからないや。
523 名前:デフォルトの名無しさん mailto:sage [2007/12/19(水) 10:03:56 ] 単に規格に準拠するようにしただけじゃねえの?
524 名前:デフォルトの名無しさん [2007/12/19(水) 10:12:15 ] >いわゆる特殊化ってやつがあるせいで 特殊化は無関係
525 名前:デフォルトの名無しさん mailto:sage [2007/12/19(水) 10:13:50 ] >>521-523 なるほど、そうだったんですか。 おかげで解決しました、ありがとうございます。
526 名前:りょう ◆RyOrlro88Q [2007/12/19(水) 10:46:02 ] ループが止まりません>< #include<stdio.h> #define N 20 main(){ char ch[N],a,word='^'; int num,i,j; j=0; printf("Input your name.(When the input is finished,type ^.)\n"); for(num=0;ch[num]!=word;num++){ printf("ch[%d]=",num); scanf(" %s",&ch[num]); } printf("target:"); scanf(" %c",&a); for(i=0;i<num;i++){ if(ch[i]==a){ j++; } printf("%c=%d\n",a,j); } }
527 名前:デフォルトの名無しさん mailto:sage [2007/12/19(水) 11:04:06 ] >>526 最初のループの終了条件がおかしい。
528 名前:りょう ◆RyOrlro88Q mailto:sage [2007/12/19(水) 11:09:43 ] ループは自己解決>< 次は判定に問題が…><
529 名前:りょう ◆RyOrlro88Q [2007/12/19(水) 11:30:49 ] jが増えない>< #include<stdio.h> #define N 20 main(){ char ch[N],a,word='^'; int num,i,j; j=0; printf("Input your name.(When the input is finished,type ^.)\n"); for(num=0;ch[num]!=word;num++){ printf("ch[%d]=",num); scanf(" %s",&ch[num]); if(ch[num]==word){ break; } } printf("target:"); scanf(" %c",&a); for(i=0;i<num;i++){ if(ch[i]==a){ j++; } } printf("%c=%d\n",a,j); }
530 名前:デフォルトの名無しさん mailto:sage [2007/12/19(水) 11:34:56 ] ちったあ自分で考えないと成長しないぜ
531 名前:りょう ◆RyOrlro88Q [2007/12/19(水) 11:40:58 ] 考えてるけどわからないんです><
532 名前:デフォルトの名無しさん mailto:sage [2007/12/19(水) 11:43:39 ] >>528 他にも色色問題が。scanf()で一文字ずつ入力なんて阿呆なことしないで、 fgets()で1行分まるっと入力してしまえばいいじゃん。 あと、'^'による終了判定も無意味。
533 名前:デフォルトの名無しさん mailto:sage [2007/12/19(水) 11:45:26 ] つーか、>529ではループの判定条件がバグったままじゃんw
534 名前:デフォルトの名無しさん mailto:sage [2007/12/19(水) 11:46:26 ] 何故増えないんだと思う? 具体的な場所はともかく、どの辺が間違ってそうな気がする? 本当はデバッガを使うのが良いんだろうが、printfデバッグっていう手法だってある。 それっぽい箇所にprintfを挿入するだけで見えてくるかもよ。
535 名前:デフォルトの名無しさん mailto:sage [2007/12/19(水) 11:47:57 ] ブロックの前後や中で満たすべき条件を式のかたちで書き出してみてはどうか
536 名前:デフォルトの名無しさん mailto:sage [2007/12/19(水) 11:51:01 ] 紙と鉛筆使って机上でプログラムを実行してみるのもいい。 どこで意図しない動作になっているかすぐ分かる。
537 名前:デフォルトの名無しさん mailto:sage [2007/12/19(水) 11:53:22 ] >>518 について詳しい人いませんか?
538 名前:りょう ◆RyOrlro88Q [2007/12/19(水) 11:57:29 ] 解決できました>< ありがとうございましたm(__)m >>532 それが指定なんですよ>< >>534 そんな方法なんて知りませんでした><
539 名前:デフォルトの名無しさん mailto:sage [2007/12/19(水) 12:01:09 ] ほほぉ。それじゃ、スレよごしの罰として完成したソースを貼ってもらおうか。
540 名前:デフォルトの名無しさん mailto:sage [2007/12/19(水) 12:06:58 ] >>118 ttp://ml.tietew.jp/cppll/cppll/thread_articles/11083#ar11086
541 名前:デフォルトの名無しさん mailto:sage [2007/12/19(水) 12:07:22 ] >>537 inline指定無しでも最適化でインライン展開してくれるんじゃないの? 明示的にinline指定したい積極的な理由でもあるなら兎も角、そうでないならコンパイラに任せたら? つーか、iccだとinline指定をつけると却ってコンパイラが混乱するみたいだ。
542 名前:デフォルトの名無しさん mailto:sage [2007/12/19(水) 12:11:03 ] >>540 番号間違ってる。 しかし、そのリンク先のエピたんの弁によれば、 inline指定してある関数を別の翻訳単位から見つけてくるiccはおかしなことになるね。
543 名前:デフォルトの名無しさん mailto:sage [2007/12/19(水) 12:22:09 ] 7.1.2.4を見てextern inlineにしたら通った
544 名前:デフォルトの名無しさん mailto:sage [2007/12/19(水) 13:00:43 ] // aaa.h extern inline double MySquare(double); // aaa.cpp double MySquare(double d){...} // main.cpp #include "aaa.h" int main() { double d = MySquare(3.14); } 一応gcc3.4とvc8でいけた external linkageなinline指定つきの関数宣言がどうたらこうたら書いてあるけど理屈はよくわかんね
545 名前:デフォルトの名無しさん mailto:sage [2007/12/19(水) 13:28:11 ] >>540 >>541 >>542 >>543 ストラップ本にはinline定義とあるので、おそらく 無理なんでしょうね。 extern inline定義にしたらVC 2005では実行できましたが、 g++ v4では無理でした。移植性考えたらやはり素直にヘッダーに 定義を書いたほうが無難ですね。