スレを勃てるまでもな ..
[2ch|▼Menu]
403:デフォルトの名無しさん
09/05/29 22:23:14
while(条件){
cin >> x1 >> x2;
(以下if文)

のように記述して、ループさせています。
EOFでwhileのループを終了させたいとき条件はどう書いたらいいのでしょうか?

よろしくおねがいします。

404:デフォルトの名無しさん
09/05/29 22:24:33
>>402
ありがとうございます。
ということは、「1が53になるまで+1しながらdo以下の処理を繰り返す」っていうのは、
1 step +1 until 53 do
であってますか?

405:デフォルトの名無しさん
09/05/29 22:43:57
それC/C++じゃないじゃん。スレ違い

406:デフォルトの名無しさん
09/05/29 22:55:58
>>401
どこの言語だ。
最近スレ違いがおおいな。

407:デフォルトの名無しさん
09/05/30 10:46:34
VS2005proです
#pragma region
〜処理を記述〜
#pragma endregion
このおまじないは、どういう意味を持つのですか?教えてくださいエロイ人

408:デフォルトの名無しさん
09/05/30 10:48:14
>>407
折りたたみ機能

409:デフォルトの名無しさん
09/05/30 10:53:12
>>408thx
syntaxには関係ないものか、あまり役に立たない機能だな

410:デフォルトの名無しさん
09/05/30 11:24:58
templateを展開した後のコードを生成するようなフリーソフトってなんかいい感じのありますか?

411:デフォルトの名無しさん
09/05/30 11:39:14
すいません、質問です。
アマゾンで古本を販売していて
販売価格を簡単に改定できるソフトを探しています。
改定ソフトは.netフレームワークでプログラムが作られてるようなのですが
プログラミングの知識がまったくない素人が売ってるのを購入せず
同じようなものを作るにはどれぐらいの時間がかかりそうですか?

プログラム自体はアマゾンサイトから価格データを集めるのがメインで
それほど難しくなさそうに見えるのですが。(素人なので直感です)

価格改定ソフトの一例です
URLリンク(6plan.net)

やっぱりめちゃくちゃ難しいんですかね?

412:デフォルトの名無しさん
09/05/30 12:01:41
>>411
とりあえず君のプログラミングスキルを教えてくれ。
ここはC/C++スレだからC/C++のスキルに関しても。


413:デフォルトの名無しさん
09/05/30 12:06:15
>>412
すいません、プログラミング知識はゼロです。

コンピュータ用語がわかる程度
良く言ってシスアドレベルだと思います。

414:デフォルトの名無しさん
09/05/30 12:08:47
>>413
0からだと果てしなく険しいと思う。
少なくともC/C++でやるなら相当苦労しそうだ。

他の人の意見も聞きたいところだけど、
やるにしてもせめて初心者にやさしい超高級言語で挑戦したとして
果たして何ヶ月かかるだろうか。。。

415:デフォルトの名無しさん
09/05/30 12:15:27
プログラムの取得にかかる時間は個人差がある。
独学ならなおさら。

半年で5つの言語を習得してプログラミング言語自体を作ってしまう高校生もいれば、
いくら頑張っても途中で挫折する人間も大勢いる。

416:デフォルトの名無しさん
09/05/30 12:18:48
>>415
>半年で5つの言語を習得してプログラミング言語自体を作ってしまう高校生もいれば、
だれ?

417:デフォルトの名無しさん
09/05/30 12:44:48
>>411
業務時間内に作ろうと思ってるならやめた方がいい
よほどの天才じゃない限り買った方が安い

418:デフォルトの名無しさん
09/05/30 12:52:16
>>415-417

レスありがとうございます。
それほど難しいものなんですか。
おとなしく製品を購入することにします。

ちなみにシスアド程度の素人がプログラムを楽しもうと
思う場合、ExcelとかのVBAなら比較的簡単に習得できるものなんですか?
あくまでも趣味程度しか時間はさけませんので。

419:デフォルトの名無しさん
09/05/30 13:16:37
極端な例を出して話をはぐらかすやつって馬鹿なの?

420:デフォルトの名無しさん
09/05/30 15:04:51
char x1,x2;としてこれをwhileで繰り返し、if文でx1==x2の判定をしながら、
文字列のランレングス符号化をしたいです。
どう書けばいいでしょうか?

421:デフォルトの名無しさん
09/05/30 18:59:17
グローバル変数と性的変数ってどっちのほうがメモリ容量多く使うのでしょうか?
また、staticを何個も書くのはまずいですか?

422:デフォルトの名無しさん
09/05/30 19:00:00
静的変数の間違いでした。

423:デフォルトの名無しさん
09/05/30 19:25:54
>>421
たいていの場合、グローバル変数とstatic変数は同じ扱いになる
static変数を何個も書くこと自体は問題ない。
性能面、安全面で自動変数より劣ることはあるかもしれない。

424:デフォルトの名無しさん
09/05/30 19:32:11
グローバル変数のほうが、シンボル情報がオブジェクトファイルに含まれるので
.objなり.oなりが大きくなる

と全然意味の無いことを言ってみる

425:デフォルトの名無しさん
09/05/30 19:43:53
ヘッダーファイルの値をいくら変えても反映されません。
どうやらパソコンを起動してから最初に実行した時の値が以後ずっと使われているようです。
PCを変えて実行してみましたが、同じ不具合が発生しています。
原因がわかるかたいませんか?

426:デフォルトの名無しさん
09/05/30 19:53:43
日本語でおk

427:デフォルトの名無しさん
09/05/30 20:02:01
説明しようにも不具合の原因がわからなすぎて、上手く説明できません。

ソースファイルの更新はしっかり反映されるのに、ヘッダーファイルの更新は最初の一度しか反映されないのです。

428:デフォルトの名無しさん
09/05/30 20:05:58
その.hをincludeした.cで printfしてみれ
それでも反映されないのなら、コンパイラのバグじゃね

429:デフォルトの名無しさん
09/05/30 20:14:43
どうやら値事態はしっかり反映されているようです。
しかし、その値と変数を比較する部分が正しく動作しません。
友人と全く同じプログラムですが、実行結果が違います。(アカウントは違います。)

430:デフォルトの名無しさん
09/05/30 20:20:44
ヘッダーを書き換えた後にそれをインクルードしているソースはコンパイルしなおしているよな?
一応OSと環境(VC++とかgccとか)よろ

431:デフォルトの名無しさん
09/05/30 20:20:56
学校の課題は先生に訊きなさい

432:デフォルトの名無しさん
09/05/30 20:24:59
複数あるソースファイルのうち、その比較部分があるファイルにprintf文をつけたところ、値の比較が正しく行われるようになりました…。
当然、友人らはこのソースファイルには手をつけなくても正しく動作しています。
全くもって理解不能です。

433:デフォルトの名無しさん
09/05/30 20:32:11
こんな言葉がある
『プログラムは思ったとおりに動かない。書いたとおりに動くのだ』

434:デフォルトの名無しさん
09/05/30 20:37:43
printf文をつけることで関係無い部分が正しく動くようになったのですよ。
理解不能(^q^)

435:デフォルトの名無しさん
09/05/30 20:41:57
>>430の言ってることが答えな気がする
printf文を加えたソースファイルをコンパイルしなおしたことでヘッダファイルの変更が反映されたと

436:デフォルトの名無しさん
09/05/30 20:47:47
>>435
別のソースファイルにつけたときは正しく比較部分が正しく動かなかったです。
(ヘッダーで設定した数値は正しく表示された)

日本語が不自由ですみません。

437:デフォルトの名無しさん
09/05/30 20:58:48
そんなときにはソリューションのクリーン→ビルド

438:デフォルトの名無しさん
09/05/30 21:11:50
>>436
いやだから、別のソースファイルの時は今回直したソースファイルをコンパイルしなおしていないんじゃないか?ってこと

439:デフォルトの名無しさん
09/05/30 22:44:16
とりあえず環境、ヘッダとかのファイル名と実行したコマンドを書け。

440:デフォルトの名無しさん
09/05/30 23:53:16
C言語の質問です。お願いします。
{
int i;
char ch;
scanf("%d", &i);
printf("%dです。\n", i);
scanf("%c", &ch);
printf("%cです。\n", ch);
return 0;
}
というプログラムを実行し例えば4と打つと
4
4です。

です。
と表示されてしまいます。
何故、scanf("%c", &ch)は無視されるのでしょうか?
4
4です。
s
sです。
と言った具合に表示させたいです。

441:デフォルトの名無しさん
09/05/30 23:59:06
URLリンク(www.google.co.jp)

442:デフォルトの名無しさん
09/05/31 00:01:12
virtualってつけれるところは全部つけとけばおkなんですか?

443:デフォルトの名無しさん
09/05/31 00:12:38
>>440
4の次に入力された改行文字が、2回めのscanfで読み込まれるから。
scanf("%d%*c", &i);
のようにして、改行文字を1回めのscanfで読み込ませればいい。

444:デフォルトの名無しさん
09/05/31 00:21:25
>>441
>>443
ありがとうございました。
おかげさまで解決しました。

445:デフォルトの名無しさん
09/05/31 00:25:31
>>442
副作用としては、
・オーバーライドするつもりのない関数を間違ってオーバーライドする可能性がある
・多分、メモリ使用量が幾分増える
ってのがある。

446:デフォルトの名無しさん
09/05/31 03:57:21
Cの乱数をsrandとtimeを使って毎回違うようにするのは
わかったのですが、二つの乱数をほぼ同時に出す場合、どうすれば
その二つの乱数をバラバラにする事ができますか?

具体的には戦闘ゲームなのですが、
コチラの攻撃が1~30までで、相手も1~30までの値で
攻撃してくるときに、1~30までの値を返す関数を
srandで初期化してrand()%30+1の値を返すという風に作りました。
しかし、自分の攻撃値も上の関数でけっていし、それにほぼ同時
(すぐ次の行で)相手の攻撃値も決定しているのですが、そうすると
どうしても自分の攻撃値と相手の攻撃値が同じになってしまいます。
時間がほぼ同時ぐらいのタイミングで処理するとどうしても
このようになってしまうと思うのですが、どのようにすれば別々の値に
できるでしょうか?よろしくおねがいします。

447:デフォルトの名無しさん
09/05/31 04:04:51
srandで初期化するのは、プログラム中1回だけでいい。

面倒なら、srand呼ばないようにすればとりあえずランダムな値は取れる。

448:デフォルトの名無しさん
09/05/31 04:16:45
同じだったらもう一回randすればいいんじゃないの

449:デフォルトの名無しさん
09/05/31 04:30:35
乱数シードに IP アドレスとかプロセス ID とかを加算
てか同じプロセス内のコードか??? なら初期化は一回だけであとは rand を呼べばいい

450:デフォルトの名無しさん
09/05/31 05:18:53
質問なのですがお願いします。
c++、bccを使用しています。

char si[1000];
char sj[1000];
cin>>s1;
cin>>s2;

と二つの配列を作って、こんぱいる実行したら

「_             」

とうまく入力待ちになりました。しかし、

char si[1000];
char sj[1000];
cin>>s1;
cin>>s2;
array[1000][1000][5];

では、


 c:\bcc\test>      」

と表示されて、たぶん実行終了した状態になるのですが、
原因を教えてくださいませんでしょうか?おれがうんこなのでしょうか?

451:450
09/05/31 05:20:12
全力で間違えました。

char si[1000];
char sj[1000];
cin>>s1;
cin>>s2;
int array[1000][1000][5];

でうまくいかないのでしあt

452:デフォルトの名無しさん
09/05/31 05:23:32
領域確保しすぎてスタックオーバーフロー?
配列をグローバルにしてみよう

453:デフォルトの名無しさん
09/05/31 05:24:01
>>451
>int array[1000][1000][5];

これ単純に大きさを計算したら1000×1000×5×4=約19MBとなって
スタックのデフォルトの大きさ1MBを超えるから異常終了する

スタックを大きくするかstaticを付けてBSSに配置するかだな

454:デフォルトの名無しさん
09/05/31 06:35:37
Visual Studio 2005 Proですが
array<String^>^ getFilterName_St();
Bitmap^ sample_grab();
Bitmap^ sample_grab2(Bitmap^ bmp);
こういう書き方って、.NET対応CLIの実装ですよね、NativeなC/C++では使えないコードですよね。


455:デフォルトの名無しさん
09/05/31 08:37:19
うん

456:デフォルトの名無しさん
09/05/31 09:06:28
>>455Thx分かりました。
.NETのCLIって、C/C++のコードも混在することができるんですね、templateや関数オブジェクトがすらすら書けない俺には無用なものですね。

457:450
09/05/31 11:42:01
ありがとうございました。
mainの外に追い出したところ、何とか起動しました。
途中で強制終了されたけど。。。なんかでかい配列を扱うのはすごく大変ですね。

ありがとうございました!

458:デフォルトの名無しさん
09/05/31 13:25:55
ある動的配列の要素全てが0以下である
をループを抜ける条件としたいのですが、何か良い方法はありますか?

今はforで要素全てを判定させて、全て0以下なら
変数aを1、このaが1ならループを抜けるとしています

459:デフォルトの名無しさん
09/05/31 13:47:38
O(n)未満の方法はないんじゃないかな
なのでその方法がベスト
もし、STLに関数型言語のforallやexistsのようなものがあれば
記述的に楽は出来るだろうが
やる計算的には>>458の方法と同じになるし

460:デフォルトの名無しさん
09/05/31 13:49:41
Pstade.Ovenライブラリを使って

oven::forall(xs, _1 <= 0)
を終了条件にすればいい

ただしxsは対象である動的配列の型で、かつ
xsの型がsingle pass rangeのコンセプトを満たす必要がある
vectorやlistはこのコンセプトを満たす

461:デフォルトの名無しさん
09/05/31 13:52:40
>>458
それでいいんじゃないの?

あまりにも大量のデータを頻繁にチェックするというのなら、
配列に書き込む時点で値が0以下かどうかチェックするという方法もあるけど。
(配列への書き込みが大量に発生するようだと、これも効率的でなくなるが)

462:デフォルトの名無しさん
09/05/31 13:58:53
while( !isAllNegative(array, size) ) 〜;

isAllNegative(int *array, int size){
    for(int i = 0; i < size; ++i)
        if(array[i] >= 0)
            return false;

    return true;
}

463:デフォルトの名無しさん
09/05/31 14:00:15
ああ、そのほうが良いな。アホだった
あと、そのプログラム、条件>=じゃなくて>にしないと

464:458
09/05/31 14:31:22
ありがとうございます!
全部試してみますね

465:デフォルトの名無しさん
09/05/31 16:34:51
他人の作ったクラスを継承するのって危険ですかね?

466:デフォルトの名無しさん
09/05/31 16:37:52
継承する想定で設計しているならそうでもないんじゃないの。
まぁ作った奴のスキルがどれだけ信用できるかだが。

467:デフォルトの名無しさん
09/05/31 16:56:40
自分で定義したクラスでも意識してないと
Liscov Sutstitution Principleは簡単にぶっ壊れるのになにをかいわんやだ

468:デフォルトの名無しさん
09/05/31 17:06:56
プライベート継承しただけで壊れるんだっけ

469:デフォルトの名無しさん
09/05/31 17:09:19
女でプログラマは何割くらいいますか?

470:デフォルトの名無しさん
09/05/31 17:32:53
一割いないね。

471:デフォルトの名無しさん
09/05/31 17:42:00
トンクス 

472:デフォルトの名無しさん
09/05/31 17:42:25
女でプログラマで美人で性格いい人は何割ぐらいいますか?

473:デフォルトの名無しさん
09/05/31 18:55:38
本当に人口の半分は女なのか疑わしくなってくる

474:デフォルトの名無しさん
09/05/31 18:59:10
女優遇社会だからな。酷い男社会とは別の贅沢な環境で生活してるんだよ。

475:デフォルトの名無しさん
09/05/31 19:06:42
主夫になりたい

476:デフォルトの名無しさん
09/05/31 19:18:18
前にも質問したんですが、メモリをファイルに見せかける方法か、
ramディスクを動的に生成する方法ありますか。

477:デフォルトの名無しさん
09/05/31 19:21:25
DOSコマンドでファイルへ出力するものを直接メモリに入れたいのですが。無理でしょうか。
標準出力ではなく、ファイルへの出力の場合です。

478:デフォルトの名無しさん
09/05/31 20:06:40
mmapとか、MapViewOfFileとか、その辺を調べるといいかも。

ただし俺だったら出力関数にファイルに出力するかメモリに書き込むかを
指定するフラグをつけるけどな。

479:デフォルトの名無しさん
09/05/31 20:08:14
>>476
メモリマップドファイルというのがある
それ専用のWindowsAPIがあるから、他でもOSレベルのAPIがあるんじゃね

480:デフォルトの名無しさん
09/05/31 20:12:08
ファイルをメモリのように扱うのではなく、
メモリをファイルのようにしたいのですが。
メモリを借りてきて、Zドライブを作るとかです。
普通のドライブのようにアクセスする方法はないですか

481:デフォルトの名無しさん
09/05/31 20:14:51
えっ

482:デフォルトの名無しさん
09/05/31 20:14:55
---hoge.h---
class Hoge{
public:
メンバ関数;
private:
void *mMember;
};
-----------
--hoge.cpp--
namespace{
struct Member{hoge hg}; //コンストラクタでmMember = (void *) new Member; アクセスは(Member *)mMember
privateメンバ関数の代わりの関数;
}
メンバ関数;
-----------
めんどくさそうだけど、カプセル化にこだわるならこんな感じのほうがいいんでしょうか?

483:デフォルトの名無しさん
09/05/31 20:18:54
>>480
RAMディスク Windows
とかでぐぐれ。

484:デフォルトの名無しさん
09/05/31 20:21:30
>>482
こだわるならそんな感じだけど、そこまでこだわる必要があるケースは稀。

485:デフォルトの名無しさん
09/05/31 20:21:33
RAMディスクをプログラムが動いているときだけ生成して、終了したら解放する方法はないですか?
既存のDOS EXEで、出力がファイルのやつを直接メモリに格納して高速化したいです。

486:デフォルトの名無しさん
09/05/31 20:25:52
RAMディスクつくるソフトを制御して
起動時にRAMディスク作らせて、終了時にRAMディスク開放させればいいのでは?

487:デフォルトの名無しさん
09/05/31 20:29:44
汎用性がある方法はないですか
ソフトをインストールしてもらわないと出来ません

488:デフォルトの名無しさん
09/05/31 20:40:26
単に、バーチャルなファイルシステムをかますだけでしょ。作った方が早い

489:デフォルトの名無しさん
09/05/31 20:43:05
USBカメラから画像を取り込みたいんですが、よくあるUSBカメラを使うソフト
とかってどうやってるんでしょうか?

490:デフォルトの名無しさん
09/05/31 20:58:48
既存のDOS EXEって何よ?

491:デフォルトの名無しさん
09/05/31 21:14:14
>>489
USBカメラがそうなっているかは分からんが、TWAINという共通化インターフェースがある

492:デフォルトの名無しさん
09/05/31 21:19:51
カプセル化という物を勉強したのですが、一度しか使わない計算でも
関数を定義して別ファイルに値を渡し、戻り値をmainに渡すようにしたほうがよいのでしょうか?


493:デフォルトの名無しさん
09/05/31 21:22:02
ありがとうございます。TWAIN初めてききました
直接カメラのドライバをたたいてるのかと思ってたけど、こんな便利なのがあったんですね

494:デフォルトの名無しさん
09/05/31 21:34:23
>>492
必要に従いカプセル化する。何でもかんでもカプセルにして密閉化すると。
オブジェクト指向原理主義者になるw

495:デフォルトの名無しさん
09/05/31 21:39:04
>>492
突き詰めると決着が付かないような議題
個人的にはほんの数行(最大4行ぐらい)で、そこでしか計算しないんだったら埋め込む
ただ
>関数を定義して別ファイルに値を渡し、戻り値をmainに渡す
が何を言ってるのかがわからなくて心配

496:デフォルトの名無しさん
09/05/31 21:51:10
>>492
それはカプセル化というよりはリファクタリングに関係してるように思う
俺の場合、ある処理を2回行うようになった時点で関数化する
逆に1回しか使う場所がないのに無駄に抽象化した関数は定義しないようにしている
C++の抽象化能力では、これは常に出来ないのは若干悩みの種

カプセル化は、ライブラリのように
他人もそのコードを使うケースで意識すればよいと思う

497:デフォルトの名無しさん
09/05/31 21:54:50
>>477
出力ファイル名にCONを指定して標準出力へ出せるようにならない?
それで動くなら、あとはリダイレクトできるでしょ。

498:デフォルトの名無しさん
09/05/31 22:01:18
>>494-496
ありがとうございます
一人だから問題ないのですが、逆に指摘してくれる人がいないのが難点です


499:デフォルトの名無しさん
09/06/01 00:08:32
スタイルの問題で答えはないと思うけど、マクロってインデントするべきかな?

#ifndef CLASS
 namespace Name
 {
  class Class
  {
  public:
   foo bar();
   #ifdef _DEBUG
    hoge fuga();
   #endif
  }
 }
#endif

#ifndef CLASS
namespace Name
{
 class Class
 {
 public:
  foo bar();
#ifdef _DEBUG
  hoge fuga();
#endif
 }
}
#endif

悩む・・・

500:デフォルトの名無しさん
09/06/01 00:26:03
#ifndef CLASS
なんたらかんたら
# ifdef _DEBUG
なんたらかんたら
# endif /* _DEBUG */
なんたらかんたら
#endif /* CLASS */
とやるのが普通かな。

プリプロセッサディレクティブは、行の先頭を#で始めなければならない。
規格のどのセクションだったかもう覚えてないけど。

フリーソフトウェアのソースを読んで勉強したら良いかもしれない。

501:デフォルトの名無しさん
09/06/01 00:53:26
そう?
手元のANSI C言語辞典には#の前に空白類があってもよいと書いてあるけど。
もちろんそんな書き方誰もしないということは同意だ。

502:デフォルトの名無しさん
09/06/01 00:59:31
#if foo
 #if bar
  #include <momo.h>
 #else
  #include <taro.h>
 #endif
#endif

のような例はよくみかける。 

503:デフォルトの名無しさん
09/06/01 01:25:41
自分は普段はこう書くな。

#if foo
# if bar
# include <momo.h>
# else
# include <taro.h>
# endif
#endif

行頭に#があったほうが見た目わかりやすいと思う。




504:503
09/06/01 01:27:01
#if foo
# if bar
#  include <momo.h>
# else
#  include <taro.h>
# endif
#endif

こうな。


505:デフォルトの名無しさん
09/06/01 01:36:32
Windows98のメモ帳でのプログラムの実行の仕方を教えて下さい
因みに入力したのはC言語のprintf何たらの簡単なプログラムです


506:デフォルトの名無しさん
09/06/01 01:41:44
書いたコードをここに貼り付けて、右下のボタンを押せ。
URLリンク(codepad.org)


507:デフォルトの名無しさん
09/06/01 05:53:03
>>502
俺もそう書くわ。
特に多いのが
#ifndef __BORLANDC__
 高度な処理;
#else
 低度な処理;
#endif
みたいにコンパイラで処理を分けたりとか、あとはデバッグの時かな。


508:デフォルトの名無しさん
09/06/01 06:27:58
1.下の多重ループで「A」は何行何列に表示されるか.
for(j=1;j<=2;j++) {
for(k=1;k<=3;k++) {
printf("A");
}
printf("\n");
  }
2.下の多重ループで「A」は何行何列に表示されるか.
for(j=1;j<=5;j++) {
for(k=1;k<=4;k++) printf("A");
printf("\n");
  }

1は2行3列で2は4行5列ですか?


509:デフォルトの名無しさん
09/06/01 07:30:16
>>506
すみません
ネットに繋げてないのでメモ帳での方法を教えて下さい

510:デフォルトの名無しさん
09/06/01 10:56:47
>509
別にメモ帳だろうが何だろうが、Cのプログラムには関係ないよ。
もちろん効率とかは違うだろうけど。

511:デフォルトの名無しさん
09/06/01 11:32:44
>>509
エスパーすると、コンパイラの使い方がわからないんだろう
そもそも509はC言語のコンパイラを持っているのか?
例えばVC,BCC,GCCなど。

512:デフォルトの名無しさん
09/06/01 12:13:08
持ってないだろうねえ。でも、
最初の一歩も自分で踏み出せない奴を
どうにか歩かせたところで無駄じゃね?

513:デフォルトの名無しさん
09/06/01 13:27:29
最小2乗法によるm次の多項式近似を行うプログラムを教えてください
教えて

xがー2の時yが3.02
−1の時0.98
0の時1.22
1の時2.16
2の時2.61         の時のです
出来ればソース全文書いてください




514:デフォルトの名無しさん
09/06/01 14:16:58
>出来ればソース全文書いてください
>出来ればソース全文書いてください
>出来ればソース全文書いてください

515:デフォルトの名無しさん
09/06/01 14:20:25
>>513
マルチすんなカス

516:デフォルトの名無しさん
09/06/01 16:18:56
符号なしenumがほしいんですが、なにか代替案はありますかね?今は
typedef const unsigned long uenum_t;
uenum_t foo = 0, bar = 1, hoge = 2 ・・・;
みたいに地道に書いて我慢してるんですが
省略記法が使えなくてめんどいし、メモリももったいない気がします

517:デフォルトの名無しさん
09/06/01 17:25:11
半角テキストファイルを読み込んで使用する場合
空白文字も含めて一つの変数orクラスに格納したいんですが
どうすればいいでしょうか?
というかなぜ空白で一々区切られるのでしょうか?
EOFでいいじゃないですか?

518:デフォルトの名無しさん
09/06/01 17:27:29
getlineでいいんじゃない?

519:デフォルトの名無しさん
09/06/01 17:49:17
getlineって一行だけじゃなかったっけ?

520:デフォルトの名無しさん
09/06/01 20:39:48
whileのループをEOFで抜けだし、出力するようにしたのですが、
出力後、プロンプトが出てきません。ctrl+Zで中止しないといけない状態です。
なぜ出てこないのでしょうか?

よろしくお願いします。

521:デフォルトの名無しさん
09/06/01 20:44:30
ループにでも入ってるんじゃない?

522:デフォルトの名無しさん
09/06/01 22:51:06
for(a=0;a<3;a++){
for(b=0;b<20;b++){
     if(hensu<0){
       処理1;
}
else{
       処理2;
     }
}
}

このようなfor文で、処理1もしくは処理2を実行したら
二つのfor文を一度に抜けたいのですが、どうすれば可能でしょうか?
処理のあとにbreakひとつじゃ後のfor文しかぬけないため、また処理1か2を実行してしまうので
困ってます。
goto文?というのはなるべく使いたくないのでそれ以外で何か簡潔にできますでしょうか?

523:デフォルトの名無しさん
09/06/01 22:55:08
俺は普通に終了フラグを作る

524:デフォルトの名無しさん
09/06/01 22:56:20
典型的な「gotoを使うと綺麗に書ける例」だな。

どうしても使いたくないなら
 ・ループ終了を示すフラグ用の変数を用意しておき、そのフラグの値をチェックして外側のforループから抜ける
 ・全体を関数にしてしまい、returnで抜ける
とかどうか。


525:デフォルトの名無しさん
09/06/01 22:58:27
int end = 0;
for(a=0;a<3 && !end;a++){
for(b=0;b<20 && !end;b++){
if(hensu<0){
処理1;
end = 1;
}
else{
処理2;
end = 1;
}
}
}

もしくは関数化して、returnで抜けるとか。

526:デフォルトの名無しさん
09/06/01 23:00:31
男3人が結婚かよ

527:デフォルトの名無しさん
09/06/01 23:09:54
C言語の本を買ってきて、printfなるものをWindowsのメモ帳に入力したけど、どうしたら実行出来るの?

528:デフォルトの名無しさん
09/06/01 23:12:53
C言語の本に書いてあるんじゃね?

529:デフォルトの名無しさん
09/06/01 23:13:08
そのC言語の本に実行までのやり方が書いてないなら、
それが書いてある入門本を買いに本屋に走るんだ。

530:デフォルトの名無しさん
09/06/01 23:13:10
そのC言語の本を1ページ目から読み返せ。
それで分からなければタイトル晒して燃やせ。

531:デフォルトの名無しさん
09/06/01 23:13:58
また多重婚だねっ♪

532:デフォルトの名無しさん
09/06/01 23:19:00
2重のループを無理やり1重のループに変換する

533:デフォルトの名無しさん
09/06/01 23:20:52
aに3を入れる

534:デフォルトの名無しさん
09/06/01 23:21:06
>>523-524
フラグをつくる場合、>>525さんが書いて頂いたような
フラグの仕方が一番コード書く上では綺麗なのでしょうか?

関数化もよさげですね。ただあまり関数を増やしたくないのもあるので
使わずにすむならそっちのが使いたいです

535:デフォルトの名無しさん
09/06/01 23:22:34
フラグと書いた俺はフラグが基本だ。他は好みだろ

536:532
09/06/01 23:25:30
誰も思いついてない方法だから俺様の勝ち

int a, b;
for(x=0; x<60; x++){
  a = x/20; b = x%20;
  if(hensu < 0){
    処理1;
  }
  else{
    処理2;
  }
}

537:デフォルトの名無しさん
09/06/01 23:26:55
>>536  −見るー> >>532

538:デフォルトの名無しさん
09/06/01 23:29:37
・ループ終了を示すフラグ用の変数を用意しておき、そのフラグの値をチェックして外側のforループから抜ける

あれでもこれだと、内側のループをまずbreakで抜けて、抜ける前にフラグをたてて
で、抜けたあとに外側をそのフラグでみるということかな?
でも外側のループから抜けるってどうやるんだろう

539:デフォルトの名無しさん
09/06/01 23:34:46
例の通りなら hensuの比較bool だから a=0,b=0 時点で必ずループ終了を要求することにならないか?

540:デフォルトの名無しさん
09/06/01 23:35:11
つうか処理1もしくは処理2は初回で確実に実行されるんじゃないのかfor文いらなくね

541:デフォルトの名無しさん
09/06/01 23:36:36
俺もそれ思ったwアルゴリズムが変

542:デフォルトの名無しさん
09/06/01 23:47:28
>>534
2重ループくらいなら、あんまり汚くはならんでしょ。たぶん。
実際の書き方は十人十色だろうけどね。
個人的には、forの条件式のところに書くよりは、新しくif〜breakを作る方が好き。

あと、もう1つ。
関数呼び出しにかかる時間が致命的で、少しでも減らしたいというのでもない限り
基本的に関数を増やす方向で進めた方がいいと思うよ。


>540-541
まあ、実際のコードとは違う可能性もあるし、そこは突っ込むほどのことでもないんじゃない?

543:デフォルトの名無しさん
09/06/01 23:56:17
>538
すごく単純に書くと

for ()
{
 for ()
 {
  end_flag = 1;
  break;
 }
 if ( end_flag == 1 ) break;
}

544:デフォルトの名無しさん
09/06/02 00:04:31
書いてない
近所にそんな本置いてない
Amazon登録(会員?)してない
晒した後に燃やす意味がわからない


メモ帳ってテキストエディタだよね?C言語によるプログラムはどうやって実行するの?

545:デフォルトの名無しさん
09/06/02 00:07:04
Cの入門書なら絶対に書いてある。
万が一書いてなければ、それは間違いなく悪書なので燃やしても咎められないだろう。
ついでに、同じような被害者を出さないためにも、タイトルを晒しておこう。

くらいの意味。
要約すると、「1ページ目から読み直せ」ってことだ。

546:デフォルトの名無しさん
09/06/02 00:30:19
void型のWINAPI関数、ABC()があるとします。

void WINAPI ABC()

VOID WINAPI ABC()

には違いがありますか?(voidが小文字か大文字か)

547:デフォルトの名無しさん
09/06/02 00:34:47
>546
どっかで、「VOID は void の別名ですよー」って定義されているかどうかによる。
結論から言うと、たぶんそうなってる。


548:デフォルトの名無しさん
09/06/02 00:53:27
>>542
なるほど。関数を呼ぶと時間がかかるのですか。
かなり高い頻度で呼び出すのでできればはずしたいかな。

書いてなく申し訳ないですが、おっしゃるとおり実際は
forで回している変数を処理1,2で使っているので何とか抜けないといけないのです。

見た目で行くとやっぱり関数ですねー。
一気にfor二個抜けるbreak2みたいなのがあればいいですね(笑)

549:デフォルトの名無しさん
09/06/02 00:58:34
>548
>関数を呼ぶと時間がかかる

それこそ1/60秒間に1000回呼ばれ、マシンの性能の極限まで詰め込みたい……とかいうのでもない限り
普通に関数使っとけw

550:デフォルトの名無しさん
09/06/02 01:00:46
goto文使ってたり多重ループがあるだけで、
コードレビューが合格にならないキチガイISOマンセープロジェクト
って、この世からなくなればいいのに

551:デフォルトの名無しさん
09/06/02 01:29:22
>>522

for(〜){
  for(〜){
    if(hoge) break;
  }
  if(hoge) break;
}

552:デフォルトの名無しさん
09/06/02 01:42:18
そのループ処理を関数に切り出して、
抜けたいところで return してしまうのも一つの手。

553:デフォルトの名無しさん
09/06/02 01:55:55
>551-552
実際の質問の直後のレスを見ようぜ

554:デフォルトの名無しさん
09/06/02 03:49:46
go to文は有害だよ
どんなネストごちゃまぜなソースでもちゃんと普通に抜けだすコード書いたほうがいい
go to文はあとから見た時可読性が著しく落ちる まじで

555:デフォルトの名無しさん
09/06/02 03:53:11
その部分をまるっと関数化してreturnで抜けだすのと
gotoにそこまで違いがあるのかどうかw


556:デフォルトの名無しさん
09/06/02 04:01:36
for(a<3){ for(b<20){
if(){if(hensu){}else{},a=3;continue;}
}} // bループの外に処理があるなら }if(a<3){ }}


で十分じゃないの?

557:デフォルトの名無しさん
09/06/02 04:02:07
>>554
フラグ変数とか多用されるよりgoto使ってくれた方が追うの楽だし、
そもそもgotoつかえば深いネストしなくて済むことも多い。

558:デフォルトの名無しさん
09/06/02 04:05:36
フラグ変数を使って深いループを抜ける事は、仮想関数を
使うべき所にswitch文やif文で多重にネストした醜いプロ
グラムを連想させる

559:デフォルトの名無しさん
09/06/02 04:18:03
質問。
あるクラスから派生したクラスを作るとき、その派生クラスを強制的にシングルトンにさせる方法ってありますか?
派生クラスに自前でシングルトンパターンを実装するしかないのでしょうか?

>goto
まあ俺みたいな初心者は
少しは綺麗になるかも?と思ってもgotoを使わない方向で書いた方が安全ってことだな!


560:デフォルトの名無しさん
09/06/02 06:19:47
gotoが必要になる事ってほとんど無いんだけど。
ちゃんとクラス設計しているのか?
・・・と思ったが、C言語の場合はクラス設計もクソもないな。

561:デフォルトの名無しさん
09/06/02 06:26:12
gotoも使いようだよ
ifとかwhileで書けるなら、gotoでなくそっちを使うべき、ってだけ

いずれにせよクラスは関係ないな

562:デフォルトの名無しさん
09/06/02 07:30:53
>>545
最初っから読んだが載って無いな
悪書なのは分かったが買ったからには100%使う予定

で、メモ帳はテキストエディタっていう程だからプログラムを実行出来るんだよね?ググっても良く分からんのだよorz

563:デフォルトの名無しさん
09/06/02 07:37:44
>>562
じゃぁ、初心者向けの本じゃ無かったんだろ。
自分のレベルにあった本を買えるようにしような。

564:デフォルトの名無しさん
09/06/02 08:04:55
もっと高級なテキストエディタじゃないと実行できないんだよ。

565:デフォルトの名無しさん
09/06/02 08:14:21
>>582
C言語なら、コンパイラというプログラムが必要だ。それをつかえ。
コンパイラにも色々種類があるが、C言語用のコンパイラな。

566:デフォルトの名無しさん
09/06/02 08:48:14
>>564
嘘は言っていないから困る

567:デフォルトの名無しさん
09/06/02 09:54:40
まあ基本は、「エディタは編集するものであって実行するものじゃない」

568:デフォルトの名無しさん
09/06/02 12:38:23
>562
念のため、本のタイトルを。

569:デフォルトの名無しさん
09/06/02 12:59:30
わかた
コンパイラは自力で探してみる

因みに購入したC言語本は
URLリンク(www.amazon.co.jp)
コンパイラについて書いて無かった気がしたけどなぁ

570:デフォルトの名無しさん
09/06/02 13:00:55
あ、コンパイラはC++用でもおKなの?


571:デフォルトの名無しさん
09/06/02 13:02:32
/                     \
              、   ヽ\    ヽ
. /  , /    !    ∨丁ヽ い   |    /二フ”
/  ! |   ィ 「\   | ハ   l |   ,′    /
l   ! | / /j/   '.  ノ, =、!// /j/      ヽ/
l   い/ ,, =x j/ ′   〈j/       /ヽ
ト ._  \_〃         :.:.:.:.}           /二フ”
l l { 下 ̄ .:.:.:.:  -‐1   ∧          /
l l T ‐个 ._     ー'  イ l|         ニニ!
l/ /|  l l//下二千ヽ_l い          ─┘
' / .′ l,ノ\/// 小、|、\ヽ\          「〉
Ul  /  / \/ U` \ヽl i      r_|
Ul l    i      !   ト ヽ |


572:デフォルトの名無しさん
09/06/02 13:29:57
>569
ちょっと軽く評判を調べてみたんだけど、「実行する方法が書いてない」「やたら間違ってる」なんて話がチラホラあった。
1から読み直せとか、さんざん疑ってしまってスマン。


573:デフォルトの名無しさん
09/06/02 13:31:19
>>571 質問者はケータイみたいだし、AAでの返答はしないほうがいいんでね?

574:デフォルトの名無しさん
09/06/02 13:37:19
>>570
今のC++コンパイラはたいていCも扱える

575:デフォルトの名無しさん
09/06/02 13:39:07
やっぱりぼうようか

576:デフォルトの名無しさん
09/06/02 13:42:25
>>573
もともと >>571 に、真面目に答える気があるとも思えん。

577:デフォルトの名無しさん
09/06/02 14:08:56
これは酷い
URLリンク(labaq.com)

578:デフォルトの名無しさん
09/06/02 14:12:23
夏休みまだだよな?

579:デフォルトの名無しさん
09/06/02 14:13:22
年中夏休みですがなにか

580:デフォルトの名無しさん
09/06/02 14:25:09
VB、C#、C++だと.NETフレームワークの使い方って全然違ってくる?
.NETフレームワークの用途毎の使い方が載ってる本がほしいので
「.NET Frameworkプログラミングテクニック―for Visual Basic/C#」
を買おうかと思うんだが今使ってる言語はC++なんだ・・・

581:デフォルトの名無しさん
09/06/02 14:46:50
C#がいいお

582:デフォルトの名無しさん
09/06/02 14:51:25
>cat test.cpp
#include <iostream>
template <typename _T>
struct base { typedef size_t size_type; };
#ifdef CANNOTCOMPILE
template <typename _E>
struct A:base< A<_E> >{
#else
struct A:base< A >{
#endif
  size_type s;
};
#ifdef CANNOTCOMPILE
  typedef A<int> type;
#else
  typedef A type;
#endif
int main(void)
{
  type a;
  a.s = 10;
  return 0;
}
>g++ test.cpp
>g++ test.cpp -DCANNOTCOMPILE
test.cpp:10: error: ‘size_type’ does not name a type
test.cpp:10: note: (perhaps ‘typename base<A<_E> >::size_type’ was intended)
test.cpp: In function ‘int main()’:
test.cpp:20: error: ‘struct type’ has no member named ‘s’

頭がこんがらがってよくわからなくなってしまったのですが、
テンプレート版でsize_typeが継承されてないのはなぜでしょうか?

583:デフォルトの名無しさん
09/06/02 15:31:35
public base

584:デフォルトの名無しさん
09/06/02 15:31:42
マイクロソフトの最新版らしいので安心して使用してみます

べっかんこから見ているのでAAも安心です

では、おいとまさせて頂きます

585:デフォルトの名無しさん
09/06/02 15:33:26
おとこは黙ってVisual J

586:デフォルトの名無しさん
09/06/02 16:33:41
涙で>585が見えない


587:デフォルトの名無しさん
09/06/02 16:55:46
>>569
amazonの中身が読める所だけみたが
3ページの上の方に、プログラムの実行方法は
「処理系や実行環境によって異なりますから
みなさんが利用している処理系のマニュアルなどを参照してください」
と書いてある

まぁ、完全な初心者にはそもそも「処理系」って何?ってなるから
これじゃつまづくな

588:デフォルトの名無しさん
09/06/02 18:56:19
訳語の「処理」が大外れではないけど意味を採り難い語だからね

「処理乾酪」でヤバさ倍増な感

589:デフォルトの名無しさん
09/06/02 19:33:34
>>580
ライブラリ自体の使い方は同じだから、そういう目的ならVB/C#向けでも構わないと思う。

590:デフォルトの名無しさん
09/06/02 21:39:01
同じ名前のメンバ変数を持ってるクラスを継承しちゃったらどうなるの?

591:デフォルトの名無しさん
09/06/02 21:50:55
>>590
継承の仕方による。

多重継承ならスコープ解決演算子で名前解決することになる。

多重継承でなく、単一の継承を繰り返した場合は
派生クラスのメンバ変数の名前が基底クラスの
メンバで同名なものを「全て」隠蔽する。

これ以上は、実例を挙げるのがめんどくさいので、誰かよろしく。

592:デフォルトの名無しさん
09/06/02 23:34:12
すいません、VS2005で外部ライブラリをソースコードの中に記述して取り込む方法をど忘れしてしまいました、教えてください。

593:デフォルトの名無しさん
09/06/02 23:37:41
絶対ど忘れじゃねーだろwwwww

594:デフォルトの名無しさん
09/06/02 23:40:00
pragman

595:デフォルトの名無しさん
09/06/03 00:06:16
そうだった
#pragma comment(lib,"ws2_32.lib") これでよかった、thx>>593ぶた野郎

596:デフォルトの名無しさん
09/06/03 06:42:31
メモリ上のポインタをファイルポインタで開くことはできますか?

597:デフォルトの名無しさん
09/06/03 06:58:06
できません

598:582
09/06/03 16:54:38
よろしくお願いします。

599:デフォルトの名無しさん
09/06/03 17:59:15
すまん質問させて貰う

下のように定義した関数があり
void funcA( const char *pszA, const char *pszB, const char *pszC );

funcBで色々と処理した後に、funcB内でfuncAを呼ぶと
pszBとpszCのアドレスが変わってしまう

pszBに渡されるアドレスが本来0x1000だとすると、0x1200となる
デバッガで渡される直前の中身と、funcAで受け取った中身が違ってるのも確認済み
これの原因で考えられるのはメモリ破壊のみだろうか?
funcAとfuncBは別々のモジュールで実装されているんだが
WinMainを呼んで他に処理をする前に
すぐにfuncBを呼んでも、同様の現象が起きてる

そこの機能だけを一つに纏めて実験すると問題無く動作する
IDEはVC++2008 ExpressEdtion

正直訳が分からない。よろしくお願いします。

600:デフォルトの名無しさん
09/06/03 18:27:56
char const * (const char *)
const なcharへのポインタ。アドレスは変わっても良い。データはconst。

char * const
charのポインタがconst。アドレスはconst。データは変わってもよい。

char const * const (const char * const)
const な char のポインタがconst。アドレス、データ共にconst

601:599
09/06/03 18:51:25
自己解決した

構造が
main.cpp
dialog/dialog.cpp
shell/shell.cpp
resource/resource.cpp
という風にモジュール分けしてて

funcB内で別のモジュールの処理を呼ぶんだが
そのモジュール(funcB内で呼ぶ処理)自体は結合度が凄い低い

そのモジュールのヘッダに
#include "../hogehoge.h"
とアプリ全体の共通ヘッダをインクルードしたら解決した

そのモジュール自体、他の機能全く使わないのに
何でこれで解決するのかが分からないが…

スレ汚しすまない

602:デフォルトの名無しさん
09/06/03 18:56:43
>>601
アドレスは変わっても良いってコンパイラに伝えてるんだから、当然アドレスはいつか突然変化する。
今回変わらなかったのは単なる偶然。

603:599
09/06/03 19:17:16
例えば
void func( const char *pszHoge )
と定義して

char szHoge[] = "hogehoge";
szHogeのアドレスが0x1000として
func( szHoge );
とすると、func側のpszHogeは必ずしも0x1000ではないって事?
同じアプリのメモリ空間だから、アドレスが変わるっていうのは知らなかった

でも、今回のはアドレスも変わって、中身も変わってた

604:デフォルトの名無しさん
09/06/03 19:18:46
すまん、記述ミスがあった
×pszHogeは必ずしも0x1000ではないって事?
○pszHogeが指すアドレスは0x1000ではないって事?

605:デフォルトの名無しさん
09/06/03 19:23:39
>>600参照。
const char*だと、アドレスは変わる。
ついでに>>603だと宣言の時点でconstついてないから中身も変わる。
コンパイラによって保証されるのは、funcがpszHogeの中身を変えないことだけ。

606:599
09/06/03 19:45:18
>>605
有難う
ポインタで渡す限りアドレスは固定だと思ってたが、違うのか
今日アドレスと中身も変わったが、相当レアなケースに遭遇したみたいだ
>>600は凄い参考になった。有難う

607:デフォルトの名無しさん
09/06/03 19:53:48
ポインタ変数だろうがint型の変数だろうが関数に渡した値が勝手にかわってたらおかしいだろw

608:デフォルトの名無しさん
09/06/03 20:18:16
C++でゲーム開発してるんですが、敵ユニットや弾をリスト構造を用いて実装しました。
しかし、これらのオブジェクト同士の当たり判定の実装で詰まってしまっています。
解決策を知っている方が居たらお願いします。

それが駄目でも、二つの双方向リストを総当りで比較する方法などありましたらお願いします。

609:デフォルトの名無しさん
09/06/03 20:24:55
>>608
サンプルプログラムそこらじゅうに転がってるからてきとーに参考にすりゃいいだろ

総当りの方法って、先頭から順番に見ていきゃ言いだけだろ



610:582
09/06/03 22:23:15
VC++2008 EEで試してみたところ、どちらのバージョンでも問題なくコンパイルされてしまいました。
動作も期待(?)通りです。お騒がせいたしました。

611:デフォルトの名無しさん
09/06/03 22:25:31
だめだったのはやっぱBCC無料版だったりするんだろうか

612:デフォルトの名無しさん
09/06/03 22:38:02
>>609
まぁ、ゲームの場合速度が重視されるから単純な総当たりなんてやらないで
エリアを区切ってエリア単位で総当たりの判定するけどな。

613:デフォルトの名無しさん
09/06/03 22:42:02
まずすべてのオブジェクトの座標を確認して
適当な範囲ごとにソートして、それからその範囲内で当たり判定を行うってことかしら?
範囲の境界に位置するようなオブジェクトの場合はどうしたら…

614:デフォルトの名無しさん
09/06/03 22:42:52
>>613
どっちでもいい、処理を減らすことが目的だから

615:デフォルトの名無しさん
09/06/03 22:43:36
いや違うな
>>613じゃ根本的に間違ってる

616:デフォルトの名無しさん
09/06/03 23:35:00
for(n=1; n<=100; n++){
sum += n;
printf("1+2+...+100=%d\n",sum);
}

{ }をつけると、1、1+2、1+2+3、・・・、1+2+…+100までの答え、
{ }を外すと単なる1+2+…+100の答えが出るのですが、
これはなぜですか?

本には{ }内に1つの文しかないときには{ }を省略できるとだけ書いているのですが
ここで{ }を省略するかどうかというのは重要な問題だと思うのですが

617:デフォルトの名無しさん
09/06/03 23:39:11
{} を省略した場合は

for(n=1; n<=100; n++){
 sum += n;
}
printf("1+2+...+100=%d\n",sum);

って書いてあるのと同じ意味になるから。

618:デフォルトの名無しさん
09/06/03 23:41:42
> 本には{ }内に1つの文しかないときには{ }を省略できるとだけ書いているのですが
だから、{ }がなければ
for(n=1; n<=100; n++){
sum += n;
}
printf("1+2+...+100=%d\n",sum);
とみなされる。

619:616
09/06/03 23:42:47
>>617
なるほど!
1つの文しかないときは{}を省略できるってのは、
条件式が1つの場合、って解釈してたんですが
printfも何もかも含むんですね!わかりやすい説明ありがとうございます


次ページ
最新レス表示
スレッドの検索
類似スレ一覧
話題のニュース
おまかせリスト
▼オプションを表示
暇つぶし2ch

5394日前に更新/231 KB
担当:undef