トップページ⇒tech
1001コメント351KB

【初心者歓迎】C/C++室 Ver.44【環境依存OK】

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん2007/11/03(土) 00:20:13
エスケープシーケンスやWin32APIなどの環境依存なものでもOK。
ただしその場合、質問者は必ず環境を書きましょう。
※sage禁止です(と代々スレに書いてありますが自己判断で)。
【前スレ】
【初心者歓迎】C/C++室 Ver.43【環境依存OK】
http://pc11.2ch.net/test/read.cgi/tech/1190860744/l50
【アップローダー】(質問が長い時はココ使うと便利)
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.htm
0075デフォルトの名無しさん2007/11/04(日) 16:37:47
>>74
ActiveXを使う要領でできるけど道のりは遠い。
0076デフォルトの名無しさん2007/11/04(日) 16:45:15
今更、参照回数計測クラスを自作するのは時間の無駄でしょうか?
やはりshared_ptrを使うのが当たり前ですかね?
0077デフォルトの名無しさん2007/11/04(日) 17:10:22
>>76
よく分かってるじゃない。
0078デフォルトの名無しさん2007/11/04(日) 17:28:45
>>76
「参照回数計測クラスを自作する」ことが目的じゃなければそうすべき。
0079デフォルトの名無しさん2007/11/04(日) 18:06:08
>>77
>>78
レスどうも。C++の勉強のために一度作って動かして、
あとはライブラリを使用します。
仕事でC++を使うときに皆さんどうしてるのかなと思いまして。
0080デフォルトの名無しさん2007/11/04(日) 19:09:26
MSDNの↓をC:/1111.bmpに変えて動かしてみたんだが、エラーがでるんだぜ。
なんでなんだぜ

Image image(L"Grapes.jpg");
graphics.DrawImage(&image, 60, 10);
↓
Image image(L"C:/1111.bmp");
graphics.DrawImage(&image, 60, 10);

あと、線を引いてみよう、文字列を書いてみようも試してみたんだが、画面がマッシロなままなのさ!
0081デフォルトの名無しさん2007/11/04(日) 20:05:55
bccでcをやっています。最近OpanGLを始めました
そうしたら影を付けるところで止まります。
コンパイルは出来るのに、実行すると止まります。
どうすればいいでしょうか。
0082デフォルトの名無しさん2007/11/04(日) 20:18:04
どういう方法で影を付けようとしてるのかわからんから、答えようがない
具体的にどの関数をどういうふうに使ったのか

それと、そこで止まるっていうのはどうやって確かめた?
実は他のところで止まってるのかもしれんぞ

「止まる」っていうのも、もう少し具体的に
アニメーションしてるのが止まるのか、キーやマウスの反応がなくなることなのか、エラーメッセージが出て強制終了くらうことなのか、OSごと落ちるのか
0083デフォルトの名無しさん2007/11/04(日) 20:20:27
つまりソースとエラーメッセージを出せ、と。
0084デフォルトの名無しさん2007/11/04(日) 20:21:26
デバッガ…は無理そうだから、printf(MessageBox)デバッグだな。
0085分からないから寝る2007/11/05(月) 00:44:19
ボーランドのturbo c++(forWin95)を見つけたので図書館からTURBO C++ジョイフルプログラミングという本を借りてきたのですが・・・
一番最初のたった5行の文がコンパイルするとエラーを吐きます

main()
{
 printf("C言語で遊ぼう\n");
 while(!kbhit());
}

3.4行目共にCall to undefined function なんですがなにが悪いんでしょうか?
0086デフォルトの名無しさん2007/11/05(月) 01:12:11
C++ではプロトタイプ宣言のない関数は呼び出せない。
ちゃんと適切なヘッダをインクルードする必要がある。
0087デフォルトの名無しさん2007/11/05(月) 01:48:19
Visual C++ 2005 EE と GCC ではちょっと動作が違うみたいですが、
どちらを使って勉強をすればいいのでしょうか?
0088デフォルトの名無しさん2007/11/05(月) 02:13:05
さぁ?
0089デフォルトの名無しさん2007/11/05(月) 02:16:04
変数名の付け方で時々悩むのですが、
みなさん「ハンガリアン記法」ってのを使ってますか?
0090802007/11/05(月) 02:25:10
仕事で強制されたら使うけど、個人的なプログラムでは使わない
といっても、java使いなんで、Cだとどうなることやら


