[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 2chのread.cgiへ]
Update time : 01/29 10:31 / Filesize : 249 KB / Number-of Response : 964
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

はきだめC/C++下級者の質問箱 2



1 名前:デフォルトの名無しさん [2006/08/22(火) 09:21:31 ]
はきだめのスレへようこそ

ここは、C/C++に挫折し、それにもかかわらず、C/C++やらなければならない者達がたむろするスレです。
なお、質問する人は回答はあまり期待しないでください。


前スレ:はきだめC/C++下級者の質問箱
pc8.2ch.net/test/read.cgi/tech/1124256027/

415 名前:デフォルトの名無しさん mailto:sage [2007/04/14(土) 21:06:15 ]
そこでshared_ptrですよ、と惑わしてみる

416 名前:デフォルトの名無しさん [2007/04/15(日) 08:19:41 ]
動的束縛(アップキャスト)を使った状態でのdeleteが駄目って事ですか?



417 名前:デフォルトの名無しさん mailto:sage [2007/04/15(日) 09:42:37 ]
float x=0.1;
exp(0.1*x)だとfloatなのにpow(0.1*x,2)だとdoubleになってしまうのは何故なのでしょうか?
pow(float(0.1*x),2)とすれば、floatになってくれるのですが、expとpowで何が違うのでしょうか?


418 名前:デフォルトの名無しさん mailto:sage [2007/04/15(日) 09:49:12 ]
んなこたーない。

つーか、何を根拠にfloatだのdoubleだの言ってるんだ?

419 名前:デフォルトの名無しさん mailto:sage [2007/04/15(日) 16:40:47 ]
まずCかC++かはっきりさせろ

420 名前:デフォルトの名無しさん mailto:sage [2007/04/15(日) 16:48:26 ]
C++です。

421 名前:デフォルトの名無しさん mailto:sage [2007/04/15(日) 17:25:36 ]
で、根拠は?

422 名前:デフォルトの名無しさん mailto:sage [2007/04/15(日) 17:33:13 ]
cmathを使っている

423 名前:デフォルトの名無しさん mailto:sage [2007/04/15(日) 18:57:11 ]
ダメだこりゃ。



424 名前:デフォルトの名無しさん mailto:sage [2007/04/15(日) 19:14:06 ]
math.hを使え

425 名前:デフォルトの名無しさん mailto:sage [2007/04/15(日) 20:25:31 ]
なんでやねん。

426 名前:デフォルトの名無しさん mailto:sage [2007/04/15(日) 21:33:50 ]
>>417
0.1 * xは、0.1がdouble型だからxもdouble型へ昇格され、全体としてもdouble型になる。
expもpowもdouble型の引数を取るものが呼ばれるはず。
そうでないならコンパイラがおかしいはず。
そもそも418も指摘しているとおりで、417自身がどうやって調べたのかも怪しいが。

ついでにいくつか言うが、float型リテラルを作るには0.1fのようにfを後置しろ。
そんな関数スタイルのキャストでも(勿論Cスタイルのも)使うな。
ここではstatic_castを使え(Boostのimplicit_castもありだ)。

427 名前:デフォルトの名無しさん mailto:sage [2007/04/17(火) 13:06:00 ]
#include <windows.h>
#include <stdio.h>


void main()
{
 double a;

 a = 2/6;
 printf("%f\n", a);
}

VC6にて上のように単純に2÷6を計算したら0が出力されます。
0.33333・・・を出したいのですがどうすればいいのでしょうか?

428 名前:デフォルトの名無しさん mailto:sage [2007/04/17(火) 13:48:59 ]
>>427
a = 2.0 / 6.0;

429 名前:デフォルトの名無しさん mailto:sage [2007/04/17(火) 13:54:24 ]
>>428
ありがとー


430 名前:デフォルトの名無しさん mailto:sage [2007/04/17(火) 20:52:34 ]
共用体が有効なときってあるの?
活用方法が見出せない。

