- 1 名前:デフォルトの名無しさん [2007/06/03(日) 22:33:55 ]
- エスケープシーケンスやWin32APIなどの環境依存な物でもOK。
ただしその場合、質問者は必ず、環境を書きましょう。 ※sage禁止です。 【前スレ】 【初心者歓迎】C/C++室 Ver.37【環境依存OK】 pc11.2ch.net/test/read.cgi/tech/1178432985/l50 【アップローダー】(質問が長い時はココ使うと便利) kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.htm
- 348 名前:デフォルトの名無しさん [2007/06/11(月) 13:16:15 ]
- >>342
>>347 なるほど、基底クラスの関数は、指定しなければ 引数がないものが呼ばれるということでしょうか? 今になって、342の書き込みの意味が少しわかりました。
- 349 名前:デフォルトの名無しさん mailto:sage [2007/06/11(月) 13:19:25 ]
- >>348
コピーする必要がなければコピーコンストラクタが呼ばれないのは蓋し当然。
- 350 名前:デフォルトの名無しさん [2007/06/11(月) 13:25:20 ]
- >>349
でも、コピーコンストラクタが呼ぶ基底クラスの関数は デフォルトでは、基底クラスのコピーコンストラクタになっている のだろうと思っていました。 (はっきりと意識していたわけではないですが。)
- 351 名前:342 mailto:sage [2007/06/11(月) 13:48:27 ]
- コンストラクタの呼び出し方は独学でやってると大抵詰まる。
>>342にしても、B(int) が自動的に A(int) を呼んでくれるものと 勝手に思い込んでたし(それもかなり長いこと)。 一度分かってしまえばなんてことはない話なんで、まあ頑張れ。
- 352 名前:デフォルトの名無しさん mailto:sage [2007/06/11(月) 21:21:19 ]
- string::find と string::find_first_of 、
string::rfind と string::find_last_of って、 どう違うの? 同じ?
- 353 名前:デフォルトの名無しさん mailto:sage [2007/06/11(月) 21:23:36 ]
- rの有無、firstかlastかの違い
begin側から探し始めるかeng側から探し始めるかの違い
- 354 名前:デフォルトの名無しさん mailto:sage [2007/06/11(月) 21:52:19 ]
- ごめん。左右の比較の話。
解説を穴が空くほど読んだら 全然違う関数と分かった。
- 355 名前:デフォルトの名無しさん mailto:sage [2007/06/12(火) 14:27:03 ]
- ostringstream って、flush も endl もしないで str 呼んだら
不完全なまま出力されることってあるの? 大丈夫だって保証があればいいんだけど。
- 356 名前:デフォルトの名無しさん [2007/06/12(火) 18:12:14 ]
- VC.NETでビルドしたときに、そのビルドした日時をEXEファイルに
何らかの方法で埋め込みたいのだけれど、どうしたらいいかしら?
- 357 名前:デフォルトの名無しさん mailto:sage [2007/06/12(火) 18:15:59 ]
- __DATE__ と __TIME__
- 358 名前:デフォルトの名無しさん [2007/06/12(火) 18:23:26 ]
- >357
感謝するわよ。
- 359 名前:デフォルトの名無しさん [2007/06/12(火) 18:34:03 ]
- もう一つ教えてちょうだい。
Jun 12 2007 って出るのを、 2007年6月12日にするにはどうしたらいいかしら?
- 360 名前:デフォルトの名無しさん [2007/06/12(火) 20:18:53 ]
- 入力した自然数を4で割り、4つの変数に収めた後、
余りをランダムに割り振るプログラムを書いて見ました #include<ctime> #include<cstdlib> #include<iostream> using namespace std; int main() { int a;//適当な大きさの変数を読み取らせるための変数 int c1; int c2; int c3; int c4;//aを4で割り、余りをこの4つの数値にランダムに格納する int b; c1=c2=c3=c4=0; scanf("%d",&a); b=a % 4; printf("%d,%d\n",a/4,b); printf("%d,%d,%d,%d\n",c1,c2,c3,c4); while(b>0) { srand(time(NULL)); int dice=rand() % 4;
- 361 名前:360 [2007/06/12(火) 20:20:06 ]
- 続きです
switch(dice) { case 0: { c1++; c2+=0; c3+=0; c4+=0; } case 1: { c1+=0; c2++; c3+=0; c4+=0; } case 2: { c1+=0; c2+=0; c3++; c4+=0; } case 3: { c1+=0; c2+=0; c3+=0; c4++; } }
- 362 名前:360 [2007/06/12(火) 20:22:09 ]
- printf("%d\n",dice);
//dice=0; b--; } printf("分配計算後に\n"); printf("%d,%d,%d,%d\n",c1,c2,c3,c4); c1+=(int)a/4; c2+=(int)a/4; c3+=(int)a/4; c4+=(int)a/4; printf("%d,%d,%d,%d\n",c1,c2,c3,c4); scanf("%d",&c1); return 0; } このように作ったのですが、余りが2になる場合に どうしても余分な計算をしているようです。 srand(time(NULL)); int dice=rand() % 4; に問題があるのか、case文がおかしいのか分からず迷っております よろしくお願いします
- 363 名前:デフォルトの名無しさん mailto:sage [2007/06/12(火) 20:25:30 ]
- >>360
+=0て
- 364 名前:デフォルトの名無しさん mailto:sage [2007/06/12(火) 20:26:45 ]
- caseの後にbreakするんだ
- 365 名前:デフォルトの名無しさん mailto:sage [2007/06/12(火) 20:29:49 ]
- これさ、黙ってc1〜c4を配列にしちゃえばswitch自体が不要だわな
一番の原因は >>364 の指摘してるとおりだと思うが
- 366 名前:デフォルトの名無しさん mailto:sage [2007/06/12(火) 20:37:55 ]
- >>359
実行時に自分で変換すれば。
- 367 名前:MSX++ mailto:sage [2007/06/12(火) 20:42:32 ]
- while(b--) {
*(int *)(((void *)(&c1))+(rand()&3))++; } ただし、c1からc4までが連続定義されているものとする。ANSI 環境依存なら。 int cx[4]; while(b--) { cx[rand()&3]++; } かな?
- 368 名前:デフォルトの名無しさん mailto:sage [2007/06/12(火) 20:42:47 ]
- 引数からファイルパスを取得し、同じ内容を別名で出力するプログラムに
関してですが、コマンドプロンプトなどで引数を与えると正常にo.txtが 出力されるのですが、ドラッグアンドドロップだと上手く動作しないです。 ご指南お願いします。 OSはWindowsです。 #include <iostream> #include <fstream> using namespace std; int main(int argc,char **argv) { char buf[256]; ifstream ifs(argv[1]); ofstream ofs("o.txt"); while( ifs.getline(buf,sizeof(buf))) ofs << buf << endl; return 0; }
- 369 名前:デフォルトの名無しさん mailto:sage [2007/06/12(火) 20:47:31 ]
- よく意味がわからんけど
コマンドプロンプトにD&Dしてんの? どういうオブジェクトをD&Dしてて、 どううまく動作しないのさ
- 370 名前:デフォルトの名無しさん mailto:sage [2007/06/12(火) 20:49:25 ]
- とりあえず引数を表示してみるとか
- 371 名前:デフォルトの名無しさん mailto:sage [2007/06/12(火) 20:53:09 ]
- o.txtをフルパスで書いたら?
なんか変なトコに出力してるだけだろ。
- 372 名前:360 mailto:sage [2007/06/12(火) 20:54:29 ]
- >>364-365 など各位
皆様ありがとうございます。早速配列化と、breakを試してみます
- 373 名前:368 mailto:sage [2007/06/12(火) 20:55:45 ]
- 実行ファイルがtest.exeだとしたら、batファイルなどで
test.exe i.txtへの絶対パス test.exe i.txt 両者ともファイルの書き出しに成功しますが、 エクスプローラー上でi.txtをtest.exeへD&Dするとファイルの書き出しが 行われません。 ちなみに引数を表示するプログラムを追加してみたところ、見た目は batファイルとD&D両者とも同じ引数を受け取っているように見えます。
- 374 名前:368 mailto:sage [2007/06/12(火) 21:08:30 ]
- >>371
なるほど、作業しているディレクトリ上位のディレクトリを見てみたら、 確かに変な位置に出力されてました。 んでコマンドライン第一引数から実行ファイルまでのパスを切り取って output.txtに付け加えてあげたら、正常動作しました。 ありがとうございます。
- 375 名前:デフォルトの名無しさん mailto:sage [2007/06/12(火) 21:13:46 ]
- バッチファイルをダブルクリックした場合と、D&Dした場合じゃあ
カレントディレクトリの位置が違うんだよね。 よく分からん仕様ではあるよな
- 376 名前:デフォルトの名無しさん mailto:sage [2007/06/12(火) 23:11:47 ]
- a != '.'
これの右側(コンマ)の意味がわかりません。
- 377 名前:デフォルトの名無しさん mailto:sage [2007/06/12(火) 23:14:35 ]
- >>376
コンマなんてどこにあるんだ?
- 378 名前:デフォルトの名無しさん mailto:sage [2007/06/12(火) 23:15:35 ]
- >>376
右側にあるのはシングルクォーテーション「'」とピリオド「.」
- 379 名前:デフォルトの名無しさん mailto:sage [2007/06/12(火) 23:17:00 ]
- 間違いました。ピリオドです。
- 380 名前:デフォルトの名無しさん mailto:sage [2007/06/12(火) 23:18:29 ]
- >>376
じゃあ、' の意味は分かるのか?
- 381 名前:デフォルトの名無しさん mailto:sage [2007/06/12(火) 23:20:53 ]
- >>376
aとか!=の意味は?
- 382 名前:デフォルトの名無しさん mailto:sage [2007/06/12(火) 23:25:13 ]
- ''はAとかの文字リテラルを表示するときに使う物だと思います。
- 383 名前:デフォルトの名無しさん mailto:sage [2007/06/12(火) 23:26:08 ]
- >>381
分かります。
- 384 名前:デフォルトの名無しさん mailto:sage [2007/06/12(火) 23:27:31 ]
- >>383
本当にわかるのか?!=の意味言ってみ
- 385 名前:デフォルトの名無しさん mailto:sage [2007/06/12(火) 23:29:51 ]
- 変数aが右オペランドと等しくないということです。
- 386 名前:デフォルトの名無しさん mailto:sage [2007/06/12(火) 23:30:19 ]
- そんなに虐めちゃるなよwって思ったけど確かに
>>376 の質問にちゃんと応えようとしたらこうなるのは致し方ないかw
- 387 名前:デフォルトの名無しさん mailto:sage [2007/06/12(火) 23:33:21 ]
- >>385
変数aがピリオドと等しくない
- 388 名前:デフォルトの名無しさん mailto:sage [2007/06/12(火) 23:42:32 ]
- >>387
これはひどい
- 389 名前:デフォルトの名無しさん mailto:sage [2007/06/12(火) 23:43:55 ]
- .は文字リテラルということですね。分かりました。
- 390 名前:デフォルトの名無しさん mailto:sage [2007/06/12(火) 23:47:43 ]
- '.' が文字リテラルであって
. が文字リテラルなわけではない。
- 391 名前:デフォルトの名無しさん mailto:sage [2007/06/13(水) 00:15:42 ]
- すいません、質問お願いします。
本日 -> という記号が出てきたんですが、どういった意味なんでしょう よろしくお願いします。
- 392 名前:デフォルトの名無しさん mailto:sage [2007/06/13(水) 00:20:34 ]
- アロー演算子といいます
よろぴくね
- 393 名前:デフォルトの名無しさん mailto:sage [2007/06/13(水) 00:23:44 ]
- >>391
wisdom.sakura.ne.jp/programming/c/c36.html ここ見ると幸せな予感。
- 394 名前:デフォルトの名無しさん mailto:sage [2007/06/13(水) 00:30:40 ]
- >>392-393
ありがとうございます。早速読んでみます
- 395 名前:デフォルトの名無しさん [2007/06/13(水) 00:33:33 ]
- ヘッダファイルなんですが、以下をBorlandでコンパイルすると
「train.h 6: 宣言の構文エラー」となります。なぜでしょうか^^; 初心者ゆえ何卒ご指導願います。 −−−−−−−−−−−−−−− #ifndef __TRAIN_H__ #define __TRAIN_H__ #include<stdio.h> class Train { public: Train(); void SetSpeed(int aspeed); int GetSpeed(); void Run(); void Stop(); private: int speed; }; #endif // __TRAIN_H__
- 396 名前:デフォルトの名無しさん mailto:sage [2007/06/13(水) 00:40:02 ]
- ファイルの拡張子、.cとかになってねぇか?
Borland詳しく知らないが、C言語でclass使えないぞ。
- 397 名前:デフォルトの名無しさん mailto:sage [2007/06/13(水) 00:44:14 ]
- 予約識別子死ね。
- 398 名前:デフォルトの名無しさん mailto:sage [2007/06/13(水) 01:16:30 ]
- stdにsort()とstable_sort()があるけど
stable_sortの同じ値をもつ要素が複数存在していたときに、元の順序を崩さない ってどういうときに重要になるの? 別関数を用意してまで保障する必要性がわからない。
- 399 名前:デフォルトの名無しさん mailto:sage [2007/06/13(水) 01:20:20 ]
- ヒント:ソートに使った以外のデータメンバ
- 400 名前:デフォルトの名無しさん mailto:sage [2007/06/13(水) 01:27:34 ]
- >>398
すでに出来上がっている順番待ちの行列を「今から年齢順に受付まーす」って 話になったとき、同じ年齢の人同士では元の順番を保持するのが平和的だと思います。
- 401 名前:デフォルトの名無しさん mailto:sage [2007/06/13(水) 01:35:50 ]
- あとstable_sortは最悪条件の時の効率がsortより良い。
- 402 名前:デフォルトの名無しさん mailto:sage [2007/06/13(水) 01:37:10 ]
- それを気にするなら、
ヒープソートのライブラリ拾うなり作るなりすればいいんじゃないかな。
- 403 名前:デフォルトの名無しさん mailto:sage [2007/06/13(水) 01:48:03 ]
- std::sort_heap()
- 404 名前:デフォルトの名無しさん mailto:sage [2007/06/13(水) 03:14:47 ]
- インデックスとアドレスを保持した構造体を使ってソートして、
それから位置を変更していけば、 安定かつ高速なソートができると思う。 作業領域が必要にはなるけどね。
- 405 名前:デフォルトの名無しさん mailto:sage [2007/06/13(水) 03:22:42 ]
- それでも最適化なら・・・最適化ならきっと何とかしてくれる・・・!!
- 406 名前:デフォルトの名無しさん mailto:sage [2007/06/13(水) 09:22:35 ]
- C++のthrow/catch
みたいな例外処理を何て呼ぶんですか?
- 407 名前:デフォルトの名無しさん mailto:sage [2007/06/13(水) 09:26:41 ]
- >>406
「例外処理」でいいような気がするけど、「C++のthrow/catch」に限定するなら 「C++例外処理」とでも呼べば?
- 408 名前:デフォルトの名無しさん mailto:sage [2007/06/13(水) 09:28:09 ]
- >C++例外処理
これの存在を知らない組み込みな人たちに伝えるので、 センセーショナルでクールな呼び名を教えて欲しいでつ。
- 409 名前:デフォルトの名無しさん mailto:sage [2007/06/13(水) 09:34:50 ]
- C++言語的割り込み処理
- 410 名前:デフォルトの名無しさん mailto:sage [2007/06/13(水) 09:36:43 ]
- それだ!
組み込みな人達から見ればセンセーショナルでクールでつね。 でも、自分から見れば八百長っぽくてダサダサ。
- 411 名前:デフォルトの名無しさん mailto:sage [2007/06/13(水) 09:38:21 ]
- C++ってなんでfinallyがないの?
あったら、auto_ptr使わなくてもこんな感じで書けたりしませんか? char *str = new char[256]; try { ... if (...) return; ... } finally { delete [] str; } と、C/C++初めて1年の俺が適当に言ってみる。
- 412 名前:デフォルトの名無しさん mailto:sage [2007/06/13(水) 09:41:27 ]
- >>411
逆にスコープに厳しいコンストラクタ/デストラクタ(auto_ptr)があるから、 finalliyはいらないという判断だったような気がする
- 413 名前:デフォルトの名無しさん mailto:sage [2007/06/13(水) 09:42:02 ]
- >>411
そんな書き方をいったい何箇所にコピペするつもりだ? RAII のほうが処理を局所化できていい。 finally しかない Java では実際にそういうコードのコピペが多くなる。
- 414 名前:デフォルトの名無しさん mailto:sage [2007/06/13(水) 09:45:13 ]
- >>411
↓こっちのが楽だと思わんか? std::string str(256); ... if (...) return; ...
- 415 名前:デフォルトの名無しさん [2007/06/13(水) 09:53:43 ]
- そうそう、確か、deleteを使わずにローカル変数オブジェクトがC++流儀だった希ガス。
- 416 名前:デフォルトの名無しさん mailto:sage [2007/06/13(水) 09:54:43 ]
- >C++言語的割り込み処理
割り込み処理って、中断するだけで割り込みが終わったら元の処理に戻るんじゃなかったっけ? なら意味違うかも。。。
- 417 名前:デフォルトの名無しさん mailto:sage [2007/06/13(水) 10:48:04 ]
- 割り込みはダメだろう・・・常識的に考えて。
例外処理は例外処理。 例外的な動作が起こった場合に行う処理。
- 418 名前:デフォルトの名無しさん mailto:sage [2007/06/13(水) 10:52:15 ]
- 食い込みはおk?
- 419 名前:デフォルトの名無しさん mailto:sage [2007/06/13(水) 10:56:58 ]
- >例外的な動作が起こった場合に行う処理。
C言語の戻り値見て対処するのも”例外処理”って呼ばれるし、 これじゃ、区別付かないじゃん。
- 420 名前:デフォルトの名無しさん mailto:sage [2007/06/13(水) 11:02:07 ]
- でも「C++例外処理」じゃ不満なんだろ。
センセーショナルでクールな・・・ | \ __ / _ (m) _ピコーン |ミ| / `´ \ ('A`) ノヽノヽ くく 「禿式例外処理」なんてどうだ? 組み込みのおっさん相手にはかなりセンセーショナルだろ。
- 421 名前:デフォルトの名無しさん mailto:sage [2007/06/13(水) 11:03:25 ]
- >でも「C++例外処理」じゃ不満なんだろ。
当たり前だろ、C++の例外処理は、C++例外処理です。っていえないお。 >「禿式例外処理」なんてどうだ? オヤジギャグ?
- 422 名前:デフォルトの名無しさん mailto:sage [2007/06/13(水) 11:06:32 ]
- 別に俺用語を生み出すのは構わないけど
他人とコミュニケーションを取るときには使わないでね
- 423 名前:デフォルトの名無しさん mailto:sage [2007/06/13(水) 11:08:45 ]
- 洋本でも普通にC++EHだしな
- 424 名前:デフォルトの名無しさん mailto:sage [2007/06/13(水) 11:09:05 ]
- 禿が作ったんだから禿式ってことね。
www.research.att.com/~bs/ エラーコードによる例外処理に対して区別するって意味なら、 例外オブジェクトによる例外処理って感じかなぁ。
- 425 名前:デフォルトの名無しさん mailto:sage [2007/06/13(水) 11:15:26 ]
- 儂の例外処理は108式まで……
- 426 名前:デフォルトの名無しさん mailto:sage [2007/06/13(水) 11:27:04 ]
- 構造化例外ってのは別物だっけ課?
- 427 名前:デフォルトの名無しさん mailto:sage [2007/06/13(水) 11:38:04 ]
- 例外を使わずに自前のChain of Responsibilityパターンを使ったエラーハンドラ機構を使うようにしましょう
- 428 名前:デフォルトの名無しさん mailto:sage [2007/06/13(水) 12:42:32 ]
- >>419
それは言語的に特殊な構文が用意されてるわけじゃない。 あと、何でもかんでも名前で説明しようと思うからいけない。 そういう違いは名前以外の解説文で説明しなはれ。
- 429 名前:デフォルトの名無しさん mailto:age [2007/06/13(水) 13:04:41 ]
- 配列の要素を全部同じ値に埋めるって関数があったと思うんですが、
forで回すのとその関数を使うのとではどちらが早いんですか? もしくは、計測するのでその関数名教えてください。age
- 430 名前:デフォルトの名無しさん mailto:age [2007/06/13(水) 13:14:35 ]
- memsetのこと?
- 431 名前:デフォルトの名無しさん mailto:sage [2007/06/13(水) 14:27:31 ]
- fill() だろ。
- 432 名前:デフォルトの名無しさん mailto:sage [2007/06/13(水) 15:00:43 ]
- ostream::write って引数 const char* だけど、
何で const void* じゃないの? クラスまで暗黙にキャスト、あるいは static_cast できてしまうから?
- 433 名前:デフォルトの名無しさん mailto:sage [2007/06/13(水) 15:05:48 ]
- >>432
writeは何をする関数かな?
- 434 名前:デフォルトの名無しさん mailto:sage [2007/06/13(水) 15:12:29 ]
- あなたに愛を届ける関数です。
- 435 名前:デフォルトの名無しさん mailto:sage [2007/06/13(水) 16:19:29 ]
- int main()
{ FILE *fp; int c; fp=fopen("sample.txt","r"); while((c=fgetc(fp))!=EOF) putchar(c); fclose(fp); return 0; } このプログラムの動作でsample.txtが日本語でも大丈夫なようにしたいのですが、 fgetcをどう変えたら良いでしょうか?
- 436 名前:デフォルトの名無しさん mailto:sage [2007/06/13(水) 16:26:24 ]
- >>435
それで大丈夫なように見えるけど、どうダメだったの?
- 437 名前:デフォルトの名無しさん mailto:sage [2007/06/13(水) 16:33:31 ]
- >>436
すいません、putcharの下に一つ入れ忘れましたorz int main() { FILE *fp; int c; fp=fopen("sample.txt","r"); while((c=fgetc(fp))!=EOF) { putchar(c); putchar('\n'); } fclose(fp); return 0; } 正しくはこうでした。
- 438 名前:デフォルトの名無しさん mailto:sage [2007/06/13(水) 16:34:43 ]
- cが漢字の1バイト目だったら改行しない、でいいだろ
1バイト目かどうかの判断は文字コードによる
- 439 名前:デフォルトの名無しさん mailto:sage [2007/06/13(水) 16:36:49 ]
- 文字コードじゃなくて漢字コード、ね。
で、1バイト目を出力したことは覚えておいて 2バイト目は無条件に出力 3バイトの文字コードなら以下同様
- 440 名前:デフォルトの名無しさん mailto:sage [2007/06/13(水) 16:48:56 ]
- >>439
ありがとうございます。 エラー内容と言われたことをよく考えたら c=fgetc(fp); putchar(c); c=fgetc(fp); putchar(c); これで日本語一字を出力するんですね。 putcharってこれでやったら日本語を1バイトずつ区切って ゴミ(?)の文字2つを出力するかと思ってました。
- 441 名前:デフォルトの名無しさん mailto:sage [2007/06/13(水) 17:32:27 ]
- >>406-
構造化例外処理という言葉はあるにはあるのだが、 Windowsの例外処理の名称として有名なので使えない
- 442 名前:デフォルトの名無しさん mailto:sage [2007/06/13(水) 17:58:33 ]
- >Windowsの例外処理
これってなんだけ?
- 443 名前:デフォルトの名無しさん mailto:sage [2007/06/13(水) 18:16:48 ]
- >>433
そんなこと全く関係ないっしょ。 fwrite の引数の型が const void* だし。
- 444 名前:デフォルトの名無しさん mailto:sage [2007/06/13(水) 18:19:30 ]
- 関係ある。ちゃんと読め。
fwrite は、サイズと数を指定するだろ。 ストリームはストリームを指定するんだ
- 445 名前:デフォルトの名無しさん mailto:sage [2007/06/13(水) 18:21:58 ]
- >>442
「構造化例外」つってんのにググりもしないとは。 >>443 それこそまったく関係がない。 「文字列を出力する」 ostream と 「何でも出力する」 fwrite() を比較するとは 頭大丈夫?
- 446 名前:デフォルトの名無しさん mailto:sage [2007/06/13(水) 18:22:12 ]
- >>442
__try __except __finally
- 447 名前:デフォルトの名無しさん mailto:sage [2007/06/13(水) 18:23:58 ]
- >>445
ostream は別に文字列だけ出力すればいいわけじゃないってのは、 ofstream と ios::binary の存在を考えれば分かると思うが。
- 448 名前:デフォルトの名無しさん mailto:sage [2007/06/13(水) 18:24:54 ]
- >>444
要するに、あくまでバイトストリームを出力する、というスタンスを示すために、 write では引数を const char* としてるという理解でいいのか?
|

|