エラーの原因がトンと分からなかったので、FromFileで読み込めるようなので試してみた。
Image::FromFile(L"1111.bmp");
Image::FromFile(L"C:\\1111.bmp");
Image::FromFile(L"C:/1111.bmp");

ぜんぶ0x00000000(null?)が返ってくる。なんで?
内部で画像の読み込みに失敗して、javaでいうヌルポでも発生してたんかしら?
0091デフォルトの名無しさん2007/11/05(月) 02:30:19
>>87
GCCの方が文法に厳しいので勉強するならGCC
0092デフォルトの名無しさん2007/11/05(月) 02:35:18
こういう時に注意かな
for(int i=0;i<10;i++) cout << i << endl;
cout << i << endl;

で、いらないテクニックを覚える…と
#define for if(1)for
0093デフォルトの名無しさん2007/11/05(月) 07:59:41
>>89
タイプの方なら自然と使ってる。ってか便利。
システムの方は自然と使わなくなった。
0094デフォルトの名無しさん2007/11/05(月) 08:16:02
>>92
さすがに、それはVC++でもNET 2003あたりから
コンパイル通らないほうがデフォルトになった。

>>93
それをいうならアプリケーションハンガリアンではないのか?
0095デフォルトの名無しさん2007/11/05(月) 12:21:07
index が1000万あるとします 
indexごとにファイルを読みに行くとします
このとき、ファイルを一つにまとめるのと、一つ一つ分けるのと、いくつか束にするのではどれが速度速いですか?
ランダムに3個程度のindex値をアクセスすることにします
0096デフォルトの名無しさん2007/11/05(月) 12:29:25
一ファイル当たり10KB以下として、indexは10万とします
このときファイルサイズは最大1Gになります 
indexは、0から10万の数字で与えられるとします
indexごとにファイルの位置を記録しておくか、index名のファイルを10万用意するかですが
どっちが良いですか?
0097デフォルトの名無しさん2007/11/05(月) 13:00:49
あまり細かく分けると、クラスタサイズの制限から容量多く使ってしまいますね
10バイトしか記録しなくても512バイト程度使ってしまいますね
0098デフォルトの名無しさん2007/11/05(月) 14:31:55
Unicode, ShiftJIS, EUC
あたりを相互変換できる文字コードライブラリを探しています。
・言語はCオンリー
・ライセンスがBSD以下のゆるさ
・サイズはなるべく小さめ
・ポータブル
の条件に合うよさげなライブラリがあったら教えてください。
よろしくお願いします。
0099デフォルトの名無しさん2007/11/05(月) 15:53:16
スレ違いでね?
0100デフォルトの名無しさん2007/11/05(月) 16:58:31
配列の入力の時に,EOFだと-1入力で終了になりますよね?
改行で入力終了にしたいのですが,どうすればいいですか?
1 1 0 0 1 0 1 1 改行
で入力を終了したいです。
教えてください。よろしくお願いします。

//---- 配列入力
num = 0;
do {
 scanf("%d", &arr[num]);
} while ( arr[num++] != EOF );   // 改行は入力の終了
num--;                // 有効な入力数
0101デフォルトの名無しさん2007/11/05(月) 17:45:46
>>100
マルチすんなカス
0102デフォルトの名無しさん2007/11/05(月) 19:23:00
>>100

char buf[MAXSIZE];
char *p;

fgets(buf, 99, stdin);

p = strtok(buf, " ");

while(p != NULL) {
 arr[num++] = atoi(p);
 p = strtok(NULL, " ");
}
0103デフォルトの名無しさん2007/11/05(月) 19:24:02
>>100
訂正