431 名前:デフォルトの名無しさん mailto:sage [2007/04/17(火) 22:11:20 ]
>>430
確かに。職業PGだが、BigEndianとLittleEndianが混在した状況で
共用体が必要な場面は少ないと思う。実際使わないし。

組み込み系ならBEかLEかははっきりしているので
union X {
long a;
char b[sizeof(long)];
};

とかやることがあるかも。

432 名前:デフォルトの名無しさん mailto:sage [2007/04/17(火) 23:37:36 ]
領域をケチりたい場合にはよく使ったが、
最近はメモリに気を使う必要性が減ったから、
わざわざそういうことはしなくなったな。

433 名前:デフォルトの名無しさん mailto:sage [2007/04/18(水) 01:02:36 ]
union REGS は昔良く使われてたな。
今は struct sockaddr 関係で使われてたような。
sin_addrが内部の何かのdefineだった気がする。実装依存だろうけど。



434 名前:デフォルトの名無しさん mailto:sage [2007/04/18(水) 11:00:22 ]
>>430
であれば、使わなければよい。

実例としては、例えば「ICMPヘッダ union」でググるよろし。

435 名前:デフォルトの名無しさん [2007/04/21(土) 18:03:25 ]
freeにNULLを渡した場合の挙動は仕様として決まっていますか?
また、一般的な処理系ではどうなっているでしょうか。

436 名前:デフォルトの名無しさん mailto:sage [2007/04/21(土) 18:24:28 ]
>435
標準CではfreeにNULLを渡したときは何もしない(だから渡してもよい)
ことが保証されている。

437 名前:デフォルトの名無しさん [2007/04/30(月) 09:05:06 ]
32bit Windowsと64bit Windows両方で共通のコードを書きたいのですが、
int、doubleなど同じ変数型でも変数の桁数、精度がそれぞれで違うと思いますが、
これらの違いの一覧はどこかで公開されているのでしょうか?
これらはOS依存なのでしょうか?それともコンパイラ依存なのでしょうか?



438 名前:デフォルトの名無しさん mailto:sage [2007/04/30(月) 10:41:58 ]
VC++なら、
たぶん求めてるのはこの中から見つけ出せると思う。
ttp://msdn2.microsoft.com/ja-jp/library/02c56cw3(VS.80).aspx

439 名前:デフォルトの名無しさん mailto:sage [2007/04/30(月) 10:49:34 ]
intってコンピュータが64bitなら64bitになるというものじゃないのですか?

440 名前:デフォルトの名無しさん mailto:sage [2007/04/30(月) 11:00:43 ]
IP64,LP64,LLP64とかでググレ

441 名前:デフォルトの名無しさん mailto:sage [2007/04/30(月) 16:20:50 ]
if文の条件としてキーボードでaが入力されたら〜ということを表したいのですが、
char c;
if((c=getchar())==a)
と言ったものを考えたのですが、
char c;
if((c=getchar())=='a') に直すべきでしょうか。
非常に稚拙な質問ですが、よくわからないので助けてください。


442 名前:デフォルトの名無しさん mailto:sage [2007/04/30(月) 16:26:29 ]
>>441
正しくコンパイルできて動くほうを選べ。

443 名前:デフォルトの名無しさん mailto:sage [2007/04/30(月) 17:07:24 ]
>>442
ごめんなさい、今出先なのでコンパイルできる環境がないもので・・・。
どうか教えていただけませんか。



444 名前:デフォルトの名無しさん mailto:sage [2007/04/30(月) 17:12:29 ]
>>443
教えるも何も >>441 からでは判別不能。エスパーの召喚が必要だ。
コンパイルできない環境で知る必要も無いだろう。帰ってからゆっくり試せ。

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 ]
コマンドプロンプトの履歴?をもっと多く表示させたいんです。
最初のほうの計算がきれてしまいます。






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<249KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef