- 1 名前:デフォルトの名無しさん [2006/08/22(火) 09:21:31 ]
- はきだめのスレへようこそ
ここは、C/C++に挫折し、それにもかかわらず、C/C++やらなければならない者達がたむろするスレです。 なお、質問する人は回答はあまり期待しないでください。 前スレ:はきだめC/C++下級者の質問箱 pc8.2ch.net/test/read.cgi/tech/1124256027/
- 445 名前:デフォルトの名無しさん mailto:sage [2007/04/30(月) 19:00:38 ]
- >441
前者は、入力した文字を 変数 a の内容と比較している。 後者は、入力した文字が a という文字かどうかを判定している。 さあ、選べ。
- 446 名前:デフォルトの名無しさん mailto:sage [2007/05/01(火) 01:23:21 ]
- >>445
トークンa 'a'という整数
- 447 名前:デフォルトの名無しさん mailto:sage [2007/05/01(火) 07:40:59 ]
- >441
ついでにgetchar()の戻り値、文字リテラルの型はintだからchar c;ではなくint c; とすべき
- 448 名前:447 mailto:sage [2007/05/01(火) 07:42:04 ]
- >文字リテラルの型はint
Cの場合ね。
- 449 名前:デフォルトの名無しさん [2007/05/06(日) 19:11:31 ]
- 下記のファイルの3列目を読み込んで配列に格納したいです。
----- 1,2,3,4 5,6,7,8 9,8,7,6 5,4,3,2 ----- 数値はカンマで区切られています。 どうやったら a[0]=3, a[1]=7, a[2]=7, a[3]=3 というふうに格納できるでしょうか? a[0][2]=3, a[1][2]=7, a[2][2]=7, a[3][2]=3 でも構いません。よろしくお願いします。
- 450 名前:デフォルトの名無しさん mailto:sage [2007/05/06(日) 19:12:13 ]
- 宿題は宿題スレへ
- 451 名前:デフォルトの名無しさん mailto:sage [2007/05/06(日) 19:19:57 ]
- >>449
適当でいいのなら fgets で 3 列目まで読み込んでから sscanf(buf, "%d,%d,%d,%d", &a[0], &a[1], &a[2], &a[3]); みたいに。 真面目にやるなら strtok とか、コンマを strchr で探して切り捨てたりしてから、 atoi とか。
- 452 名前:デフォルトの名無しさん mailto:sage [2007/05/06(日) 19:31:52 ]
- 一行読み込むごとに
sscanf(buf, "%d,%d,%d,%d", &dummy, &dummy, &a[i], &dummy); でいいじゃん
- 453 名前:デフォルトの名無しさん mailto:sage [2007/05/06(日) 20:42:28 ]
- 普通に %*d つかえよw
- 454 名前:デフォルトの名無しさん mailto:sage [2007/05/06(日) 20:45:02 ]
- あ、三列目ってそっちか。
- 455 名前:449 mailto:sage [2007/05/06(日) 20:47:58 ]
- >>451-454
とくに宿題ではないのでここに書かせてもらってます。 型は決まっているのでsscanfでできました。 ありがとうございました。
- 456 名前:デフォルトの名無しさん mailto:sage [2007/05/07(月) 00:21:59 ]
- >>453
すっかり忘れてたわー
- 457 名前:デフォルトの名無しさん mailto:sage [2007/05/07(月) 11:33:22 ]
- >>452
で、3カラム目だけ得る目的なのに4カラム目を空読みする理由は? #"%*d,%*d,%d"で充分。
- 458 名前:デフォルトの名無しさん mailto:sage [2007/05/07(月) 17:30:42 ]
- >>457
上につられたってことにしといてください
- 459 名前:デフォルトの名無しさん [2007/05/07(月) 23:31:13 ]
- #include <stdio.h>
#define JIJYO(x) ((x)*(x)) main() { int i = 1; while(i <= 5) { printf("結果:%d\n", JIJYO(i++)); } } において、実行結果は1^2,3^2,5^2の順に表示されるのですが、 何故、1^2,2^2,3^2……とならずに、i++が2回ずつ呼びだされるのでしょうか?
- 460 名前:デフォルトの名無しさん mailto:sage [2007/05/07(月) 23:42:30 ]
- 見え見えの落とし穴にはまるあなたは
きっと仲間内では天然キャラとして愛される存在なのでしょう
- 461 名前:デフォルトの名無しさん mailto:sage [2007/05/07(月) 23:53:10 ]
- >>459
漏れも初心者なんで、あってるかどうかわからないけど。 #define JIJYO(x) ((x)*(x)) ((i++)*(i++)) に展開されるんじゃないかな。
- 462 名前:デフォルトの名無しさん mailto:sage [2007/05/07(月) 23:56:59 ]
- マクロを教える時に必ず注意される所だと思うが。
- 463 名前:459 mailto:sage [2007/05/08(火) 02:02:18 ]
- >>461
なるほど……。 ありがとうございました。
- 464 名前:デフォルトの名無しさん mailto:sage [2007/05/08(火) 13:38:07 ]
- C++について。
問題文: f(x)=x^3(xの3乗)のdf(x)/dxのプログラムをC++で作れ。 (1≦x≦2、xは0.01ずつ増加<x(i+1)=x(i)+0.01>、そのときのf(x)の値も用いる。) 5月14日までに考えて来い!との事なので・・・ どうかご教授願いたく存じますm(_ _;)m
- 465 名前:デフォルトの名無しさん mailto:sage [2007/05/08(火) 13:56:57 ]
- >>464
for (int x=100;x<=200;x++) { cout<<(x/100.0)<<" "<<3*(x/100.0)*(x/100.0)<<"\n"; }
- 466 名前:デフォルトの名無しさん mailto:sage [2007/05/08(火) 13:59:49 ]
- >>464
宿題スレとのマルチはお勧めしない。
- 467 名前:デフォルトの名無しさん mailto:sage [2007/05/08(火) 15:44:46 ]
- さすが掃き溜め。
- 468 名前:デフォルトの名無しさん mailto:sage [2007/05/08(火) 16:20:58 ]
- C++厨死ね
- 469 名前:デフォルトの名無しさん mailto:sage [2007/05/10(木) 01:28:34 ]
- >>464
丸投げしといて、回答があれば丸写ししようなどと考えてる (らしい) 奴が >ご教授願いたく などとふざけた台詞を吐くお陰で、この単語に脊髄反射してしまう奴が 後を絶たないんじゃないかと思うようになって来た。
- 470 名前:デフォルトの名無しさん mailto:sage [2007/05/15(火) 23:33:14 ]
- すいません・・・二重ポインタ**の意味がどうしてもわかりません・・・
多次元配列がどうのこうのって書いてあったけど・・・
- 471 名前:デフォルトの名無しさん mailto:sage [2007/05/16(水) 00:30:42 ]
- >>470
ポインタのポインタで検索汁
- 472 名前:デフォルトの名無しさん mailto:sage [2007/05/16(水) 00:45:13 ]
- ありがとうございました.二重ポインタで検索してました.
- 473 名前:デフォルトの名無しさん mailto:sage [2007/05/17(木) 19:23:25 ]
- ぬるぽいんた
- 474 名前:デフォルトの名無しさん mailto:sage [2007/05/17(木) 23:52:42 ]
- がっいんた
- 475 名前:デフォルトの名無しさん [2007/06/07(木) 11:04:30 ]
- ropeってどんな時に使うのですか?
いまいち利点が分からないのですが。
- 476 名前:デフォルトの名無しさん mailto:sage [2007/06/07(木) 11:19:39 ]
- >>475
ttp://www.oopweb.com/CPP/Documents/STLGuide/Volume/Rope.html 個人的には、「非標準である」というデメリットしか思いつきません。
- 477 名前:デフォルトの名無しさん [2007/06/07(木) 12:04:02 ]
- gccで作成した静的ライブラリとg++で作成したオブジェクトファイルを
リンクさせようとすると undefined reference to **** のようになります。 ライブラリの方はgccでしかコンパイルがうまく通らないのですが、 今後作成するプログラムはC++で書くため、gccでコンパイルしたものと g++でコンパイルしたものをうまくリンクしたいのですが 何かよい解決策はないでしょうか?
- 478 名前:デフォルトの名無しさん mailto:sage [2007/06/07(木) 12:17:22 ]
- >>477
「名前マングル」でググるよろし。 ライブラリのヘッダに手を入れていいなら プロトタイプ宣言の先頭に #ifdef __cplusplus extern "C" { #endif 最後に #ifdef __cplusplus } #endif を入れる。
- 479 名前:デフォルトの名無しさん mailto:sage [2007/06/07(木) 13:12:38 ]
- while(1)
{ scanf("%d", &a); switch (a) { case 1: printf("a = 1\n"); break; case 3: printf("a = 3\n"); break; case 5: printf("a = 5\n"); break; default: printf("others\n"); break; } } これでgとか非数値を入力するとscanfが飛ばされて defaultの所が延々流れるのですが何故でしょうか?
- 480 名前:デフォルトの名無しさん mailto:sage [2007/06/07(木) 13:20:52 ]
- 1. g の地点で scanf が失敗
2. a には何も入らないため、変数に最初に入ったゴミにより default が選択される 3. others と出力される 4. 1 に戻る この無限ループ
- 481 名前:477 mailto:sage [2007/06/07(木) 13:22:09 ]
- なるほど、うまくいきました。ありがとうございます。
- 482 名前:デフォルトの名無しさん [2007/06/07(木) 13:51:28 ]
- const int* p = new int[10];
delete[] p; これ、エラーも警告も何も出ないんですけど、 仕様上合法なんですか?
- 483 名前:デフォルトの名無しさん mailto:sage [2007/06/07(木) 13:59:51 ]
- >>480
なるほど、文字入力を%dの10進数指定して読み込んだら ASCIIコードの値が格納されるかと勘違いしてました。 ていうか失敗の後再読み込みされずにgのゴミで処理されるって scanfの仕様どうなってるんだろうかと今さらながらググってみたら 一番最初に出てくる関数だから侮っていたら書いてあることが意外と難しくてビックリでしたorz
- 484 名前:デフォルトの名無しさん mailto:sage [2007/06/07(木) 14:15:41 ]
- >>482
const int の配列を割り当てるのも、それを解放するのも 何の問題ありません。 でも p[0] = 0; なんてするとエラーになる罠。
- 485 名前:デフォルトの名無しさん mailto:sage [2007/06/07(木) 14:26:43 ]
- メモリの破棄には const の力は及ばない・・・ということですか。
分かりました。
- 486 名前:デフォルトの名無しさん mailto:sage [2007/06/07(木) 15:59:10 ]
- 破棄そのものは内容書き換えないからな
- 487 名前:デフォルトの名無しさん mailto:sage [2007/06/07(木) 16:04:32 ]
- 理屈は分かるけど、それでいいんかいと思わなくはないなw
void foo(const int* p) { delete[] p; } を foo(p); って呼んで、 ああ、p は foo で何の影響も受けてないよねー、と思ったら、 delete[] されてた、なんつって。 まあ、const_cast という悪魔も確かにいるけどね。
- 488 名前:デフォルトの名無しさん mailto:sage [2007/06/07(木) 17:36:12 ]
- そんな気持ち悪いことはしないでくださいとしかなあ。
- 489 名前:デフォルトの名無しさん [2007/07/06(金) 09:47:01 ]
- C言語で、文字列 str1 の先頭から1文字づつ取り出して
別の文字列 str2 に追記していく場合、 strncatを使用して strncat(str2,&str1[i],1); とするとstr2の内容が文字化けしてしまいます。 FedoraCore6なんですが、どうすればいいでしょうか?
- 490 名前:デフォルトの名無しさん mailto:sage [2007/07/06(金) 09:48:11 ]
- 何を入れたらどう化けたんだよ
- 491 名前:デフォルトの名無しさん [2007/07/06(金) 10:01:41 ]
- >>490
(だとか)だとかを入力後、他の文字を追記するとstr2に文字化けが生じてしまいます
- 492 名前:デフォルトの名無しさん mailto:sage [2007/07/06(金) 10:03:31 ]
- つまり、マルチバイト文字を入れたときに化けるんだな
化ける前と化けた文字を見れば一発でわかるが・・・ iはちゃんと1ずつ進めてんの?
- 493 名前:デフォルトの名無しさん mailto:sage [2007/07/06(金) 10:05:06 ]
- マルチバイトはstrncpyの3番目が1の場合2回(UTF-8なら3回)実行しないとだめなのはわかってる?
- 494 名前:デフォルトの名無しさん [2007/07/06(金) 10:07:47 ]
- 半角(などを使用していたつもりだったので、
文字列内にマルチバイト文字は入っていないと思っていたのですが・・・・ sizeof("(")でもsizeof("1")でも同じ値がかえってきたのですが、"("もマルチバイトなんでしょうか? あらかじめstrlenで文字数を数えてからiを回しています。
- 495 名前:デフォルトの名無しさん mailto:sage [2007/07/06(金) 10:08:40 ]
- (だとか)だとかを
「だとか」じゃなくて、"("、")"のほうかよw
- 496 名前:デフォルトの名無しさん [2007/07/06(金) 10:10:48 ]
- >>495
すみません、ちゃんと""つけておいたほうが良かったですね。
- 497 名前:デフォルトの名無しさん mailto:sage [2007/07/06(金) 10:13:54 ]
- 文字化けを見てみないとわからんけど、\0終端して無いからゴミがくっついてるんじゃね
- 498 名前:デフォルトの名無しさん mailto:sage [2007/07/06(金) 10:17:24 ]
- そういや、最初にstr2は0で初期化してる?
strcat は\0のとこに追加するんだぜ。
- 499 名前:デフォルトの名無しさん mailto:sage [2007/07/06(金) 12:01:06 ]
- str(n)cat なんていう下衆なもんは使わないことをおすすめする。
- 500 名前:デフォルトの名無しさん mailto:sage [2007/07/06(金) 12:18:09 ]
- >>498
してませんでした。 やってみます
- 501 名前:デフォルトの名無しさん [2007/07/10(火) 21:31:00 ]
- クラスにはセットとゲット以外に、
なるべくメンバ関数を作らないようにすべきですか? それとも、どんどん関数を含めても良いのでしょうか? 思想的な質問ですが…
- 502 名前:デフォルトの名無しさん mailto:sage [2007/07/10(火) 21:33:03 ]
- アクセサ自体ベタベタ付ける物ではない
メンバ関数・変数ともにそのクラスを表現するのに必要なものだけで良い
- 503 名前:デフォルトの名無しさん [2007/07/10(火) 21:38:34 ]
- つまりメンバ関数にする意味があるもののみ含めるのが良いと、
そういうことで良いでしょうか。
- 504 名前:デフォルトの名無しさん mailto:sage [2007/07/10(火) 21:59:27 ]
- それでおkかな。
OOには単一責任の原則と言う物があるから 基本的にクラスが持つ責任は一つだけ。 メンバ関数をその責任に応じたもののみを付けるのが良い。 無駄に責任を負うと初心者にありがちなblobアンチパターンになる。
- 505 名前:デフォルトの名無しさん mailto:sage [2007/07/11(水) 01:28:49 ]
- class A
{ public: int x; }; class B: public A { public: int y; }: class C: public B { int z; }; 継承を習っているんですが、上のようなコードがあったとき、 int main() { C object; } このようにクラスCのオブジェクトを生成したとすると、 int x, yの分のメモリを保持しているクラスCのオブジェクトができるんでしょうか?
- 506 名前:デフォルトの名無しさん mailto:sage [2007/07/11(水) 01:35:06 ]
- もう一つ質問なんですが
class A { int x; }; class B: public A { public int y; }; int main() { A* p; p = new B; } このようにクラスA型のポインタでクラスBの領域を動的確保した場合、 Bのオブジェクトができるのですか? それともAのオブジェクトができるのでしょうか?
- 507 名前:デフォルトの名無しさん mailto:sage [2007/07/11(水) 01:35:08 ]
- >>505
うん。もちろん z もね。
- 508 名前:デフォルトの名無しさん mailto:sage [2007/07/11(水) 01:37:23 ]
- >>507
ありがとうございます!!
- 509 名前:デフォルトの名無しさん mailto:sage [2007/07/11(水) 01:38:42 ]
- >>506 B
- 510 名前:デフォルトの名無しさん mailto:sage [2007/07/11(水) 01:40:07 ]
- >>509
ありがとうございます! これで今ある疑念が解消されました!
- 511 名前:デフォルトの名無しさん mailto:sage [2007/07/11(水) 01:54:21 ]
- 解消されたと言った手前、いきなりですが
>>506の場合において、生成されたクラスBのオブジェクトが持つint yにアクセスする手段ってありますか? ポインタはクラスA型なので、アロー演算子を使っては呼び出せないですし… もしかして不可能ですか?
- 512 名前:デフォルトの名無しさん mailto:sage [2007/07/11(水) 02:09:52 ]
- >>511
A* が指してるオブジェクトが本当に B だと確信できるなら static_cast で B* に変換してアクセスできる。ただし、行儀のいいコードではない。
- 513 名前:デフォルトの名無しさん mailto:sage [2007/07/11(水) 02:14:45 ]
- いや普通ダウンキャストだろ
- 514 名前:デフォルトの名無しさん mailto:sage [2007/07/11(水) 02:25:11 ]
- static_cast でダウンキャストするわけですが何か?
- 515 名前:デフォルトの名無しさん mailto:sage [2007/07/11(水) 05:10:25 ]
- コマンドプロンプトの履歴?をもっと多く表示させたいんです。
最初のほうの計算がきれてしまいます。
- 516 名前:デフォルトの名無しさん mailto:sage [2007/07/11(水) 05:15:38 ]
- >>515
ウィンドウ名が書いてあるところ右クリック ↓ プロパティ あとはお好きにドゾー
- 517 名前:デフォルトの名無しさん mailto:sage [2007/07/11(水) 05:22:20 ]
- >>516
そこからがわからないんですけど バッファサイズとバッファ数を大きくすればいいのでしようか?
- 518 名前:デフォルトの名無しさん [2007/07/11(水) 08:55:39 ]
- さいです
- 519 名前:デフォルトの名無しさん mailto:sage [2007/07/12(木) 02:28:20 ]
- >>517
あー説明不足ですまん。 > バッファサイズとバッファ数を大きくすればいいのでしようか? おk。
- 520 名前:デフォルトの名無しさん mailto:sage [2007/07/15(日) 18:42:34 ]
-
漢字かな雑じりの string を小文字にしたいんですが,以下の方法では「認.」 が化けてしまいます. std::string str = "ABCDEFGHIJKLMNOPQRSTUVWXYZ AB確認.";//期待する変換: abcdefghijklmnopqrstuvwxyz AB確認. std::ctype<char> c; c.tolower( str.begin(), str.end() );//「認.」 が化ける 以下の方法で上手くいっているように思いますが問題ありますでしょうか? また,もっと簡単な方法があれば御教示下さい. for( int i=0; i < str.size(); i++) { if ( _ismbblead(str[i]) ) { i++; continue; } str[i] = tolower(str[i]); }
- 521 名前:デフォルトの名無しさん [2007/07/15(日) 21:09:48 ]
- for(i=0; N; i++){
・・・ } このときの繰り返し条件Nってどういう意味になりますか?
- 522 名前:デフォルトの名無しさん mailto:sage [2007/07/15(日) 21:11:49 ]
- Nのところが0以外なら繰り返してください、っていう意味!!!!
- 523 名前:デフォルトの名無しさん mailto:sage [2007/07/15(日) 21:17:25 ]
- 共有メモリに(キューデータ構造)を構築したいのですが
どうしたらいいのでしょうか?
- 524 名前:デフォルトの名無しさん [2007/07/15(日) 21:30:25 ]
- >>523
まずは、パソコンの電源を入れる
- 525 名前:デフォルトの名無しさん mailto:sage [2007/07/15(日) 23:02:52 ]
- >>520
wchar_t 使えば?
- 526 名前:デフォルトの名無しさん mailto:sage [2007/07/16(月) 00:43:59 ]
- wchar_t じゃ解決にならんと思うのだが。
- 527 名前:デフォルトの名無しさん mailto:sage [2007/07/16(月) 00:58:23 ]
- >>526
何か問題あるの?
- 528 名前:デフォルトの名無しさん mailto:sage [2007/07/16(月) 01:47:49 ]
- >>520 で済む事なのに
わざわざ文字コード変換とかするとか、 いくらなんでも無駄すぎる。
- 529 名前:デフォルトの名無しさん mailto:sage [2007/07/16(月) 01:53:54 ]
- >>521
Nがtrue(真)なら繰り返す Nがfalse(偽)なら打ち切る そして true とは 0 以外の値を持つ事であり、false とは 0 であることである。
- 530 名前:デフォルトの名無しさん mailto:sage [2007/07/16(月) 02:18:50 ]
- >>528
お前の言うことは分かるが、もし527に対して言っているのなら、 答えになっていないぞ。 無駄かどうかはともかく、wchar_tでも解決できるのだから。 個人的にはwchar_tを使うのはありだと思う。 確かにこの例では_ismbbleadの1つで済むが、そうでない(wchar_tにしたほうが手っ取り早い)場合は結構ある。 それ以外にも利点や必要があってwchar_tを使っていると、 522程度でもwchar_tを使えばいいと思うようになってくる。 今時変換のコストなんて微々たるもの。 なんなら元データをwchar_tと同じ文字コードにすればいい。(完全に脱線したが) ただ、std::stringとstd::wstringとの間に簡単な変換方法が無いのは痛い。 ところで、wchar_t使う方法では、やり方次第で 全角英字まで小文字になりそうな気もする。
- 531 名前:デフォルトの名無しさん mailto:sage [2007/07/16(月) 02:22:10 ]
- L"" で初期化すれば変換なんて要らないんじゃないの?
- 532 名前:デフォルトの名無しさん mailto:sage [2007/07/16(月) 02:29:58 ]
- wchar_t は2バイトだったり4バイトだったりするからな・・・
- 533 名前:520 mailto:sage [2007/07/16(月) 14:26:31 ]
-
皆さん御解答有難う御座います. wchar_t も検討しましたが,問題なさそうなので >>520 で行きたいと思います. 有難う御座いました.
- 534 名前:デフォルトの名無しさん mailto:sage [2007/07/19(木) 01:28:47 ]
- int x;
std::cin >> x; ってすると、xがint型であってもキーボードからWWWって文字列を入れたりすることができちゃうじゃないですか これって防げませんか?
- 535 名前:デフォルトの名無しさん mailto:sage [2007/07/19(木) 01:56:16 ]
- >>534
入力されたらどうするかを自分で決めて好きに実装すればいい。 最悪は1文字ずつ処理。
- 536 名前:デフォルトの名無しさん mailto:sage [2007/07/19(木) 21:54:41 ]
- その方法がわかりません・・・・・
- 537 名前:デフォルトの名無しさん mailto:sage [2007/07/19(木) 22:57:53 ]
- 一旦、文字列として読み込めばいい。
- 538 名前:デフォルトの名無しさん mailto:sage [2007/07/20(金) 00:55:38 ]
- 配列と、forとかの反復処理を勉強してください。
- 539 名前:デフォルトの名無しさん mailto:sage [2007/07/20(金) 03:37:06 ]
- わざわざ再発明させなくてもいんじゃね?っていつも思う。
てか悪い。C++は良く分からなかった。 #include <stdio.h> main() { int a; do { printf("値>"); scanf("%d",&a); while (getchar() != '\n') { } } while((a < 1) || (a > 9999)); return 0; }
- 540 名前:デフォルトの名無しさん mailto:sage [2007/07/20(金) 04:07:14 ]
- >>534
fail したら clear してから string へ読み捨てれば
- 541 名前:デフォルトの名無しさん mailto:sage [2007/07/20(金) 22:37:43 ]
- じゃあC++における標準入力って何でも文字列で読み込まないとエラー処理できないわけですか…
- 542 名前:デフォルトの名無しさん mailto:sage [2007/07/20(金) 22:52:48 ]
- >>541
Cでも同じじゃね? ってか、入力されるのは実際文字列であってたまたま数字だったら変換してくれてるってことでしょ。 Variantみたいな型が無い時点で>540のようにするしかないかと。
- 543 名前:デフォルトの名無しさん mailto:sage [2007/07/21(土) 01:04:15 ]
- >>541
どうしてもっていうならテンキー以外のキーボードをつなげるな
- 544 名前:デフォルトの名無しさん mailto:sage [2007/07/21(土) 06:29:53 ]
- 人はそれを電卓と呼ぶ。
- 545 名前:デフォルトの名無しさん mailto:sage [2007/07/21(土) 06:57:01 ]
- cin.ignore 使えば
|

|