char buf[MAXSIZE];
char *p;

fgets(buf, MAXSIZE - 1, stdin);

p = strtok(buf, " ");

while(p != NULL) {
 arr[num++] = atoi(p);
 p = strtok(NULL, " ");
}
0104デフォルトの名無しさん2007/11/05(月) 19:26:35
他の言語のソースを移植すれば良くね?
サイズ小さいライセンスも気にしない
0105デフォルトの名無しさん2007/11/05(月) 19:48:49
-Lオプションで指定したディレクトリのうち
その中にある特定のディレクトリを参照させないようにするにはどうすればいいですか?

たとえば
-L/usr/local/lib と指定したもののうち /usr/local/lib/gcc-4.0.4 は参照しないようにする
とかいう感じです
0106デフォルトの名無しさん2007/11/05(月) 21:02:23
>>95-96
速度は実測が基本。
良い悪いの判断は本人にしかできない。
0107デフォルトの名無しさん2007/11/05(月) 21:07:59
巨大なファイルのシーク時間と、ファイルのオープンに要する時間は一般的にどっちがかかるんですか?
ファイルのオープンの方がコストは多そうですが
0108デフォルトの名無しさん2007/11/05(月) 21:09:47
>>107 聞く前に試せよサル
0109デフォルトの名無しさん2007/11/05(月) 21:20:47
>>107 聞く前に試せよサル
0110デフォルトの名無しさん2007/11/05(月) 21:44:45
>>107
使用するファイルシステムによっても違うしだろうし、ファイルシステム上の断片化などの状態にも依る。
キャッシュに乗ってるかも影響するはず。
試せ。
0111デフォルトの名無しさん2007/11/05(月) 22:21:46
C++でAPIを組んでいるのですが
ttp://www.katsakuri.sakura.ne.jp/src/up29024.txt.html
この項目を入れたら
0x00412984 でハンドルされていない例外が発生しました: 0xC0000005: 場所 0x00090f44 を読み込み中にアクセス違反が発生しました。
とエラーが出るようになったのですが、どこがおかしいのでしょうか?
作っているプログラムの内容は、チェックボックスにチェックが入っているところにEDITボックスを表示する、と言う感じです。
選択した場所によってはうまく動作することもあります。
0112デフォルトの名無しさん2007/11/06(火) 00:37:59
ぶった切り失礼します

文字列をlongに変換するstrtol()という関数ですが
失敗時の返り値が0なのはいいのですが、文字列が"0"だったときの区別のつけ方は
変換不可能な文字列へのポインタの格納先を準備してあげるしかないのでしょうか?
0113デフォルトの名無しさん 2007/11/06(火) 01:31:55
自作関数作れば?
long mystrtol(char *cary, char **ep)
{
if(!strcmp(cary,"0"))
return 0L;
return strtol(cary,ep,10);
}
こんなのとかさ
0114デフォルトの名無しさん2007/11/06(火) 01:58:10
>>113にツッコミたくてたまらない俺はまだまだ修行が足りないな。
0115デフォルトの名無しさん 2007/11/06(火) 02:16:20
>>114
つっこんでやれよ、本人のためにもさ
0116デフォルトの名無しさん2007/11/06(火) 02:16:44
sscanfとか、StrToIntExとか
0117デフォルトの名無しさん2007/11/06(火) 02:24:27
893が75キロ VS 105キロの空手家 体重差 30キロの殴り合い映像
http://video.nifty.com/cs/catalog/video_metadata/catalog_071105039557_1.htm
店でNo4 ホスト VS 黒帯空手家 死闘の映像
http://video.nifty.com/cs/catalog/video_metadata/catalog_071104039294_1.htm
イケメン ホスト VS ブルースリー ボコボコに殴る映像
http://video.nifty.com/cs/catalog/video_metadata/catalog_071103039028_1.htm
893 VS ブルースリー 対決映像
http://video.nifty.com/cs/catalog/video_metadata/catalog_071102038922_1.htm
0118デフォルトの名無しさん2007/11/06(火) 05:27:21
算術命令圧縮って弱点あると思うんですが
例えば0 1の出現率が等しいとするとどのビット列も同じ確率になりますよね?
データの並び順を考えないと駄目ではないですか?
たとえば0000000000000000000000000000011111111111111111111111111111111などは
繰りかえし数を記録することでかなり圧縮できると思うのですが
0119デフォルトの名無しさん2007/11/06(火) 05:42:46
算術命令圧縮ではなくて算術圧縮だったよ 
あと、文書を圧縮するならば前の1、2バイトごとに確率分布表を作って圧縮するといいと思うけど
0120デフォルトの名無しさん2007/11/06(火) 06:39:22
算術の説明だと、1文字ずつの説明だけだけど、初めから5文字の分布を与えても出来るね
確率1%のものがあれば、2^(-7) = 0.0078125 だから小数点以下7桁程度を与えるのが良いと言うことになる
ハフマン圧縮の一般化といえるね
0121デフォルトの名無しさん2007/11/06(火) 13:49:45
class BaseClass{
public:
int a;

BaseClass(){};
~BaseClass(){};
virtual void Func(){};
};

class SubClass : public BaseClass{
public:
int b;
void Func(){};
};

int main(){

BaseClass *pointer = new SubClass[2];

for(int i=0; i<2; i++) pointer[i].Func();

delete [] pointer;

return 0;
}

これでエラー起こるの何故
0122デフォルトの名無しさん2007/11/06(火) 13:53:35
>BaseClass *pointer = new SubClass[2]; 

配列へのポインタはキャストしてはいけない
0123デフォルトの名無しさん2007/11/06(火) 13:58:11
>>122
もし上みたいに子クラスのインスタンスの配列を親クラスのポインタに入れて使いたい場合どうしたらいいんですか?
0124デフォルトの名無しさん2007/11/06(火) 14:04:50
親クラスのポインタの配列を作れば良いじゃないか。
0125デフォルトの名無しさん2007/11/06(火) 14:17:58
申し訳ない…
具体的にはどんな書き方に…?
01261252007/11/06(火) 14:22:08
自己解決しました
ありがとうございました
0127デフォルトの名無しさん2007/11/06(火) 17:52:46
そういうのも自己解決って言うのかw
0128デフォルトの名無しさん2007/11/06(火) 19:06:46
ディジタル技術検定の問題集で「二つの正の整数の積を求めるプログラム」の解説をお願いします。
二つの正の整数の積ということなのですが、二つの整数をかけるだけ(a*b)ではいけないのでしょうか?
while文の処理がさっぱりわかりません。
よろしくお願いします。

#include <stdio.h>
void main(void){
int a,b,prod=0,temp;
printf("a="); scanf("%d",&a);
printf("b="); scanf("&d",&b);
if(a>b){
temp=a;
a=b;
b=temp;
}
while(a != 0){
if(a%2 == 1) prod +=b;
a=a/2
b=2*b
}
printf("product of %d * %d = %d", a, b, prod);
exit(0);
}
0129デフォルトの名無しさん2007/11/06(火) 19:31:10
ループ中の計算をシフトとビット演算で置き換えると
乗除の演算なしで掛け算が出来るなぁ…、なんて。
0130デフォルトの名無しさん2007/11/06(火) 19:33:33
燦然と輝くvoid main(void)
0131デフォルトの名無しさん2007/11/06(火) 19:37:32
>>128
小学校で習った掛け算の筆算を二進数でやってるようなもんだ
01321282007/11/06(火) 19:40:53
>>129 こういうことですか?

while(a != 0){
if(a%2 == 1) prod +=b;
a=a >> 1 /* a=a/2 */
b=b << 1 /* b=2*b */
}
0133デフォルトの名無しさん2007/11/06(火) 20:28:03
>>129
そこはコンパイラの最適化に期待ということでは?
もっとも、これくらいならC/C++でもシフト使えということは同意。
0134デフォルトの名無しさん2007/11/06(火) 22:35:19
というか、そこで*を使ってしまうと、
「じゃあ(a*b)でよくね」みたいな話になるから(w
0135デフォルトの名無しさん2007/11/07(水) 19:47:22
class hoge : public base
{
private:
base* m_base;
};

これって循環ですか?
0136デフォルトの名無しさん2007/11/07(水) 20:25:07
開発中によく見る記述ですが何か心配なことでも?
0137デフォルトの名無しさん2007/11/07(水) 20:58:33
循環なら避けたいんですが、
循環ですか?

hogeの定義にbaseが必要で
でもhogeはbaseを持ってるので
なんか循環っぽいなぁと。
0138デフォルトの名無しさん2007/11/07(水) 21:13:18
ならお前の避けたい循環の意味をちゃんと書けやタコが
0139デフォルトの名無しさん2007/11/07(水) 21:16:02
知ってる人に聞ければいいです。
そもそも知らない人は
自分が知らないのに人に教えられるわけがないでしょう。
0140デフォルトの名無しさん2007/11/07(水) 21:18:34
それじゃ、誰にも答えられないね。
0141デフォルトの名無しさん2007/11/07(水) 21:20:44
>>140
全知全能の神光臨。
0142デフォルトの名無しさん2007/11/07(水) 21:29:49
循環じゃないよ
0143デフォルトの名無しさん2007/11/07(水) 21:30:14
とりあえず循環参照が起こる可能性は充分すぎるほどに有るわな。
ただ場合によるので、具体的にやりたいことを示してくれないと問題点の指摘は出来ん。
0144デフォルトの名無しさん2007/11/07(水) 21:33:34
baseの定義にhogeを必要としてたら循環定義
0145デフォルトの名無しさん2007/11/07(水) 21:35:38
循環ってのは
class sage の宣言に class age を使ってて
class age の宣言に class sage を使ってる場合。

よって循環ではないべ?
0146デフォルトの名無しさん2007/11/07(水) 21:36:24
>>135
普通に連結リストかなんかでありそうな気がするが
0147デフォルトの名無しさん2007/11/07(水) 21:38:30
>>140の立場wwwwww
0148デフォルトの名無しさん2007/11/07(水) 21:43:03
で、結局どっちの意味で循環って言ってるのよ?>>135は。
0149デフォルトの名無しさん2007/11/07(水) 21:43:04
>>135
あほすぎ
0150デフォルトの名無しさん2007/11/07(水) 21:55:38
>>149 = 顔をつぶされた>>140
0151デフォルトの名無しさん2007/11/07(水) 22:08:21
>>150
はずれ
0152デフォルトの名無しさん2007/11/07(水) 22:19:11
>>135
エスパーがいない可能性を考えないのか?
0153wolf ◆8VH3XAqjlU 2007/11/07(水) 23:08:13
>>135
base<---hogeで循環は存在しないけど
m_base = new する第3のクラスを含めた循環に注意です
0154デフォルトの名無しさん2007/11/08(木) 00:11:41
で、結局誰もまともに答えられないんですね。がっかりしました。
0155デフォルトの名無しさん2007/11/08(木) 00:51:46
>>154
>>153
0156デフォルトの名無しさん2007/11/08(木) 00:59:52
それはもう読みましたよ。
0157デフォルトの名無しさん2007/11/08(木) 10:37:40
>>156
お仕事頑張ってくださいね
0158デフォルトの名無しさん2007/11/08(木) 10:38:57
なるほど循環参照の事か
0159デフォルトの名無しさん2007/11/08(木) 11:07:44
>>154
聞いてる時点でお前はそれ以下じゃんw
0160デフォルトの名無しさん2007/11/08(木) 11:28:52
>>158

>>137読めば分かるだろ。
0161デフォルトの名無しさん2007/11/08(木) 16:06:16
>>159
それはつまり、回答者と質問者の理解度を対等に比較するのが
あなたにとっては「自然」である、ということですよね?
でもそれって、教師の知識が怪しい、という話をしている時に「生徒はそれ以下じゃんw」と
返すようなものですね。
こっちは、そういうレベルの人間が、知識を持っているという嘘をついて「教壇に立」って、
誰かに物を教えるのが間違いである、という点を言っているんですよ。
そういうレベルの人に回答者になってもらっては困るんです。質問者も、場も、混乱するだけなので。

確かに理解度は俺のほうが下です。
でも、あなた方も俺と同じ、質問者レベルなんです。回答者気取りをされると邪魔なのです。
そういうことです。
0162デフォルトの名無しさん2007/11/08(木) 16:10:41
社会性の無いキチガイが紛れ込んでますね
0163デフォルトの名無しさん2007/11/08(木) 16:15:12
>>161
何を聞きたいのか分かりません

実体の循環参照ならコンパイルできないので安心して下さい
ポインタを使う限り循環参照になる可能性は常にあります
諦めて下さい
0164デフォルトの名無しさん2007/11/08(木) 16:28:37
プログラムの勉強に飽きたら2,3日何もしないとかいう人いる?
0165デフォルトの名無しさん2007/11/08(木) 16:31:58
>>161
がっかりするとは俺もお前にがっかりだ
0166デフォルトの名無しさん2007/11/08(木) 16:32:03
勉強つーか趣味のコーディングではよくある。一週間以上になることもしばしば。
0167デフォルトの名無しさん2007/11/08(木) 17:15:41
リアルで >>161 は空気読めない人って
周りから言われるんじゃね?

教師は仕事で金もらって教えてるわけだが、
ここは2chだしなー
質問者はこうあるべき!
回答者はこうあるべき!
とか真面目に言われてもなー

郷に入れば郷に従えっていうから、
説教長文書くより、どうすれば
2chで回答を得られる可能性が高くなるのか?
を考えたほうが現実的。

妥協できないなら、ネットで質問なんてするな。
第三者からみれば、あんたが荒らしだから。
0168デフォルトの名無しさん2007/11/08(木) 17:35:28
釣られすぎ。
0169デフォルトの名無しさん2007/11/08(木) 17:58:31
>>162
まったくです。困ったものですね。
人に何かを教える立場というのは、自己顕示欲の異常に強い人達にとっては
魅力的なものなのでしょうね。だからそのスキルも無いのに気取りたがるのでしょう。

>>165
がっかりする分には好きなだけがっかりしてもいいですよ。
能もないのにでしゃばったりしないこと、これを学習することのほうが大切です。

>>167
「ここは2chだし理論」で物を言う人は、相手の言い分にもきちんとそれを適用して、
ここは2chなのだから説教なんかしてもしょうがない、という風に思い至るべきですよ。
ある理屈を、ある側にだけ適用するのはおかしな言動だと言わざるを得ません。
それから、「2chで回答を得られる可能性」は、この場合関係ありません。
回答者が回答できるレベルにあれば、それで解決していたことなので。
あと、第三者というのを一つの意志のように語るのは気持ち悪すぎです。
あっちの第三者と向こうの第三者は、異なる意識を持っているのです。
架空のみんなが自分を支持する夢から出て、自分の名義で物を言いましょう。
01701672007/11/08(木) 18:14:58
うわーすごいな
だから空気読めといっとろうが

質問してみた
↓
バカにされた
↓
マジ反論 ←いまここ

まともな回答もついてるんだからさ
それでいいじゃん?
これ以上何を望んでるの?
01711672007/11/08(木) 18:16:16
釣りなら見事に釣られたわけだがな>俺
0172デフォルトの名無しさん2007/11/08(木) 18:37:21
釣りでしょ。少なくとも>154は漏れだし。
0173デフォルトの名無しさん2007/11/08(木) 19:19:35
>>170
ダメ回答者達が維持したがっているダメな空気は、読んだ上で否定しています。
そんな種類の空気に支配的になられては困るので。
01741732007/11/08(木) 19:32:48
ごめん釣りでした。
■ このスレッドは過去ログ倉庫に格納されています