5ちゃんねる ★スマホ版★ ■掲示板に戻る■ 全部 1- 最新50  

■ このスレッドは過去ログ倉庫に格納されています

スレを勃てるまでもないC/C++の質問はここで 4

1 :デフォルトの名無しさん:2008/09/17(水) 15:41:48
スレを勃てるまでもない低俗なC/C++の質問はここでお願いします。

過去ログ
スレを勃てるまでもないC/C++の質問はここで
http://pc11.2ch.net/test/read.cgi/tech/1167476845/
スレを勃てるまでもないC/C++の質問はここで 2
http://pc11.2ch.net/test/read.cgi/tech/1178503366/
スレを勃てるまでもないC/C++の質問はここで 3
http://pc11.2ch.net/test/read.cgi/tech/1187521676/

2 :デフォルトの名無しさん:2008/09/19(金) 00:40:38
1608年5月11日に3なのに『2get』と書いてしまい、
『500年ROMってろ!!』
と言われた者です。
あれから500年、ひたすらROMに徹してきました。
来る日も、来る日も。
そして今、
やっと念願叶って書き込みをしようとした矢先に、
2をget出来るだなんて………
感動で……胸が一杯です。
人間、辛抱すれば良いことって有るんですね!
こんな僕ですが、
僭越ながらとらせて貰います…!
2get!


3 :デフォルトの名無しさん:2008/09/19(金) 05:51:24
500年経ってねーよ

4 :デフォルトの名無しさん:2008/09/19(金) 10:55:20
1999年に「2GET」といって3をとってしまった時に、『10年ROMれ』といわれて私はずっとROMってきました!今ここに宣言します。【4GET!】

5 :デフォルトの名無しさん:2008/09/19(金) 11:07:40
10年経ってねーよ

6 :デフォルトの名無しさん:2008/09/19(金) 21:55:33
圧縮、解凍プログラムを作ってみたいんですけど、
fopenでバイナリ読み込んで
それを並び替えればいいだけですか?

7 :デフォルトの名無しさん:2008/09/20(土) 00:05:30
全然違います

8 :デフォルトの名無しさん:2008/09/20(土) 21:04:31
>>6
並び替えただけじゃ圧縮になってないし、元にも戻せませんがな。
しかもC/C++の問題じゃないし。

9 :デフォルトの名無しさん:2008/09/20(土) 21:04:38
ありがとうございました。

10 :デフォルトの名無しさん:2008/09/21(日) 19:46:01
rubyとかにあるnil見たいな未定義値を実装するにはどうすればいいの?


11 :デフォルトの名無しさん:2008/09/21(日) 20:58:55
ポインタの類(shared_ptrなど含む)なら0(ヌルポインタ)
参照型ならポインタを使うように書き換えて↑
それ以外はboost::optional

12 :デフォルトの名無しさん:2008/09/25(木) 10:49:31
firefoxのプラグインの作り方教えてお

13 :デフォルトの名無しさん:2008/09/25(木) 12:11:47
C言語の変数型のdoubleは有効数字15だか16桁とのことですが、
0.0000000000000000000000000000123
とかの極小数も1.23×10の-何乗みたいに、ちゃんと入るんでしょうか。
それとも小数点下の十何桁までしか覚えられない?

14 :デフォルトの名無しさん:2008/09/25(木) 12:31:13
ちゃんと入る

15 :デフォルトの名無しさん:2008/09/25(木) 13:05:23
ありがとうございます。

16 :デフォルトの名無しさん:2008/09/25(木) 21:07:01
キャストについての質問です

printf("%d",(int)(2.014*1000));
結果>>2013

上記のように
2.014 * 1000 をint型でキャストすると
2013になってしまいます。
2.013 * 1000 はちゃんと2013なのにー

何か綺麗な解決方法あるでしょうか。おねがいします
環境はGCCです。

17 :デフォルトの名無しさん:2008/09/26(金) 00:31:39
ない

18 :デフォルトの名無しさん:2008/09/29(月) 12:02:19
>>16
整数になるはずなら、四捨五入でもすれば。
正の領域なら、int(2.014 * 1000 + .5)でOK。

19 :デフォルトの名無しさん:2008/09/30(火) 15:59:16
勃起するまでもないC/C++かとおもた

20 :デフォルトの名無しさん:2008/09/30(火) 23:58:08
ソースファイルの管理なんですが

func1、func2、func3という基底クラスがあって
それらを継承して
SubA_func1、2、3・・・
SubB_func1、2、3・・・
SubC_func1、2、3・・・
というクラス群があるとき

base、SubA、SubB、SubCとファイル分けするか
func1、func2、func3と分けるのか
どちらがよいでしょうか?


21 :デフォルトの名無しさん:2008/10/01(水) 10:28:07
なんかそれ設計ミスってないか?


22 :デフォルトの名無しさん:2008/10/01(水) 20:36:02
すみません
ビルドできないんですがどうすればいいのでしょうか?
応答なしになってしまいます・・・

23 :デフォルトの名無しさん:2008/10/01(水) 21:00:18
パソコンを買い換えるのが、一番確実な解決法じゃないかな

24 :デフォルトの名無しさん:2008/10/01(水) 21:18:32
char*をwchar_t*にしたいんだが、mbstowcs()つかても変換後の日本語部分がデバッガで見ても正しくないんだが、これはどういうことなんだろうか。
それか別の変換方法ってある?
元々はVC9でfstreamのパスに日本語があると開けないやつの対策用に変換がしたいわけで・・・

25 :デフォルトの名無しさん:2008/10/01(水) 22:28:05
>>24
setlocaleしないとまともに動かないぞ。

26 :24:2008/10/01(水) 22:39:41
なるほどそれってmbstowcs()の第4引数を使っても結果はsetlocaleと同等?

27 :デフォルトの名無しさん:2008/10/03(金) 12:32:57
例えば、クラスAに要素a、bがあるとして派生クラスBの配列要素c[i][j]の各要素ににそれぞれ違うクラスAの要素a、bを入れるようなことはできますか?
例の補足としては、c[0][0]にはa=1、b=2 c[0][1]にはa=5、b=3が入っているとしたら c[0][3]=c[0][0]+c[0][1]の計算した場合 c[0][3]はa=6、b=5になるようなことです

28 :デフォルトの名無しさん:2008/10/03(金) 12:36:22
頭痛くなってきた・・・

29 :デフォルトの名無しさん:2008/10/03(金) 23:34:08
行列計算をしたいってことか?
根本的にやり方を変えないと出来ないんじゃないか?

30 :デフォルトの名無しさん:2008/10/03(金) 23:40:21
つか行列ならclass Bを配列にするんじゃなくてclass Bの中にclass Aの配列を取り込むべきなんじゃないかね
外部からの入力をメンバ関数で受け取って同じ関数内で再計算までやってしまえばいいんじゃないかね

もう解決してそうな気もするけどな・・・

31 :デフォルトの名無しさん:2008/10/04(土) 01:12:09
[質問]インスタンスを配列とした場合、コンストラクタへ引数を与える方法がわからない。

class Huga
{
public:
Huga( int i = 0 ){ printf("%d\n", i); }
~Huga(){}
};

int _tmain(int argc, _TCHAR* argv[])
{

//Huga *huga = new Huga(5); みたいな感じにしたい
Huga *huga = new Huga[10]; // ここでコンストラクタへ引数を渡したい。
delete[] huga;
return 0;
}

なにかよい知恵があればお授けください。

32 :デフォルトの名無しさん:2008/10/04(土) 01:16:18
>>31
仕様上無理です。
後からsetter()でもループして回しましょう。

33 :31:2008/10/04(土) 01:20:42
>>32
さっそくのレスありがとうございます。
了解しました。
おとなしく、他の方法を考えます。


34 :デフォルトの名無しさん:2008/10/04(土) 20:27:50
答えは5のようですが、なぜそうなるのかわかりません。
どなたか流れを教えてください。よろしくお願いします。

#include
int sub(int *x, int *y) {
(*x)++;
(*y)++;
return *x + *y;
}
main() {
int a = 0, b = 0;
b = sub(&a, &a);
printf(“%d %d\n”, a, b);
}

(1) 0 2
(2) 0 3
(3) 1 3
(4) 2 3
(5) 2 4

35 :デフォルトの名無しさん:2008/10/04(土) 21:02:23
>>34
これでOK?
int sub(int 0, int 0) {
0++; => 1
1++; => 2
return 2+2; => 4
}


36 :デフォルトの名無しさん:2008/10/04(土) 21:46:29
>>35
ご回答ありがとうございます。

1++; => 2       ←なぜここで1++になるのですか?*y=0ではないのですか?
return 2+2; => 4    ←これも、なぜ*x=2になるのですか?1ではないのですか?

よくわかりません。お手数ですが、お教え願います。

37 :デフォルトの名無しさん:2008/10/04(土) 21:53:07
>>35
長くてごめん。
>b = sub(&a, &a);
となってるからとしか言えないんだけど。
重要なのは0という数値じゃなくて0が入ったaのアドレスが渡されてるってこと。
xもyも指してる実体は同じaだから、xへの操作はyへの操作と同じだし同様にyへの操作もxへの操作となる。
だから実際は以下と同じようになってるってわけ。

int sub(int *x) {
(*x)++;
(*x)++;
return *x + *x;
}


38 :デフォルトの名無しさん:2008/10/04(土) 22:24:01
>>37
理解できました。ありがとうございました。

39 :デフォルトの名無しさん:2008/10/05(日) 03:03:40
Cのプリプロセッサで
#if sizeof(time_t) == 8
 /* time_t が 64 bit のときの処理 */
#else
 /* time_t が 32 bit のときの処理 */
#endif
みたいな書き方ってできなかったっけ?

40 :デフォルトの名無しさん:2008/10/05(日) 09:41:19
実務で、構造体、共用体はどう使われているのですか

41 :デフォルトの名無しさん:2008/10/05(日) 21:06:33
>>40

自分の場合、、、。
構造体を使わなかった場合は、
関数への引数が多くなってしまったり、
関数の戻り値を1つの型ですませることができなくなったりして
不便です。
なので、関数の引数や戻り値で大活躍です。
その他、いろいろ使っています。

共用体は自分の場合はあまり使わないです。
BYTE(unsigned char)型みたいに1byte単位での
入出力が必要な場合に、ある程度決まった型に変換が必要な
場合とかには使う場合があります。

と実務経験があまりない自分が言ってみるテスト。


42 :デフォルトの名無しさん:2008/10/05(日) 21:36:12
>>39
うんできない

43 :デフォルトの名無しさん:2008/10/06(月) 09:36:06
>>42
じゃあ>>39みたいなことしたい場合は、autoconfとかを使って、
コンパイル前にあらかじめsizeof(time_t) を調べておく必要があるってことですね。
うーん、今作ってるのは小さいプログラムだからあんまり大げさなことはしたくないなあ。
なんかいい方法があれば教えてください。

44 :デフォルトの名無しさん:2008/10/06(月) 10:27:02
>>43
プリプロセッサとsizeofとどっちの処理が先か考えりゃわかるべ。

45 :デフォルトの名無しさん:2008/10/06(月) 10:54:53
>>43
time_tが64bitの環境はまだ少ないんだし、その環境向けのifdef (OSと
かCPUとか)で分ければいいでない?


46 :デフォルトの名無しさん:2008/10/06(月) 11:06:21
if (sizeof(time_t) == 8) {
} else {
}
じゃだめなのか?

#include <limits.h>
#if SIZE_MAX == 4294967295
#else
#endif
とか

47 :デフォルトの名無しさん:2008/10/06(月) 11:11:47
そこでtmpですね

48 :デフォルトの名無しさん:2008/10/12(日) 14:55:45
あるローカル関数A内で
グローバルのポインタ変数にmallocし、領域を確保。
その後、他のローカル関数B内で、関数A内で確保した領域を使うことって
出来ましたっけ?

49 :48 補足説明:2008/10/12(日) 15:14:03
上でやりたいのは、こういう事なんですが

#include <stdio.h>
#include <stdlib.h>

char *g_pcX;

int sub001(char *pcX)
{
pcX = (char*)malloc(256);
for(int i=0; i<256; i++)
{
pcX[i] = i;
}
return 0;
}


void main()
{
sub001(g_pcX);

for(int i=0; i<256; i++)
{
printf("%d ", g_pcX[i]);
}
}

50 :デフォルトの名無しさん:2008/10/12(日) 17:41:40
>>49
・そのサンプルではコンパイルできません。
・グローバル変数であるメリットが全くありません。
・そもそも関数内で確保した場所を誰にも伝えていないのに誰かが使えるわけがありません。
・ポインタと関数の引き数について勉強しなおすべきです。

>>48
できます。しかし、そうすべきではありません。

51 :C言語始めました:2008/10/12(日) 18:51:19
zero( // ???? //)
{
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
a[i][j]=0.;
}
}
}

main(){
int n=4;
vector< vector<double> > a( n , n );
zero(// ????? //);
}


????
↑の部分はどのように宣言したらいいのでしょうか?

52 :デフォルトの名無しさん:2008/10/12(日) 19:09:05
>>51
向こうで教わったでしょ。

53 :C言語始めました:2008/10/12(日) 19:12:59
void zero(int n, vector< vector<double> > & a)
{
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
a[i][j]=0.;
}
}
}

void main(){
int n=4;
vector< vector<double> > a( n , n );
zero(n, vector< vector<double> > & a);
}

さっぱりピーマンです…

54 :デフォルトの名無しさん:2008/10/12(日) 19:27:30
いかん、間抜けだったのか。

>>53
次のどれかを選択しろ。
・STLの勉強をする。
・C初心者スレ辺りでやりたいことから提示して初歩から教わる。
・PCを窓から投げ捨てる。

55 :C言語始めました:2008/10/12(日) 19:35:24
すいません。

火曜日になれば教えてもらえるけど早く使い方知りたかったんで。

基礎とかは二の次で使えたらいいのでどうか教えてください。

56 :デフォルトの名無しさん:2008/10/12(日) 20:58:43
これで判らなければ、火曜まで待て。
--
#include <vector>
void zero(std::vector<std::vector<double> > & a){for (unsigned i = 0; i < a.size(); ++i) for (unsigned j = 0; j < a.at(i).size(); ++j) a.at(i).at(j) = 0;}
int main(){const unsigned n = 4;std::vector<std::vector<double> > a(n, n);zero(a);return 0;}

57 :C言語始めました:2008/10/12(日) 21:30:04
<<56
ありがとうございます。
がんばって噛み砕きます。

58 :デフォルトの名無しさん:2008/10/12(日) 23:07:57
>>50
一応コンパイルは通りそうだが?

59 :デフォルトの名無しさん:2008/10/12(日) 23:30:21
>>58
あー確かにコンパイルは通るね。ダメダメなことに変わりはないけど。

60 :デフォルトの名無しさん:2008/10/13(月) 00:02:27
>>50みたいなやつはほっといていい

61 :デフォルトの名無しさん:2008/10/13(月) 22:44:34
VC++2005 EE使用
fatal error C1083: include ファイルを開けません。'iostream.h': No such file or directory
というエラーが出ます。
VC++2005EEをインストールしただけじゃだめなのでしょうか?

ソースは↓です。
#include <iostream.h>

int main()
{
cout << "テスト" ;
return 0;
}

62 :デフォルトの名無しさん:2008/10/13(月) 22:53:03
>>61
君は浦島太郎だ。今のC++に<iostream.h>は無くなった。

#include <iostream>

int main()
{
std::cout << "テスト" ;
return 0;
}

63 :デフォルトの名無しさん:2008/10/13(月) 23:20:34
>>62
正常に実行できました。
ありがとうございます。
参考にしていたサイトが古かったので、浦島太郎でした。

64 :デフォルトの名無しさん:2008/10/14(火) 07:52:07
[質問]ファイルを開けない
[環境]VC++2005

TCHARで開くファイル名を指定して TEXT("\\Data\\foo.jpg") と
しているが、CreateFileでファイルを開くことができない。

以下、プロジェクトをhogeとしている場合のフォルダ構成。
hoge.sln
hoge.ncb
hoge.suo
+[debug]
+[hoge]----+[Data]---foo.jpg
+[Source]---main.cpp
その他ソースコード

※プロジェクトのプロパティ>C/C++>追加のインクルードディレクトリ
で、SourceフォルダとDataフォルダを追加している。
Dataフォルダの追加を行っているが、これはコンパイルするときに
読み込むもののみに有効?
※foo.jpgを[hoge]フォルダ直下においた場合は読み込める。


65 :64:2008/10/14(火) 07:58:48
>>64です。
すんません、フォルダ構成記述ミスりました。

<最上位階層>
hoge.sln
hoge.ncb
hoge.suo
+[debug]
+[hoge]

<hoge階層>
+[Source]
+[Data]
hoge.rc
hoge.vcproj
hoge.ico

<Data階層>
foo.jpg //こいつを読み込みたい

<Source階層>
main.cppなどなどその他ソースコード



66 :デフォルトの名無しさん:2008/10/14(火) 09:25:21
ネットワークプログラムって一体どんなことに使うんですか?
本を読んでもUNIXの鯖がどーたら
で全然意味がわかりません。

鯖を共有メモリにするってことですか?

67 :デフォルトの名無しさん:2008/10/14(火) 09:53:36
>>66
釣りだろ!?
釣りだと言ってくれッ…!

68 :デフォルトの名無しさん:2008/10/14(火) 10:41:33
>>66
ネットワークプログラムなしにネットワークを使えると思っているのですか?
あなたか書き込んでいるここはいったい何だと思って・・・

69 :デフォルトの名無しさん:2008/10/14(火) 15:29:42
ここというか、書き込んでるプログラムは一体何か、というところだな。

70 :デフォルトの名無しさん:2008/10/14(火) 22:58:00
成績をつけるプログラムを教えてほしいです。

80点以上100点以内 A
65点以上80点未満  B
50点以上65点未満  C
0点以上50点未満   D

それ以外の整数に対しては「ありえない」と出す



71 :デフォルトの名無しさん:2008/10/14(火) 23:13:51
>>70
C/C++の宿題を片付けます 116代目
http://pc11.2ch.net/test/read.cgi/tech/1222813731/l50

72 :デフォルトの名無しさん:2008/10/21(火) 09:35:45
関数かconstで宣言されていると
内容も変更しないという意味だったっけ?

たとえば
void Map_Class::second(std::map<std::string, int>& m) const {
のようなメンバ関数があったとすると
このメンバ関数の中では値を変更しちゃいけないんだっけ?

73 :デフォルトの名無しさん:2008/10/21(火) 11:33:31
>>72
いいえ、メンバ関数内でメンバ変数を変更できないだけです。
その例ではmを変更できてしまえます。

74 :デフォルトの名無しさん:2008/10/21(火) 14:23:21
>>73
では、何のための const なのでしょう?

75 :デフォルトの名無しさん:2008/10/21(火) 14:33:49
>>74
Map_Class自体がconstの場合のため。

std::map<std::string, int> m;
const Map_Class map_class;
map_class.second(m);

secondがconstでなければ呼べない。
map_classはconstのため変更不可だが、mはconstではないので変更可。

76 :デフォルトの名無しさん:2008/10/21(火) 14:33:55
>>74
だから、メンバー変数を変更しないという意味でconstでしょ。


77 :デフォルトの名無しさん:2008/10/22(水) 21:04:59
プログラムのデータ構造、つまり構造体をバリバリ使いまくるか
オブジェクト指向で汎用性を高くもたせるか迷ってます

構造体バリバリで書くと後のソースいじるときに大量のソースになり
保守するのが難しくなりやすいのと

オブジェクト指向で書くと汎用性を維持するためのコードで複雑になりやすく
これまた保守が難しくなりやすいかと考えています

どちらの手法で組んでいくか、また、別の手法があるかアドバイスいただけませんか?


78 :デフォルトの名無しさん:2008/10/22(水) 21:09:15
それは、どっちでも極端過ぎるとだめだよ、ほどほどにバランスをとりなさいという教訓。

79 :デフォルトの名無しさん:2008/10/23(木) 07:52:12
>>73
mapを変更したくないなら、
void Map_Class::second(const std::map<std::string, int>& m) const {
のようにmをconst参照にすればよい
すると、second内ではmのconstメンバー関数しか呼び出せなくなる。


80 :デフォルトの名無しさん:2008/10/23(木) 07:52:50
アンカー間違えた
>>73>>74

81 :デフォルトの名無しさん:2008/10/23(木) 13:51:51
簡単なゲームを作っているのですが、今まで使っていたアイコンは32×32だったので、それを16×16のサイズにしようと思い、そのサイズの画像を取り込んだら、32×32のサイズに拡大されて表示されてしまうのですがどうしたらよいのでしょう?
アイコンファイルってサイズ指定するとこないですよね?
Visual C++です。

82 :デフォルトの名無しさん:2008/10/23(木) 13:53:21
今はどうやってるの?
LoadImageならサイズも指定できるよ。

83 :デフォルトの名無しさん:2008/10/23(木) 16:34:30
最近、C++を使うことになったのですが、
下記のクラスの定義で、<RTC::TimedLong>の部分の意味が分かりません。
(山カッコの使い方が分からないです…)
よろしくお願いします。

class Multiply
  : public RTC::OnWriteConvert<RTC::TimedLong>
{
   :
   :
};

84 :デフォルトの名無しさん:2008/10/23(木) 16:47:00
クラステンプレート

85 :デフォルトの名無しさん:2008/10/23(木) 16:55:20
>>84
理解できました。
有難うございます。

86 :デフォルトの名無しさん:2008/10/23(木) 17:07:02
は、はやいな

87 :デフォルトの名無しさん:2008/10/23(木) 18:51:43
>>82
HICON ico;
ico = AfxGetApp()->LoadIcon(IDI_ICON1);

って感じで読み込んでます。

88 :デフォルトの名無しさん:2008/10/23(木) 18:53:45
とてつもなく漠然とした質問で申し訳ないのですが,
例えば,

class Hoge
{
public:
int compute( int x, int y );
}

というクラスがあったとしたら,
xとyは,メンバ変数とするべきか否か,
その判別の基準って何かありますか?

89 :デフォルトの名無しさん:2008/10/23(木) 18:56:56
>>87
MFCなのね。つい最近似たような事例を書いた気がするが・・・

HICON ico;
ico = (HICON)::LoadImage(AfxGetInstanceHandle(), _T("test.bmp"), MAKEINTRESOURCE(IDI_ICON1), 16, 16, LR_LOADFROMFILE );

こんなんでどう?
つか、元のアイコンは16x16なの?
VSで編集時にイメージメニューから複数のサイズ、色数のアイコンが追加できるけど、それでやってる?

90 :89:2008/10/23(木) 18:57:32
test.bmpは消してくれ、残ってた

91 :89:2008/10/23(木) 18:58:21
あと最後のパラメタもLR_DEFAULTCOLORだな、複数試してたからつい・・・

92 :デフォルトの名無しさん:2008/10/23(木) 22:01:38
VC++ 6.0 で下記ソースのコンパイルがエラーとなります。
解決方法は見つけたのですが、
なぜ怒られるのか、わかりません。
理由が分かる方教えてください。

メンバ変数としてクラスを宣言して、
そのクラス名と同じ名前の関数を定義すると怒られます・・・。
----------------------
class Hoge {
};

class Niko {
public:
  Niko();
  ~Niko(); 
  void Hoge();
  Hoge hoge;  // NG
};

↓↓↓↓↓

class Niko {
public:
  Niko();
  ~Niko();
  Hoge hoge;  // 何故か入れ替えるとOK
  void Hoge(); // もしくは ::Hoge hoge; とすることでもOK
           // または Hoge2()など、別名にすることでもOK
};
Hoge()はNikoのメンバ関数のつもりですが、
Hogeクラスのコンストラクタとして解釈されている???

93 :デフォルトの名無しさん:2008/10/23(木) 22:24:15
>>92
上では、Niko内でHogeという名前を使うと、
最も内側にあるvoid Hoge();に解決され、それは形名でないのでエラー。

もっとも、そういう風にメンバの順番を替えるだけでエラーになったりならなかったりしては
混乱間違いなしということで、下のコードも本来はエラーになる。
(Hoge hoge;で外側のHogeを使っておきながら、後からメンバ名にHogeを持ち込んだという罪状)

::Hoge hoge;と外側の名前を使うことを明示するか、Hoge2などと別の名前にするのが正しい。
その場合hogeとHoge()のどっちを先に書いてもいい。

94 :92:2008/10/23(木) 23:35:14
>>93
なるほど・・・名前解決ができないのですね。
以下のメンバの再定義によるエラーと同じと解釈しました。
---------------
class Fuga {
public:
 int ABC;
 void ABC(); // エラー
};
---------------
ちなみにおっしゃるとおり、gccでコンパイルしたら、入れ替え技も怒られました。
(グローバルスコープおよび、別名にするのはOKでした。)

コンパイラの警告文が違ったので、嵌ってしまいました・・・。
ありがとうございます。


95 :デフォルトの名無しさん:2008/10/25(土) 12:42:40
起動するたびにランダムな数字をえたいのですが
ちょっと忘れてしまったので聞きたいのです

srand( ??? );

の ??? の部分って時間を指定するハズだったのですが
何の関数でしたっけ?

96 :デフォルトの名無しさん:2008/10/25(土) 12:45:02
time

97 :デフォルトの名無しさん:2008/10/25(土) 12:46:03
srand((unsigned)time(NULL));


98 :95:2008/10/25(土) 12:47:17
解決しました
ありがとうございました

99 :デフォルトの名無しさん:2008/10/25(土) 19:05:20
連立方程式アルゴリズムの質問です
http://www5d.biglobe.ne.jp/~tomoya03/shtml/algorithm/GaussJ.htm
と書いてありますが手元の資料では三角行列を作ってから後退代入で求めると書いてあります
サイトのほうが考えやすいんですがなぜこのようにやるのかおしえてください
やはり速度でしょうか?お願いします

100 :デフォルトの名無しさん:2008/10/25(土) 19:40:10
C/C++ DirectX で小規模なゲームを作ろうかと思っています
そこで関数や変数の命名規則を決めたいのですが、
実務経験がないため、まったく分かりません
参考になるようなサイトでもないでしょうか?

101 :デフォルトの名無しさん:2008/10/25(土) 21:24:45
01234を
00000
00001
...
44443
44444
って表示するプログラム書いたんだけど、
そもそもSTLにある?
あと、これ何て言う並び方だっけ?

102 :デフォルトの名無しさん:2008/10/25(土) 21:28:45
cc でスタティックライブラリをビルドしたいんですが、

cc -c -I../header ../src/hoge1.c
cc -c -I../header ../src/hoge2.c
cc -c -I../header ../src/hoge3.c
ar -r lib.a hoge1.o hoge2.o hoge3.o
ranlib lib.a

と同等のことを Makefile ではどうやってかけば良いのでしょう?

103 :デフォルトの名無しさん:2008/10/25(土) 21:31:37
>>100
何故先人の知恵を利用しないのか。
http://www.google.co.jp/search?q=%96%BD%96%BC%8BK%91%A5

104 :デフォルトの名無しさん:2008/10/25(土) 21:32:37
>>101
アルゴリズムによる

105 :デフォルトの名無しさん:2008/10/25(土) 21:41:52
#include <stdio.h>

void main()
{
for( int i=0; i<10; i++ )
printf( "%d\n", i );
for( int i=0; i<10; i++ )
printf( "%d\n", i );
}

これって VC++6 だとコンパイルエラーなんだけど
最新のはOKなのですか?

106 :デフォルトの名無しさん:2008/10/25(土) 22:04:41
>>105
OKだよ。
そしてVC6のおまじない。
#define for if (0) ; else for

107 :デフォルトの名無しさん:2008/10/25(土) 22:09:21
>>101
重複順列だな。
探したことあるけど、STLにはないから自分で作るしかない。
重複しない順列なら next_permutation があるんだけど。


108 :101:2008/10/25(土) 22:48:09
>> 107

thx !

109 :デフォルトの名無しさん:2008/10/26(日) 00:37:12
>106
それって何してるの?

110 :デフォルトの名無しさん:2008/10/26(日) 00:41:09
forをif (0) ; else forに置換


111 :デフォルトの名無しさん:2008/10/26(日) 00:42:09
>>109
>>105のようなコードがVC6でも通るようになる。
原理はifの真側とelse側でそれぞれスコープが作られることの利用。
もちろん規格準拠な処理系では無害。

112 :デフォルトの名無しさん:2008/10/26(日) 01:17:18
char *s;
s = fgets(linebuffer, BUFFERSIZE, inputfile);
if (s == NULL) {
break;
}

こんな記述があったのですが、コレって大丈夫なんですか?
fgets()って、文字列の先頭ポインタを返すので、sには入ると思うのですが、
fgets()が取り出した文字列自体はどこにあるのですかね??

113 :デフォルトの名無しさん:2008/10/26(日) 01:27:28
つman fgets
> gets() and fgets() return s on success, and NULL on error or when end of file occurs while no characters have been read.
標準ライブラリの関数はとりあえずmanを嫁。

linebufferのアドレスを先頭アドレスとしたBUFFERSIZE分の長さの配列があると仮定して書き込む。
んで、returnで成功したかどうか判別している。

114 :デフォルトの名無しさん:2008/10/26(日) 11:46:42
#include <stdio.h>

int i;
void main()
{
int j;
printf( "%d\n", i );
printf( "%d\n", j );
}

この結果が
0
-85899346
になるのですが
グローバル変数 int i は初期化しなくても 0 になるということは
保証されているのでしょうか?

115 :デフォルトの名無しさん:2008/10/26(日) 12:20:25
>>114
ええ、保証されます。


116 :デフォルトの名無しさん:2008/10/26(日) 14:26:35
>>115
ありがとうございます

117 :デフォルトの名無しさん:2008/10/26(日) 14:29:16
>>113
ありがとうございます!

118 :デフォルトの名無しさん:2008/10/26(日) 17:36:11
>>120
ありがとうございます


119 :デフォルトの名無しさん:2008/10/26(日) 17:48:56
>>119
ありがとうございます

120 :デフォルトの名無しさん:2008/10/26(日) 19:02:49
>>118
いえいえ、どういたしまして。

121 :デフォルトの名無しさん:2008/10/26(日) 19:55:47
>111
なるほど、スコープを作ってやるワケか。
そしてVC6ってforの初期化部でスコープ作らないのか…ガクブル

122 :デフォルトの名無しさん:2008/10/26(日) 20:27:54
forのスコープが有効になったのは後になってからだからな
2003でもデフォルトは同じ。オプションでかえられるけど。

123 :デフォルトの名無しさん:2008/10/26(日) 20:30:41
>>121
ARMくらいではVC6のforの挙動が正しかった。

124 :デフォルトの名無しさん:2008/10/26(日) 22:30:22
C言語の構造体やポインタとか結構解ってきました。
C++言語もなんとなくわかってきました。
WinSDK少し使えます。

そこで何か実用的なプログラムを組みたいと思います。
みなさんは初めて作った実用的なプログラムってなんですか?

125 :デフォルトの名無しさん:2008/10/26(日) 22:32:15
{
int i;
for( i=0; i<10; i++ )
printf( "%d\n", i );
}
for( i=0; i<10; i++ )
printf( "%d\n", i );

これでコンパイルエラーなら分かるんだけどね
なんかしっくりこないが、仕様のようであきらめよう

126 :デフォルトの名無しさん:2008/10/26(日) 22:32:36
モジュール分割の概念が存在しない
1ファイル1万行のシューティングゲーム

127 :デフォルトの名無しさん:2008/10/26(日) 22:33:48
>>124
自分のHDのファイルの一覧を表示するプログラム
再帰処理なんかも考えさせられる

実用的とは言えないが、へー ぐらいの感動はあった

128 :デフォルトの名無しさん:2008/10/27(月) 07:29:24
16連射しないと終了しないゲーム

129 :デフォルトの名無しさん:2008/10/27(月) 09:15:08
C言語から配列に機械語を直接書きこんで、それを関数ポインタとして実行するっていう
ことの解説で、一番まとまってるページを教えてください。
できればXbyak使わない感じで

130 :デフォルトの名無しさん:2008/10/27(月) 10:15:12
ここにキチガイが現れたんだが ID:FJ+86jwr
誰かころしてくれ
http://pc11.2ch.net/test/read.cgi/gamedev/1217601153/

677 名前:名前は開発中のものです。[sage] 投稿日:2008/10/27(月) 07:30:02 ID:FJ+86jwr
>>676
ああ、うぜー
rand()%0xFFFFFFFF

678 名前:名前は開発中のものです。[sage] 投稿日:2008/10/27(月) 07:31:07 ID:H6+Ksq4k
>>677
お前は数字も読めないのか

679 名前:名前は開発中のものです。[sage] 投稿日:2008/10/27(月) 08:45:32 ID:FJ+86jwr
>>678
は?
詩ねよバカ

680 名前:名前は開発中のものです。[sage] 投稿日:2008/10/27(月) 09:04:23 ID:H6+Ksq4k
>>679
悔しいのうwwww悔しいのうwwww

131 :デフォルトの名無しさん:2008/10/27(月) 10:26:40
どうみてもID:FJ+86jwr以外のがおかしいw
言動はちょっとあれだが。

132 :デフォルトの名無しさん:2008/10/27(月) 10:40:13
ID:FJ+86jwr=ゴミグラマ

133 :デフォルトの名無しさん:2008/10/27(月) 16:18:43
テンプレートの中に、テンプレートが入ってるプログラム
なのですが、これはどういうふうに理解すればよいでしょうか?

template <class DataType,
     template <class DataType> class Buffer = RingBuffer >
class InPort
 : public Buffer<DataType>
{
     :


134 :デフォルトの名無しさん:2008/10/27(月) 19:23:38
for文に関しての質問です
for ( JX = 1 ; JX <= MDX ; JX++ )
{for (JY=1;JY<=MDY;JY++)
{for (JZ=1;JZ<=MDZ;JZ++)
EPSX[JX][JY][JZ]=EPS0;
EPSY[JX][JY][JZ]=EPS0;
EPSZ[JX][JY][JZ]=EPS0;
AMUX[JX][JY][JZ]=AMU0;
AMUY[JX][JY][JZ]=AMU0;
AMUZ[JX][JY][JZ]=AMU0;
SIGX[JX][JY][JZ]=SIG0;
SIGY[JX][JY][JZ]=SIG0;
SIGZ[JX][JY][JZ]=SIG0;
}
}
これでbcc32でコンパイルを行うと
E2188 : 式の構文エラー
が表示されます。
for文としては何を間違えてしまっていますか?

135 :デフォルトの名無しさん:2008/10/27(月) 19:43:14
#include <stdio.h>

enum { MDX, MDY, MDZ, EPS0, AMU0, SIG0 };
void    main()
{
    int JX, JY, JZ;
    int EPSY[10][10][10], EPSX[10][10][10], EPSZ[10][10][10];
    int AMUX[10][10][10], AMUY[10][10][10], AMUZ[10][10][10];
    int SIGX[10][10][10], SIGY[10][10][10], SIGZ[10][10][10];

    for ( JX = 1 ; JX <= MDX ; JX++ )
    {
        for (JY=1;JY<=MDY;JY++)
        {
            for (JZ=1;JZ<=MDZ;JZ++)
                EPSX[JX][JY][JZ]=EPS0;  EPSY[JX][JY][JZ]=EPS0;  EPSZ[JX][JY][JZ]=EPS0;
            AMUX[JX][JY][JZ]=AMU0;  AMUY[JX][JY][JZ]=AMU0;  AMUZ[JX][JY][JZ]=AMU0;
            SIGX[JX][JY][JZ]=SIG0;  SIGY[JX][JY][JZ]=SIG0;  SIGZ[JX][JY][JZ]=SIG0;
        }
    }
}
VC++6.0 問題ない

136 :133:2008/10/27(月) 20:19:02
他所で聞いてきます…

137 :デフォルトの名無しさん:2008/10/27(月) 21:23:53
>>134
最内周のforに{}がない。
てか外側はなくてもよいのになぜ内側だけないんだろ。

138 :デフォルトの名無しさん:2008/10/28(火) 10:21:44
>>133
かっこ { } の数がおかしいかもしれんが 3D は分からないのでどうしようもないし、
こんなことぐらいでつまづくようであれば今後の先行きは見えているようなもの

139 :デフォルトの名無しさん:2008/10/28(火) 15:18:29
かっこつけんな!

140 :デフォルトの名無しさん:2008/10/28(火) 23:04:01
eclipseでワークスペースがC:\xampp\htdocsの場合
上の階層のC:\xampp内にclassファイルを作成したりしたい場合は
eclipseでは作成できないのでしょうか?

141 :デフォルトの名無しさん:2008/10/28(火) 23:04:55
誤爆

142 :デフォルトの名無しさん:2008/10/28(火) 23:41:39
>>100

ハンガリアン記法
http://ja.wikipedia.org/wiki/%E3%83%8F%E3%83%B3%E3%82%AC%E3%83%AA%E3%83%BC%E8%A8%98%E6%B3%95
”1つの例”として、見てみるのもいいかもしれない。

カプセル化
http://ja.wikipedia.org/wiki/%E3%82%AB%E3%83%97%E3%82%BB%E3%83%AB%E5%8C%96
カプセル化をがんばると幸せになれるかも。

タスクシステム
http://codezine.jp/article/detail/297?p=1
タスクシステムとサンプルコードがあるので、
この人のスタイルを見てからいろいろ考えてみるのもいいかもしれない。

と、あまり実務経験のない俺が言ってみる。
(誰か突っ込みヨロ)

143 :デフォルトの名無しさん:2008/10/28(火) 23:47:21
ものすごい初歩的な質問です。
cで
scanfで数字を入力してもらって
それが数字でない場合(たとえばaとか)
数字を入力してください。
と表示したいと考えています。

入力されたキーが数字か数字でないかを
判断するにはどうすればよいでしょうか?
よろしくお願いします。

144 :デフォルトの名無しさん:2008/10/28(火) 23:49:19
scanfの戻り値は変換を行った個数。
まあ、すぐにfgets+sscanfに移りたくなるだろうが。

145 :デフォルトの名無しさん:2008/10/29(水) 09:35:42
標準にisdigit()ってのがあるけど、これを自分で書けないようじゃプログラミングなんてできんだろう・・・。
素朴にやるなら判定を10個並べるだけだぞ。

146 :デフォルトの名無しさん:2008/10/29(水) 10:05:50
>>145
何かあったのか?

そんなもん知らなかったし、使う予定もないだろうし

147 :デフォルトの名無しさん:2008/10/29(水) 13:15:35
>>146
>145が>143からの流れだと理解できないなら、無理にレスする必要ありませんよ。

それはそれとして、>143に対して>145のレスも的が外れているが。

148 :デフォルトの名無しさん:2008/10/29(水) 14:55:16
つーか判定10個も並べないでくれ・・・
if文一行で終わるだろう

149 :デフォルトの名無しさん:2008/10/29(水) 16:23:22
img[0] = LoadGraph( "test00.bmp" );
img[1] = LoadGraph( "test01.bmp" );
img[2] = LoadGraph( "test02.bmp" );
img[3] = LoadGraph( "test03.bmp" );
img[4] = LoadGraph( "test04.bmp" );
img[5] = LoadGraph( "test05.bmp" );
img[6] = LoadGraph( "test06.bmp" );
img[7] = LoadGraph( "test07.bmp" );
img[8] = LoadGraph( "test08.bmp" );
img[9] = LoadGraph( "test09.bmp" );



char str[80];
for( int i=0; i<10; i++ ) {
  wsprintf( str, "test%02d.bmp", i );
  img[i] = LoadGraph( str );
}

どっちがいい?

150 :デフォルトの名無しさん:2008/10/29(水) 16:50:14
>>149
前者の左辺と右辺の関係が崩れない保障があるなら、後者。

151 :デフォルトの名無しさん:2008/10/29(水) 17:20:46
>>150
見やすさとしては前者じゃね?

152 :デフォルトの名無しさん:2008/10/29(水) 17:26:31
配列に初期化で入れておいてループで読む中間タイプはどうだろう。

153 :デフォルトの名無しさん:2008/10/29(水) 17:58:57
>>152
コードにすると?

154 :デフォルトの名無しさん:2008/10/29(水) 18:05:04
char *filename[] = {
"test00.bmp",
"test01.bmp",
   ・  
   ・  
"test08.bmp",
"test09.bmp",
};

for( int i=0; i<sizeof(filename)/sizeof(filename[0]); i++ ) {
img[i] = LoadGraph( filename[i] );
}

155 :デフォルトの名無しさん:2008/10/29(水) 18:12:33
filenameはstaticにしないと無駄なコピーが発生するぞ。

156 :デフォルトの名無しさん:2008/10/29(水) 18:14:24
ああ、まあ関数の外に出すにしてもstaticはあったほうがいいな。

157 :デフォルトの名無しさん:2008/10/30(木) 13:08:23
の前に、const 忘れちゃおしおきよ

158 :デフォルトの名無しさん:2008/10/30(木) 16:56:59
わきがくさい























って言ってたZE☆

159 :デフォルトの名無しさん:2008/10/31(金) 16:58:31
板違いで申し訳ないけど
ゲーム制作メンバー募集でまともなところない?
ゲ製作技術のところはキチガイか揚げ足とりしかいなくてどうしようもない

160 :デフォルトの名無しさん:2008/11/01(土) 14:33:14
http://www.amazon.co.jp/%E2%98%86%E5%BC%BE%E5%B9%95%E5%BC%B5%E3%82%8D%E3%81%86%E2%98%86/lm/R3TGJA6II959K3/ref=cm_lmt_dtpa_f_2_rdssss0
こいつを見てくれ
どう思う?

161 :デフォルトの名無しさん:2008/11/01(土) 20:56:40
Borland C++ Compilerがダウンロードできないんですけど
どうすればいいですか?

162 :デフォルトの名無しさん:2008/11/01(土) 21:42:21
>>160すごく・・・


申し訳ありません質問させて頂きたいのですが
外部機器として認識してくれるカメラを【webカメラ】として認識してくれるようにするためのプログラム(ドライバ・・と言うのかもしれません)を
組む事は難解、複雑なのでしょうか?

ちなみにamcapでは認識してもらえているようなのです。「その他の外部機器として・・」

osはvista 32bit ですが、win上で認識してくれる可能性がある場合xpでも64bitでも構いませんので
ございましたら是非、余す事無く情報をお願い致します

機器名も参考までに乗せておきます(PLAYSTATION®Eye)

163 :デフォルトの名無しさん:2008/11/01(土) 23:07:51
質問主のプログラミング知識で、課題が難解かどうか分からないなら、
覚えて組むのに相当時間がかかるだろうw

でもPSの機器なら、検索すればドライバは出てくるかも
PSや箱のコントローラは有志が出来の良いドライバを作ってくれてるし
気長に待つか、急ぎならあきらめて別のを買うしか

164 :デフォルトの名無しさん:2008/11/01(土) 23:51:15
やはりそうですよね、難易度の反応を伺って
「もう動作してるんだろ?WEBカメラとして認識させるくらいならここをこうで簡単だぜ!」
という感じならば
そこをそうして頂けませんか?と調子よく持って行こうとしていたことは謝ります。

海外の方がドライバを制作されていらっしゃるのですが「動作したから終わりね:b」
というスタンスでいらっしゃるので、これ以上は望めないかな・・と
なぜWEBカメラデバイスとして認識して欲しいかというと
それだけで(ソフト間の)仕様用途がとても広がり、とても助かるのです(申し訳ありません利己主義な表現で)

と、とても正直に書いてみましたがまだ2割方期待を持っていたりします
もう少し模索してみます、有り難うございました。



165 :デフォルトの名無しさん:2008/11/02(日) 08:16:38
上司に聞けよ

166 :デフォルトの名無しさん:2008/11/02(日) 10:46:45
おはようございます、疑問があり舞い戻って参りました申し訳ありません
質問させて頂きたいのですが
【WEBカメラデバイスとして認識するドライバ】には、そのような”命令”がどこかにあると思い、

メーカーで配布されているドライバを解析し、(あくまで道徳的に”改変”まではしないという定で^^;)
その”命令”の値を見つけて、海外の方が作られた.ini.datの様なプログラムに組み込めばWEBカメラとして認識するように思ったのですが・・
私の見解ではやはり甘々でしょうか、回答、宜しくお願い致します。

167 :デフォルトの名無しさん:2008/11/02(日) 10:52:11
可能かもしれないが、べらぼうに面倒。
場合によっては不可能。

168 :デフォルトの名無しさん:2008/11/02(日) 10:57:41
そうですか・・とりあえず、stirlingで【camera】等のワードで検索して
ファイル比較ソフトでも使って、差分を書き出してみます
有力な回答、有り難うございました。

169 :デフォルトの名無しさん:2008/11/02(日) 17:04:30
>>166
もしブラックボックスなドライバのリバースエンジニアリングとかそういうのに慣れた人ならもしかしたら
可能かもしれないけど、普通の人にはまず無理だと思うよ。
ドライバというかもっと一般的に実行ファイルの中身がどうなってるか理解してます?

170 :デフォルトの名無しさん:2008/11/02(日) 17:37:29
大麻の栽培方法を調べたのですが
どこで作ればいいですか?
と聞いているようなもの

171 :デフォルトの名無しさん:2008/11/02(日) 18:05:05
とある掲示板で以下のような文章があったのですが、「通りすがり」という方の主張は本当なのでしょうか?

//--------------------------------------------------------------------------------

日時: 2008/10/28 22:53
名前: 通りすがり


著作権との関係
検索エンジンは、その仕様上インターネット上のコンテンツを複製してキャッシュとして保存するようになっている。
このような仕様は、日本では、著作権法上、問題があるため、検索エンジンの仕様を合法とする
海外(米国など)のサーバに置かれている。

「Wikipedia」より一部抜粋

違法というよりは「合法化していない」という感じですね
2次創作も実際合法化してないという意味では同じですが
検索サイトという大規模なことをしようとするならば
極力危険を避けるべきでは?というところでしょうか?
//-----------------------------------------------------------------------------

URLは以下の通りとなります
http://www.freem.ne.jp/cgi-bin/bbs/party/osiete.cgi/mode_view/no_494/p_2/


172 :デフォルトの名無しさん:2008/11/02(日) 18:35:02
なぜこのスレで聞こうと思ったのか
なぜ自分で調べようとしないのか

173 :デフォルトの名無しさん:2008/11/02(日) 18:42:14
グーグルに聞こうかとしたが日本語のサポート宛でないといけないらしく
いろいろと手続きが多かったのでここで聞くことにしました

174 :デフォルトの名無しさん:2008/11/02(日) 19:25:03
スレタイを見ろバカモノ

175 :デフォルトの名無しさん:2008/11/02(日) 19:25:21
ループとputcharを使って、y=x*xの座標を*でプロットするプログラム
を作りたいと思ってるんですけど、どうすればいいですか。縦をy軸とします。

176 :デフォルトの名無しさん:2008/11/02(日) 19:42:59
何がわかんないの?

177 :デフォルトの名無しさん:2008/11/02(日) 19:59:06
とりあえず、y=25のときx=-5,5の2点をプロットして、そのあと改行
します。そのあとyが24から17までを改行で、何も表示させないように
しようかとしたんですけど、無限ループになってしまうんです。

178 :デフォルトの名無しさん:2008/11/02(日) 20:18:14
>>177
>175を見る限りCだと思うけど、C初心者スレにでもソースを貼って教えを乞いたら?

179 :デフォルトの名無しさん:2008/11/03(月) 23:26:20
0x100Cと0012FF88の違いって何?
同じものならどういう書き方の違いがあるの?

180 :デフォルトの名無しさん:2008/11/03(月) 23:27:13
同じものではないです。
値が違います。

181 :デフォルトの名無しさん:2008/11/04(火) 16:02:25
こんにちは CもしくはC++で とある保存機能が削除されたプログラム「.exe」に「保存機能」を追加する場合
同フォルダ内 プログラムの.dll内へ「保存機能を追加するプログラム」を書く事になるのだと思うのですが
その「保存機能を追加するプログラム」を1つだけ置けば完結。みたいな雛形などはあるのでしょうか?
それともプログラム1つ1つの動作に関連付けて いかないといけないのでしょうか?
文だけでは説明が難しいので解説のため画像をうpしておきます
左が前者 右が後者ですhttp://www.vipper.org/vip978703.jpg.html

182 :デフォルトの名無しさん:2008/11/04(火) 16:24:18
知らんがな。

もともと、保存機能が別のDLLで行われることが分かっていて、
なんらかの事情でそのDLLだけ持っていないというのであれば、
オリジナルと同じように作ればできるとは言える。

そうじゃないなら無理やりにでもやるしかない。

もちろんEXEのソースはないという前提だよな。

183 :デフォルトの名無しさん:2008/11/04(火) 18:03:49
VC++6です。ヘッダの定義のマクロで悩んでいます。

#define __myheader_H__
前と後ろの"__"は何で2つなんだろうか?

#define _INCLUDE_myheader_H_
という風に、最後の"_"が1つの物もあるけれどどう違うのか?

INCLUDEとmyheaderの間の"_"は本来スペースだし、myheaderとHの間の
"_"は本来.(ドット)ですが、何でもかんでも"_"になってますけど
これは何なの?

など、本も5,6冊買ったし、ネットも散々検索してるのですが
なかなか答えが見つかりません。これは一体何なのでしょうか?
どこか書いてあるサイトなり何なりありませんでしょうか?

何卒よろしこ

184 :デフォルトの名無しさん:2008/11/04(火) 18:10:40
>>183
先頭のアンダーバーには色色制約があるので二つ並べているのだろう。
末尾のアンダーバーは先頭とのバランスだと思う。__FILE__に倣っているのかも知れない。
途中のアンダーバーはドットの代わり。

185 :デフォルトの名無しさん:2008/11/04(火) 18:11:21
>184s/__FILE__に/__FILE__などに/

186 :デフォルトの名無しさん:2008/11/04(火) 18:13:44
重要なことは、以下に続くであろうソースとかぶらないこと。

187 :デフォルトの名無しさん:2008/11/04(火) 18:16:37
どうせインクルードガードだ。かぶりゃせんだろ。

188 :183:2008/11/04(火) 18:30:48
なるへそ、みんなありがd。

調べてるうちにborandのC++とかと共通に出来るようにしてるのかな、
とかなんとなくなじんで来た。おかげで少し抵抗が無くなった。

189 :デフォルトの名無しさん:2008/11/04(火) 19:45:01
>>183
>前と後ろの"__"は何で2つなんだろうか?
>最後の"_"が1つの物もあるけれどどう違うのか?

別に1個でも2個でも0個でもいいが、
アンダーバーの多い方が他の識別子 (変数名とか関数名とか) とかぶりにくい

>"_"は本来.(ドット)ですが、何でもかんでも"_"になってますけどこれは何なの?

マクロ名にドットやスペースは使えないから止むを得ない

190 :デフォルトの名無しさん:2008/11/04(火) 19:48:03
>>183

昔のコンパイラは、

#pragma once

がサポートされていなかったので、それの代わり。 相互参照され
ているクラスなどで、同じincludeファイルを二度読みして再定義
エラーを出さないための工夫。

途中の意味不明なキャラクタの羅列は、GUIDを使って、定義名が
重複してしまうのを防いでいるだけ。


191 :181:2008/11/04(火) 19:59:16
>>182そうですね、ソースがないのにデコンパイルとはけしからんと言われそうなので
この質問自体が仮説だとして考えて頂ければ幸いです
インポート.dllがある場合、この中身の値をエクスポートに変えて別名で保存したら
エクスポートが出来るのではないかと考え、いま試していますがやはり.exe内の値「プルダウンからのエクスポート機能起動」などの関連付けも必要になってきそうです

192 :デフォルトの名無しさん:2008/11/04(火) 21:31:32
はじめまして
int m,t;
があった時に
m>?=t;
という式を実行したら何が起こるのでしょうか??

初めてみたのですが、

if (m<t) {
m = t;
}
と同値ですか?

どうやらそんな気がするのですが

m>?=t; と m<t が逆でなんかおかしい気も....

よろしくお願いいたしますm(__)m

193 :デフォルトの名無しさん:2008/11/04(火) 21:34:30
それはどこのコンパイラ、本当にCもしくはC++か?
標準にはないぞ。

194 :デフォルトの名無しさん:2008/11/04(火) 21:39:17
unsigned charとfloatの掛け算の結果はfloatにならないのは何で?


195 :デフォルトの名無しさん:2008/11/04(火) 21:42:23
>>193さん

すみません。
Red Hat 3.4.6-3です。

cygwinとかでやったらエラーになりますが...Red Hat 3.4.6-3だと通ります...


196 :192:2008/11/04(火) 21:52:22
>>193さん

すみません。あとC++です。

197 :デフォルトの名無しさん:2008/11/04(火) 22:08:33
>>192
>? は大きい方を返す演算子。GCC 拡張
ttp://gcc.gnu.org/onlinedocs/gcc-3.0.4/gcc_6.html

198 :デフォルトの名無しさん:2008/11/05(水) 02:41:30
>>191
デコンパイルしてどうにかできるんならそうすれば?

199 :デフォルトの名無しさん:2008/11/05(水) 07:17:13
>>194
結果を整数型の変数に代入してるからだろ


200 :デフォルトの名無しさん:2008/11/05(水) 11:15:18
>>194
その組み合わせだと、結果はdoubleになるね。

201 :デフォルトの名無しさん:2008/11/05(水) 14:32:07
>>197
きめぇw

202 :デフォルトの名無しさん:2008/11/06(木) 20:33:13
それオーバーロードできるの?

203 :デフォルトの名無しさん:2008/11/06(木) 21:34:16
Linuxでたぶんコンパイラはgccだと思うんですけど、sin,cos,tanを計算させるときに
どう定義すればいいんですか。ただ#include<math.h>を書くだけではだめなのですか。
なんかコンパイルしたときに、sin,cos,tanが定義されていないというエラーが出たのですが・・・

204 :デフォルトの名無しさん:2008/11/06(木) 21:36:56
gcc なにか.c -lm
-lm -lm -lm -lm -lm -lm -lm -lm -lm -lm

205 :デフォルトの名無しさん:2008/11/06(木) 21:47:03
コンパイラが出すエラーとリンカが出すエラーを区別できないようでは
(C/C++を使うのは)難しい

206 :デフォルトの名無しさん:2008/11/07(金) 00:22:24
”fopen”とか”open”はAPIの”CreateFile”が最終的に呼ばれているのですか?
機能や応用などを考えるとCreateFIleをメインで勉強した方がいいですかね?

207 :デフォルトの名無しさん:2008/11/07(金) 01:57:58
>>206
わざわざそうする意味はない、fopenですむ状況ならfopen使っとけ

お前の考える機能や応用がなんなのかは知らんが

208 :183:2008/11/07(金) 12:35:56
>>189-190
サンクスコ。もっとなじんだよ。
なんか、こう、手のひらになじんできた気がするよ

おそレスゴメソ

209 :デフォルトの名無しさん:2008/11/07(金) 19:39:34
double a[4][4]={{2,2,0,-1},{1,1,2,0},{3,0,1,1},{1,2,-1,1}};

と初期化したら

a[0][1] = 2
a[0][2] = 2
a[0][3] = 0

のように、1次元目が0の場所に最初の{ }が代入されますか?

210 :デフォルトの名無しさん:2008/11/07(金) 20:33:35
そうですよ

211 :デフォルトの名無しさん:2008/11/07(金) 20:34:11
って例は間違ってるじゃないか
a[0][0] = 2
a[0][1] = 2
a[0][2] = 0

212 :デフォルトの名無しさん:2008/11/07(金) 22:07:52
c++でiniから文字列を読み取るのにGetPrivateProfileStringを使ってたんだけど、
読込先がLPSTRだからいちいち適当な領域を確保しなきゃいけないんだけど何とかなりませんかね?
理想を言えばstring型に直接代入したいんだけど…

213 :デフォルトの名無しさん:2008/11/07(金) 22:09:20
fstream と string と boost::regex で実装すれば。

214 :デフォルトの名無しさん:2008/11/07(金) 22:21:17
boost::regexって何かと思ったら正規表現ライブラリか。
始めて半年の素人に正規表現とか無理だわorz

どうせ自分用ツールだし、数字でっち上げて運用回避するよ
回答ありがとう

215 :デフォルトの名無しさん:2008/11/07(金) 22:22:32
自分用ツールだから勉強がてら使ってみようとは思わないのか。


216 :デフォルトの名無しさん:2008/11/07(金) 22:27:50
逆に、自分用ツールだからお茶を濁して済ますこともできるわけじゃない。

217 :デフォルトの名無しさん:2008/11/07(金) 23:10:08
>>212
事前にそのiniファイルのサイズを取得しておけば?

218 :デフォルトの名無しさん:2008/11/07(金) 23:13:19
>>217
その発想はなかった!d

219 :デフォルトの名無しさん:2008/11/08(土) 06:47:41
質問よろしくお願いします。
forkしたプロセスをブロッキングせずにループで終了を待ちたいのですが、何か方法はありますか?
環境は
Linux 2.6
gcc4.0
です


220 :デフォルトの名無しさん:2008/11/08(土) 07:09:41
>>219
waitpid を WNOHANG つきで呼びなしゃい

221 :デフォルトの名無しさん:2008/11/08(土) 22:39:25
bitsetの内容をiniに保存したいんだけど、桁が多いと当然unsigned longじゃ足りないじゃないですか。
この場合、文字列として読み込んでから1桁ずつ調べて順番に入れていくしか方法はないでしょうか?

222 :デフォルトの名無しさん:2008/11/09(日) 00:18:03
WinAPIのgetPrivateProfile〜()を使うと言う前提なら、〜String()を使うしかないっしょ。

223 :デフォルトの名無しさん:2008/11/09(日) 02:17:07
>>220
どうもありがとうございました。
もっとmanを読むべきでした・・・

224 :デフォルトの名無しさん:2008/11/09(日) 05:00:33
C,C++のソース内でexeファイルを実行するのってどうやるんですか?

225 :デフォルトの名無しさん:2008/11/09(日) 05:03:22
すいません、あとソース内でIEを開いてyahooを開く処理って
どうやるんでしょうか 教えてくださいお願いします

226 :デフォルトの名無しさん:2008/11/09(日) 09:57:40
>>224
system()

>>225
ブラウザを引き数つきで起動。

227 :デフォルトの名無しさん:2008/11/10(月) 09:57:58
>>224-225
どっちも、::ShellExecute() でいける。

Webを開くには、exeパスの代わりにURL文字列("http://www.yahoo.co.jp")
を渡し、コマンドに"open"あとの引数は、NULLでよいかと。

exeやcom、bat以外のデータファイルのパスを与えると、拡張子に関連付け
られたプログラム(例えば.txtならメモ帳)が起動する。

ちなみに、起動されるブラウザは「標準のブラウザ」になる。 通常は
IEだが、「スタートメニュー」−「プログラムのアクセスと既定の設定」
でMozilla等IE以外のブラウザを選択していれば、そのブラウザが使わ
れる。


228 :デフォルトの名無しさん:2008/11/10(月) 10:03:21
>>212

CStdioFileクラスを使う。

  CStdioFile file;
  CString strLineBuf;
  CStringArray arrFileBuf;

  if(file.Open(...))
  {
    while(file.ReadString(strLineBuf))
    {
      arrFileBuf.Add(strLineBuf):
    }
    file.Close();
  }



229 :デフォルトの名無しさん:2008/11/10(月) 12:57:39
最早、GetPrivateProfileString()は捨てられているのね。

230 :デフォルトの名無しさん:2008/11/10(月) 13:08:43
int medianfilter()
{
int sortr[9],sortg[9],sortb[9];

col.r = median(sortr);  ☆
col.g = median(sortg);  ☆
col.b = median(sortb);  ☆

return TRUE;
}

int median(int *sort)
{
〜〜〜
}

これをビルドしようとすると☆の行で
error C3861: 'median': 識別子は、引数依存の照合を使用しても見つかりません。
となるんですが、どうすればいいでしょうか?

231 :デフォルトの名無しさん:2008/11/10(月) 13:14:37
>>230
int medianfilter()の前にint median(int * sort)を移動。できればstaticもつけておく。

232 :デフォルトの名無しさん:2008/11/10(月) 13:50:48
>>231
出来ました。
ありがとうございました。

233 :デフォルトの名無しさん:2008/11/10(月) 16:23:13
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7987.txt

上記のa6b.c a6c.c a6d.c でつくった関数をa6a.cでexternを使って呼び出したいのですが、コンパイル時にエラーが出てしまいます。どなたか対処法をお願いします。externを使わずに1つのソースとしてコンパイルすると成功し実行もできます。

エラー内容
$ gcc -o a6a a6a.c
In file included from a6a.c:5:
a6c.c:9: error: conflicting types for 'matrix'
a6b.c:9: error: previous declaration of 'matrix' was here
In file included from a6a.c:6:
a6d.c:9: error: conflicting types for 'matrix'
a6c.c:9: error: previous declaration of 'matrix' was here
a6d.c:9: error: conflicting types for 'matrix'
a6c.c:9: error: previous declaration of 'matrix' was here
a6a.c:12: error: conflicting types for 'matrix'
a6d.c:9: error: previous declaration of 'matrix' was here
a6a.c:12: error: conflicting types for 'matrix'
a6c.c:9: error: previous declaration of 'matrix' was here
a6a.c:14: error: conflicting types for 'omatrix'
a6d.c:12: error: previous definition of 'omatrix' was here
a6a.c:15: error: conflicting types for 'amatrix'
a6b.c:12: error: previous definition of 'amatrix' was here
a6a.c:16: error: conflicting types for 'mmatrix'
a6c.c:12: error: previous definition of 'mmatrix' was here


234 :デフォルトの名無しさん:2008/11/10(月) 16:27:29
cファイルをincludしたら同じ名前の関数があちこちできちゃうだろ。
hファイルにプロトタイプ宣言を書いて、それをincludeすればいい。

235 :デフォルトの名無しさん:2008/11/10(月) 16:30:18
つーか今回は同じtypedefか
これもhに入れてそれぞれincludeすりゃいい。
あと、その時のコンパイルは、gcc -o a6a a6a.c a6b.c a6c.c a6d.c で

236 :デフォルトの名無しさん:2008/11/10(月) 16:54:33
hファイルというものを使う方法以外に何かありませんか?作り直してみましたが、hファイルなんてまったく使ったことがなかったのでエラーがたくさんでてしまいました。

237 :デフォルトの名無しさん:2008/11/10(月) 16:59:46
じゃあinclude無しで。
extern入れてるし、それぞれでtypedefしてるからなくてもいいだろ。
コンパイルだけ>>235のとおりでやってみ

238 :デフォルトの名無しさん:2008/11/10(月) 17:08:58
>>237
できました!ありがとうございます。

239 :デフォルトの名無しさん:2008/11/10(月) 17:49:53
ゲーム作ってるんだけど
とりあえずDXライブラリというのは一通り理解したんだが
つぎのステップとしてはやっぱwindowsAPIを本格的にやるのがいいんですかね?

240 :デフォルトの名無しさん:2008/11/10(月) 18:30:53
いや、作ってみればいいんでない?一通り理解したなら。

241 :デフォルトの名無しさん:2008/11/10(月) 18:41:44
あ、ごめんなさい。作ったんです。
で、ちょっとDXライブラリの機能だけじゃ物足りないかなーとか思い始めたんで・・・。
3Dとかにも挑戦してみたいと。
すみません。

242 :デフォルトの名無しさん:2008/11/10(月) 18:53:13
DXライブラリはその辺全部やっちゃうからな。
まあ普通にWindow作ってみるのもいいかもね。

243 :デフォルトの名無しさん:2008/11/10(月) 20:01:14
>>242
GDI+とか。

244 :デフォルトの名無しさん:2008/11/10(月) 21:45:46
DirectXって結構しょぼいんだね。
自前で3Dライブラリ作るのが当たり前なのか。。。

がんばってね。応援してるぜ

245 :デフォルトの名無しさん:2008/11/10(月) 21:48:50
D3DXがあるだろ

246 :デフォルトの名無しさん:2008/11/10(月) 22:21:28
vc++2008で質問です。

CLIの中でWIN32って使えますか?

イメージは
CLIで画面を作って
WIN32のプログラムを入れてみたいのですが・・・

h8やPICのCからVCは難し過ぎです

247 :デフォルトの名無しさん:2008/11/10(月) 23:11:00
できる。
あと、Win32がメインの俺にはマイコンのほうこそ別次元の難しさを感じるぞ。

248 :デフォルトの名無しさん:2008/11/10(月) 23:17:24
>>247
サンキューです

マイコンはイベントじゃないから書きやすいよ

249 :デフォルトの名無しさん:2008/11/11(火) 02:38:47
>>245
いやいや、DXライブラリの機能じゃ物足りないって言ってるんだから。
きっとすげえんだよ、彼は。

250 :デフォルトの名無しさん:2008/11/11(火) 21:00:09
こんちわ
c++でWindows標準のメモ帳起動させて40文字3行程度書き込んでメモ帳閉じる
これできますか?
サンプル貰えたら嬉しいです

251 :デフォルトの名無しさん:2008/11/11(火) 22:23:21
>>250
「メモ帳」アプリを起動して、そこに文字を流し込むと言うGUIの動きに何か意味があるの?
そうでないなら、適当なファイルを開いて書き出すだけだがね。
入門書を読めば嫌でもサンプルが見つかると思うぞ。

252 :デフォルトの名無しさん:2008/11/11(火) 22:32:39
CreateProcessしてFindWindowしてSendMessageすりゃいいだけ

253 :デフォルトの名無しさん:2008/11/12(水) 08:11:04
こんちわ
どもレスありがと

VC++6.0のサンプルってVC++2008で動かないのもあるんですか?
基本的に全部動くはずなんですよね?

254 :デフォルトの名無しさん:2008/11/12(水) 10:25:52
一部変わったからコンパイルできないものもあるだろうけど
ほとんどは機械的な置き換えで対処できる。

255 :デフォルトの名無しさん:2008/11/12(水) 12:46:09
vector<string> buff(3);を

func(buff)として void func(vector<string> &buff)という関数に渡す。

この関数でbuffに3つの文字列を入れる。
buff[0] ="hoge";
buff[1] ="huga";


っていう処理を書いたんですが、問題点とかありますか?

256 :デフォルトの名無しさん:2008/11/12(水) 13:16:47
>>255
カプセル化されていないとか、気持ち悪いとか、そういった類を除けば特に問題ないかと。

257 :デフォルトの名無しさん:2008/11/12(水) 20:52:04
C++とC++/CLIってどちらが高尚なの?

258 :デフォルトの名無しさん:2008/11/12(水) 21:04:46
>>257
CLIやるならC#でいいじゃんて感じ


259 :デフォルトの名無しさん:2008/11/13(木) 07:42:19
vc++2008にて質問なのですが

int array[3][4]={
{7,8,-2,3},
{6,-2,9,7},
{1,5,9,-8}
};
という部分で
error C2078: 初期化子の数が多すぎます。
とエラーが出ます。
中身を減らしても、array[10][10]とかにしてもエラーが出るのですが
これはどういうことなんでしょう?

260 :のっちー:2008/11/13(木) 09:13:41
中の、中かっこっているんでしたっけ?

int array[3][4]={
7,8,-2,3,
6,-2,9,7,
1,5,9,-8
};

261 :デフォルトの名無しさん:2008/11/13(木) 09:17:31
要ります。
>259は何か勘違いをしていると思われ。

262 :259:2008/11/13(木) 09:59:34
gccでやったら問題なく通りました。
C++とCの違いの問題なんでしょうか?

263 :デフォルトの名無しさん:2008/11/13(木) 11:05:48
>>261
あっても無くてもどっちでもいい
>>262お前の勘違いだから気にするな

264 :デフォルトの名無しさん:2008/11/14(金) 12:14:42
いや括弧はないとだめだよ

265 :デフォルトの名無しさん:2008/11/14(金) 12:41:15
やってみた?

266 :デフォルトの名無しさん:2008/11/14(金) 12:50:10
どの環境条件で?

267 :デフォルトの名無しさん:2008/11/14(金) 22:22:18
C言語で動画像を処理したいのですが、
画像を連続で読み込んでいくにはどうすればよいでしょうか?

268 :デフォルトの名無しさん:2008/11/15(土) 00:39:28
どうすればって、画像の読み込み処理を連続で実行すればいいのでは

269 :デフォルトの名無しさん:2008/11/15(土) 03:40:23
C言語に何を求めてるのか分からんが
・フォルダ内の全ての画像を連続で読み込む
・それぞれのファイルに赤目補正をする
っていうのはそんなに簡単じゃないよ。

ついでに言うと
・動画ファイルを読み込む
・圧縮形式を変換する
というのも欲しいかもしれないけれど、これもそんなに簡単じゃないよ。

なのでフォトショップでも買ってバッチ処理でもやってくださいな。

270 :デフォルトの名無しさん:2008/11/15(土) 09:18:21
267ですが、あるフォルダに画像データ○○000.cif〜○○100.cifが入っており、
一つ一つ呼び出してある処理をかけたいのです。
画像のファイルネームを渡せばその画像を読み込んでくれる関数はあるのですが、
100個もファイルネームを用意するのは面倒です。
for文とかの繰り返し文の処理でなんとかならないでしょうか?

271 :デフォルトの名無しさん:2008/11/15(土) 10:24:30
フォルダ内にあるファイルを全部読み込む処理を書く。
ファイル形式でフィルタして必要なファイルだけ抽出。
あとは好きなだけ処理すればよし。

272 :デフォルトの名無しさん:2008/11/15(土) 11:14:07
shellから呼べば

273 :デフォルトの名無しさん:2008/11/15(土) 12:34:02
>>270
数字以外の部分が同じならsprintfでファイル名を作成できる
for (i = 0; i <= 100; i++)
{
sprintf(filename, "xxx%03d.cif", i);
// 処理
}


274 :デフォルトの名無しさん:2008/11/15(土) 20:12:37
>>273
なるほど〜ありがとうございます!

275 :デフォルトの名無しさん:2008/11/17(月) 03:17:55
カメラとパンチルト台(PCで方向制御できるカメラ台)を使って
動く物体をカメラが自動追跡する
監視カメラのような機械を作っています。

処理の流れとしては
1.カメラ画像を解析して追跡対象の位置、速度を計算
2.上の結果に基づきパンチルト台の方向、角速度を決める
の二つを以下のようにwhile文で交互に連続で行い追跡しました。
while(loop){
      画像解析
      パンチルト台の操作
      }
しかしこの方法だと画像解析の間はパンチルトができず、
パンチルト台が動いている間は画像解析が止まり、
ゆっくり動く物体はともかく高速で動く物体は追跡できません。

カメラ、パンチルト台共にc++で制御できる環境になっています。
二つの動作をそれぞれ独立かつ同時に行いながら連絡し合う、
この場合は画像解析と台の操作を
別々に二つのwhile文で同時に処理しながら、
片方からもう片方のwhileの文の中へ値を渡すような、
そんな方法って何かないでしょうか?

276 :デフォルトの名無しさん:2008/11/17(月) 03:22:14
どういう環境か知らないけど、とりあえずマルチスレッド。

277 :デフォルトの名無しさん:2008/11/17(月) 03:33:09
>>276
ありがとうございます。
初めて知ったので早速勉強してみます。
ちなみにVisualStudio2005を使っています。

278 :デフォルトの名無しさん:2008/11/17(月) 03:37:58
その機械に興味があるわw
Wiiリモコン+センサーバーを使った遊びみたいでイイネ

279 :デフォルトの名無しさん:2008/11/17(月) 03:57:11
>>278
確かにちょっとしたおもちゃを作っているような感じでやってます。
私は追跡が精一杯ですが、どっかの大学には
この技術のすごいやつ+ロボット制御で
飛んできたボールをバットで打ち返すロボットがいるそうです。
いつかASIMOに搭載されたりするんでしょうか。
ちなみに台は
ttp://www.revast.co.jp/Pt_He/pantilt.html
カメラは2000円の安いUSBカメラです。

280 :デフォルトの名無しさん:2008/11/17(月) 12:55:00
質問です。
すでにPCにインストール済みのdll内のAPIを、Webブラウザ(今回はIE限定)からコールしようとしています。
イントラ内あるいは認証後のWebなど、限られたユーザのみに提供予定で、「信頼済みサイト」に登録するのか可能な状態です。

こういった場合、C++でActiveXコントロールを作るといい、と前に別スレで教わったのですが、
ローカル資産にブラウザからアクセスするのがセキュリティ上好ましくないからか、資料が見つかりませんでした。

そういうサイト、あるいは本でもいいので、もしあれば教えてください。

281 :280:2008/11/17(月) 13:11:21
環境書き忘れました。
Visual Studio 2008 Professional Editionで、OSはXP HomeとVista Businessです。
IEは6以上と考えています。

282 :りょ:2008/11/17(月) 15:08:35
onClick="editEmployeeInfo"(<bean:write name="searchList" property="employee_id"/>)

これで社員Idを送ってるらしいんだけど、
これを自分のとこのページでこの社員IDをキーにデータを取得するのはどうやるんですか?

283 :デフォルトの名無しさん:2008/11/17(月) 15:22:35
それはC/C++の質問なのか?

284 :デフォルトの名無しさん:2008/11/17(月) 16:46:32
C言語(C++に非ず)の質問です。
関数ポインタの書き方を教えて下さい。

やりたいのは
・構造体Sに関数ポインタを持たせたい
・Sへのポインタ(S *s)を渡すと
 Sが保持してる関数(s->func)に引数を与えて呼び出す関数が書きたい
・Sに保持する関数funcは
 引数が3つほどあり(いずれも構造体へのポインタ)
 戻り値も構造体へのポインタ

だいたいで書くとこんな感じです:

// s.h
typedef struct {
  R *func(A *, B *, C *);
} S;
R *caller(S *s) {
  A a; B b; C c;
  s->func(&a,&b,&c);
}

続く

285 :デフォルトの名無しさん:2008/11/17(月) 16:49:38
// main.c
#include "s.h"
R *func1(A *a, B *b, C *c) {
  // 処理
  return Rのポインタ;
}
R *func2(A *a, B *b, C *c) {
  // 処理
  return Rのポインタ;
}
int main() {
  S s1, s2;
  s1.func = func1;
  s2.func = func2;
  caller(s1);
  caller(s2);
  return 0;
}

…と、こんな感じのことがしたいです
(ヘッダの使い方が間違ってたりするのは実際書くとき直します)
関数ポインタは全然書き方が分からなくて文法がおかしいと思いますが
その関数ポインタ関連の正しい書き方が分からなくて…

286 :デフォルトの名無しさん:2008/11/17(月) 16:53:45
>>285
関数型をtypedefしてしまえば普通に書けるべ。

typedef R * func_t(A * a, B * b, C * c);

typedef struct S {
func_t * func;
} S;

287 :デフォルトの名無しさん:2008/11/17(月) 17:09:44
>286
typedef の行で
error: syntax error before '*' token
warning: data definition has no type or storage class

と出ます…

288 :デフォルトの名無しさん:2008/11/17(月) 17:13:12
typedef R (* func_t)(A * a, B * b, C * c);

こうでしょ。RやA,B,Cは定義済みのやつにかえてるよね?

289 :デフォルトの名無しさん:2008/11/17(月) 17:13:40
まさかとは思うが、Rの宣言はその行より前にあるだろうね。

290 :デフォルトの名無しさん:2008/11/17(月) 17:18:04
>>288
構造体Rのポインタを返すのだから、>286でいい筈でしょ。

291 :デフォルトの名無しさん:2008/11/17(月) 17:19:25
>289


292 :デフォルトの名無しさん:2008/11/17(月) 17:20:24
だったらtypedef R* (* func_t)(A * a, B * b, C * c);だろ
関数ポインタ知らないで書いてたのか。
>func_t * func;
こういう書き方もしてるしな

293 :デフォルトの名無しさん:2008/11/17(月) 17:21:05
>289
それでした…

あれ?何でできなかったんだろう…
func_t の戻り値型が int だとどうなりますか?

294 :デフォルトの名無しさん:2008/11/17(月) 17:25:26
>292
関数ポインタの概念は解るんですが、書き方がどうも覚えられなくて
解説通りの関数ポインタをちょっとアレンジしようとすると
文法エラーが出て「あ、あれ???」となることが多いのです…

295 :デフォルトの名無しさん:2008/11/17(月) 17:35:07
>>280
ActiveX自体が下火だから資料探しは難しいな。
ATL COMプログラミングって本が多少はお勧めだけど、
IE上で動くActiveXコントロール限定の話じゃないからその点注意。

Web上のサンプルとかも拾いつつ、とりあえず動き始めればもう一息。
信頼済みに入っていればLoadLibraryなんかも使い放題だと思う。

296 :デフォルトの名無しさん:2008/11/17(月) 17:52:06
あー…ちょっと解ったような…
>292 さんのが多分私の思ってたR型へのポインタを返すもので
>288 さんのがRの実体を返すタイプ、
私が >293 で書いた戻り値型が int の場合は
typedef int (* func_t)(A …以下同文で合ってますか?

…とすると、>286 さんのは…???

297 :デフォルトの名無しさん:2008/11/17(月) 18:00:08
処理系でちょっと書き方変わってくるので、コンパイル通った方が正解。

298 :デフォルトの名無しさん:2008/11/17(月) 18:10:36
>>297
処理系の問題じゃなくて、関数へのポインタをtypedefするか、関数そのものをtypedefするかの違い。

typdef R* (*func_ptr)(A*, B*, C*); // 関数へのポインタのtypedef
typdef R* func(A*, B*, C*); // 関数のtypedef

struct X {
func_ptr f1; // 関数へのポインタの場合は、* が要らない。
func* f2; // 関数のtypdefの場合は、*が要る。
};


299 :デフォルトの名無しさん:2008/11/17(月) 18:11:57
>286だけど、Rへのポインタを返す関数型としてfunc_tをtypedefしているよ。
つまり、>292には想像もできなかったらしいけど、typedefしているものが>292とは違うということ。
ちゃんと、>286には「関数型をtypedef」って書いてあるんだけどねぇ。

300 :デフォルトの名無しさん:2008/11/17(月) 18:16:21
関数型をtypedefしておくと、プロトタイプ宣言を横着できるから面白い。
>298の例なら、func func1, func2;で済んでしまう。
# 却って混乱しそうなのでお勧めはしない。

301 :デフォルトの名無しさん:2008/11/17(月) 23:02:50
構造体のメンバを参照するとき
ドット . とアロー演算子->の違いはなんでしょうか?

302 :デフォルトの名無しさん:2008/11/17(月) 23:05:02
>>301
x->b はつまり ()

303 :デフォルトの名無しさん:2008/11/17(月) 23:05:42
x->b は (*x).b

304 :280:2008/11/17(月) 23:09:02
>>295
本当にありがとう。
ActiveXが下火ってことは、別の技術で同じことが実現できるようになったからなんでしょうか。
その本なら見かけたことあるんで、買ってきます。

305 :デフォルトの名無しさん:2008/11/18(火) 00:26:05
>>304
オープンなインターネットにおいて、Windows/IE限定の技術だったし、
セキュリティもあまりよくない状況にしやすいというのがダメだった。

後継の決定打はない。
Webブラウザで動かすならAjax、Flash、Silverlightのようにローカルリソースを諦めるか、
ローカルリソースを使いたいならClickOnceなんかのように
アプリケーションをインストールさせるという方向に分かれている感じだと自分は思っている。

306 :デフォルトの名無しさん:2008/11/18(火) 23:59:08
Tidy使ってHTML->XHTML変換したいんだがやり方が全然わかんね
utf8な文字列を投げてコンソールに出力したときに日本語部分が全部????になる
tidyOptSetValue(tdoc, TidyOutCharEncoding, "shiftjis");やらやってみたけど全然だめ
誰か助けてくれ

ttp://tidy.sourceforge.net/docs/api/
ドキュメントわからなさすぎ 関数名書いてあるだけとか泣いちゃうから

307 :デフォルトの名無しさん:2008/11/20(木) 05:56:28
変数xのlogを返したいのですがどう書けばいいのでしょうか?
(log xやln xを得たい)

308 :デフォルトの名無しさん:2008/11/20(木) 08:50:26
>>307
Cならlog()またはlog10()。

309 :デフォルトの名無しさん:2008/11/20(木) 17:32:09
あまりに的外れなこと聞いてたらすみません
Cの入門書って黙って書いておけ的な感じで#include <stdio.h>の一文がありますよね
同様にC++の入門書では#include <iostream>とありました
しかしVC++を使ってる限りCにC++の文、C++にCの文を書いても互換性があったり混同しても問題なかったりしているのですが
少しでも混同する場合は↑のお約束文?は2つとも書いておくべきなのでしょうか?それとも片方でよいのでしょうか?

310 :デフォルトの名無しさん:2008/11/20(木) 17:53:08
使うものは書く必要がある
使わないものは別に書いても書かなくても構わないが、まぁ無駄なだけだ
printf, scanf 等は <stdio.h>
cout 等は <iostream>
使いたい関数のリファレンスマニュアルを見れば、必要なヘッダファイルが書いてある

311 :デフォルトの名無しさん:2008/11/20(木) 18:01:49
CにC++の文を書いたりCでC++のヘッダファイルを使うことはできないよ
VC++のデフォルトのプロジェクト設定では拡張子を .c にしてもC++としてコンパイルされるから
問題ないように見えてしまうかもしれないが

312 :デフォルトの名無しさん:2008/11/20(木) 21:28:21
__FUNCTION__ って VC++ だけ?
gcc でもつかえる?

313 :デフォルトの名無しさん:2008/11/20(木) 21:55:03
質問です

while (true)
{
if(a = b)
{
//何かの処理A
continue;
}
//何かの処理B
}
この場合、a=bだとすると処理Aが行われますが、その後の処理Bは行われますか?

314 :デフォルトの名無しさん:2008/11/20(木) 22:01:44
どっちも試せば一発でわかることなのに。。。

>>312
使える

>>313
実行されない
というか、そのための continue

315 :デフォルトの名無しさん:2008/11/20(木) 22:32:56
>313
そのコードだと、まず a に b が代入され
b が真なら処理Aが実行される。

もし = が == なら、a と b が等しいとき処理Aが実行される。

どちらにしろ、処理Aが実行されたら
continueでループ内のそれ以下の処理は飛ばされ
処理Bは行われない。

316 :デフォルトの名無しさん:2008/11/20(木) 22:53:17
>309
#include プログラム内でどんな機能を使うかを示すもの。
(もっと正確に言えばプリプロセサへの指示)

例えばC言語の printf scanf などは stdio に
C++の std::cout std::endl などは iostream に所属してる。

もっと色んな機能を使いたければ沢山 #include を書くことになる。
但しコンパイルは重くなるし、変数名も関数名も大量になって
好きな名前を付けにくくなる。

「お約束」と言われるのはよく使われる機能が詰まってるから。
stdio も iostream も無しでウィンドウ制御やグラフィックス機能だけincludeしたり
プラグインやライブラリなどはそれすら要らないこともある。


ちなみにC++は少し前のC言語を拡張して作られた言語。
なのでC言語のコードはC++コンパイラでもコンパイルできる事が多いけど
逆にC++のコードはC言語のコンパイラではコンパイル出来ないのが普通

317 :デフォルトの名無しさん:2008/11/20(木) 23:31:17
>ちなみにC++は少し前のC言語を拡張して作られた言語。
>なのでC言語のコードはC++コンパイラでもコンパイルできる事が多いけど
よく判っていないのなら書かなければいいのに。

318 :デフォルトの名無しさん:2008/11/21(金) 00:41:12
拡張の過程で仕様変更もあったけど
そんなの気にしてるとハゲるぞ。

319 :デフォルトの名無しさん:2008/11/21(金) 00:43:06
それよりiostreamとstdio.hはそのままじゃ併用しちゃだめなこと教えてやれよ


320 :デフォルトの名無しさん:2008/11/21(金) 00:44:22
int main()でいいとか//コメントが堂々と使えるとか、
むしろはげない方向にいい影響がもたらされると思う。

321 :デフォルトの名無しさん:2008/11/21(金) 11:21:56
>>312
gcc にも __FUNCTION__ あるよ
__PRETTY_FUNCTION__ とか __func__ もあるよ

322 :デフォルトの名無しさん:2008/11/21(金) 16:46:33
>>319
どうすればOKなの?

323 :デフォルトの名無しさん:2008/11/21(金) 16:50:22
struct Hoge{
double data;
char *m_name;

}
という構造体があります。

int main(){

Hoge hoge[10];

char *name[5]={"A","B","C","D","E"};



for(int i=0;i<5;i++){

hoge[i].m_name = name[i];

}



}

このプログラムってどういう動作ですか?
特に hoge[i].m_name = name[i];この部分です。 構造体のメンバーであるchar型のポインタに main内で宣言した文字列へのポインタを
わたしてるだけでしょうか?

324 :デフォルトの名無しさん:2008/11/21(金) 16:54:07
そうです

325 :デフォルトの名無しさん:2008/11/21(金) 17:02:24
stringr name[5]={"A","B","C","D","E"};


char test[10];

strcpy( test, name[i].c_str() );

これは実体のコピーですか?

そもそもstringr name[5]={"A","B","C","D","E"};

この宣言はどういう意味ですか?

326 :デフォルトの名無しさん:2008/11/21(金) 17:05:29
stringrはstringの間違いです

327 :デフォルトの名無しさん:2008/11/21(金) 17:19:19
>>325
そうです
string5個の配列で、各stringはconst char*引数を取るコンストラクタに "A" などを渡して初期化する、ということです

328 :デフォルトの名無しさん:2008/11/21(金) 17:33:10
>>327
つまり文字数+nullのchar型の配列5個宣言するみたいな感じですか?



329 :デフォルトの名無しさん:2008/11/21(金) 17:42:19
いいえ、まったく
stringクラスはもっとずっと複雑な動作をします

330 :デフォルトの名無しさん:2008/11/22(土) 00:40:25
ある意味糖衣構文の塊みたいな宣言だな。


331 :デフォルトの名無しさん:2008/11/22(土) 02:33:09
実装が気になるならソースをみるんだ
basic_string<>を

332 :デフォルトの名無しさん:2008/11/23(日) 01:30:03
VisualStudio2005proで開発中です。

USBのシリアルキーを読むプログラムを作成したのですが、
ビルド>実行ではデバッグビルド、リリースビルド共に問題ありません。
しかし、ビルドしたあとに生成されたプログラム(○○.exe)を実行すると
共に正しく動作しません(シリアル番号が読み取れない)。
○○.exeを右クリック>別のユーザーで実行する>管理者権限
でやっても同様の結果になります。

なにかしら解決へ向けてのヒント等いただければと考えています。

333 :デフォルトの名無しさん:2008/11/23(日) 11:27:02
>332
カレントディレクトリの違いにより DLL や依存ファイルの読み込みに失敗しているとか。

334 :デフォルトの名無しさん:2008/11/23(日) 12:32:49
>>333
レスありがとうございます。

DLLが読みこみに失敗した場合はOSによるエラーが出現すると考えていますが、
どうでしょうか?
依存ファイルは#pragma commentによるlib、設定した追加インクルード系くらいしかありません。

現在、fwprintfでテキストアウトしながら、挙動を調べています。



335 :デフォルトの名無しさん:2008/11/23(日) 22:21:01
どうやって読み込んでるのかわからんけど
GetLastError()は何か返してないの

336 :332:2008/11/24(月) 12:57:22
>>335
レスありがとうございます。
GetLastErrorを使いながら、原因を探り無事問題解決しました。
肝となる変数がとなる関数内部のローカルなアドレス値を参照しており、
それを関数外で参照してしまいこのような原因を引き起こしておりました。
初歩的なミスをしておりました。
スレ汚し申し訳ありませんでした。
100年ROMります。

337 :デフォルトの名無しさん:2008/11/24(月) 15:30:25
超初心者な質問で恐縮ですが、
デフォルトコンストラクタに初期化リストを書いて宣言した場合、
引数付きコンストラクタでもその初期化はなされるのでしょうか?
それとも同じ初期化リストを書かなければならないのでしょうか?

338 :デフォルトの名無しさん:2008/11/24(月) 20:05:52
書かなければいけない。

339 :デフォルトの名無しさん:2008/11/24(月) 21:14:15
C言語の配列・文字列で質問があります。
入力した文字を逆から出力するプログラムを作っているのですが
どうも上手くいきません。

char str[4];

str[0] = `a`;
str[1] = `b`;
str[2] = `c`;
str[3] = `\0`;

とあり、逆から表示したい場合、
str[3]から出力していけば良いと思っているのですが、
ループを設定しても何も出力されませんでした。
ググってもポインタ等を使うやり方が多くて見当もつきません。
いったい、どうやれば出力されるのでしょうか?

340 :デフォルトの名無しさん:2008/11/24(月) 21:28:31
>>339
            __, --──−、_
           /::_, -‐─ ‐-、_::::`‐-、
.           /::/        `‐i:::::::ヽ
           |:./           ',ミ::::::}
           }:l             lミ::::::l'
         _!,'_ ,..-- ..、   __ !::::::::|
        lヽ! `i ィェッ、.i'゙"i';;;ィェッ;,`i===,、
         ',.l  ゙、゙゙゙゙゙,ノ  ヽ_"゙゙ ゙/ r;;;;;;/
          i|    ̄,'  ::::ヽ `''" .,{;;;;;;/
           ',.    ゙`-"゛''   ,};;;;;;'
          !   ,_、,___,  /;;;/"
         _,` 、       /;;r'
   _,, -─ '';;;;;;;;;| 、ヽ,,____,,-‐';;;;;;;;;;;\_
   ;;;;;;;;;;;;;;;;;;;;;;;;;;|  \    _//;;;;;;;;;;;;;;;`ヽ、
   ;;;;;;;;;;;;;;;;;;;;;;;;;;|   r‐ィt- '" /;;;;;;;;;;;;;;;;;;;;;;;;;;
   ;;;;;;;;;;;;;;;;;;;;;;;;;;|  /,彡彡}  ,!;;;;;;;;;;;;;;;;;;;;;;;;;;;;

      ツレマスカ [Vladimir Tzlemazka]
        (1915-1997 ロシア)

341 :デフォルトの名無しさん:2008/11/24(月) 21:32:18
>>339
int i=4;

while(i--){
printf("%c", str[i]);
}

342 :デフォルトの名無しさん:2008/11/24(月) 22:29:05
str[0] = 'a';
str[1] = 'b';
str[2] = 'c';
str[3] = '\0';
の逆は
str[0] = 'c';
str[1] = 'b';
str[2] = 'a';
str[3] = '\0';
ではないだろうか

343 :デフォルトの名無しさん:2008/11/25(火) 00:25:46
.Netで開発したアプリケーションからWin32のDllをLoadLibrary関数で呼び出して
そのDLLからダイアログを表示させようとしています。

// グローバル変数でCDialogから派生したクラス
CCertifier *crtDlg;
// 以下2行。どこかの関数内部
crtDlg= new CCertifier;
crtDlg->DoModal();

のコードでDoModalを呼び出したところで"Debug Assertation Failed!"のダイアログが出て来ます。
出来ればモーダルウィンドウの方で表示させたいのですが、そちらの方のコードでも同じ症状が出ています。
何方か原因を分かる方などいらっしゃらないでしょうか?
一応環境はWinXP、開発環境はVS2005です。


344 :デフォルトの名無しさん:2008/11/25(火) 00:33:44
ダイアログテンプレートを指定してないとか

345 :デフォルトの名無しさん:2008/11/25(火) 00:58:58
DLLとして呼び出す関数内のstatic変数は、DLLをアンロードしたときに削除されるのですか?
そして再びDLLをロードした後で関数を呼び出すと、再度作られるのですか?

346 :デフォルトの名無しさん:2008/11/25(火) 09:07:47
その関数内でDLLを呼び出すかどうかによって、関数内でstatic宣言した
変数の扱いが変わると思うその理由とは? C言語からおさらいしてこい。

347 :343:2008/11/25(火) 11:03:45
どうも、ご回答ありがとうございます

えっと、CCertifierクラスは
「リソースの追加」でダイアログ追加→「クラスの追加」→以下作成ウィザードで作成
で作成したものなので、ダイアログテンプレート等の基本的な所は全自動のはずです


348 :>>345:2008/11/25(火) 12:18:33
ありがとうございます。
DLLのロードを行う関数ではなくて、DLLモジュール内の関数という意味でお願いします。

349 :デフォルトの名無しさん:2008/11/25(火) 12:23:03
>>348
>346

350 :>>345:2008/11/25(火) 12:29:01
モジュール破棄時にstatic変数も破棄という理解であってる、ということでしょうか。

351 :デフォルトの名無しさん:2008/11/25(火) 12:40:36
>>350
破棄されないと使えるメモリがどんどん少なくなるよ


352 :デフォルトの名無しさん:2008/11/25(火) 17:09:36
基本的なことを質問させてください。
newで確保した変数はdeleteで開放する必要がありますが、普通の変数や配列は自動的に開放されるのですか?

353 :デフォルトの名無しさん:2008/11/25(火) 17:12:31
はい、そうです

354 :デフォルトの名無しさん:2008/11/25(火) 17:26:53
どーもありがとです

355 :デフォルトの名無しさん:2008/11/26(水) 00:15:24
C++の初心者向けの本でオススメの本があったら教えて下さい。

356 :デフォルトの名無しさん:2008/11/26(水) 00:52:04
はい、そうです

357 :デフォルトの名無しさん:2008/11/26(水) 02:01:44
どーもありがとです

358 :デフォルトの名無しさん:2008/11/26(水) 12:15:51
初歩的な質問なのですが、
みなさん童貞ですか?

359 :デフォルトの名無しさん:2008/11/26(水) 12:58:01
はい、そうです

360 :デフォルトの名無しさん:2008/11/26(水) 13:56:36
どどどど

361 :デフォルトの名無しさん:2008/11/26(水) 18:26:23
初歩的な質問なのですが、クラス内の関数にvirtualがついていた場合、
その関数は実行することは出来ないという理解で良いでしょうか?

362 :デフォルトの名無しさん:2008/11/26(水) 18:36:25
全然違う。
継承を勉強してないうちは気にしないでいい。

363 :デフォルトの名無しさん:2008/11/26(水) 18:45:50
>>362
仮想関数で、サブクラスに実装を任せた云わば雛形的な役割だと思っていたのですが・・・
実行はできるのでしょうか?
というのも、いま読んでいるコードでは親クラスでvirtual関数で定義し、継承したクラスでもvirtualを付けているにも関わらず内部を実装しているので、virtualが付いていても実行できるのかと思いました。

長文で初歩的な質問失礼しました。

364 :デフォルトの名無しさん:2008/11/26(水) 18:51:54
そりゃどっちのクラスでインスタンスを作ったかによるだろう。
>サブクラスに実装を任せた
ってのは = 0 をつけた純粋仮想関数のことじゃないかな。

365 :デフォルトの名無しさん:2008/11/26(水) 19:03:01
それと、基底クラスの同シグネチャの関数にvirtualが付いていれば、派生クラスの関数も仮想関数になる。
派生クラスで、オーバーライドする関数にvirtualを付けるのは、それを読む人間相手の目印でしかない。

366 :デフォルトの名無しさん:2008/11/26(水) 19:03:05
インスタンスは
new 子クラス名
となっているので継承した側だと思います。
他にこの仮想関数をオーバーロードしているところもないので、このvirtual付き関数を呼び出しているようにしか見えないのですが…

367 :デフォルトの名無しさん:2008/11/26(水) 20:21:49
>>366
真面目に勉強する気が無いなら人間やめとけ。答はちゃんと書かれている。

368 :デフォルトの名無しさん:2008/11/26(水) 21:43:02
>>361
簡潔に言うと、
ふつうのメンバ関数はコンパイル時に静的にバインドされるが、
仮装関数は実行時に動的にバインドされる

369 :デフォルトの名無しさん:2008/11/26(水) 21:54:54
printfで表示させるときに
, を表示させようとするとなんか上手く表示されません
カンマを表示するにはどうすればいいんですか?

370 :デフォルトの名無しさん:2008/11/26(水) 22:29:35
>>369
そうやって質問するってことは、

printf(",");

じゃダメなんだろうな。何がしたいのかわからんから答えようがない

371 :デフォルトの名無しさん:2008/11/26(水) 23:11:14
>>369
1000の位のカンマなら、SUSv2独自だから他の環境では大抵巧くいかない。

372 :デフォルトの名無しさん:2008/11/27(木) 18:33:45
>>371 のエスパーに感動した

373 :デフォルトの名無しさん:2008/11/27(木) 21:15:58
はじめて質問します。
FreeBSD+GCC 3.xをつかっているのですが、

#define BUF_LEN 1024
char buffer[BUF_LEN];
FILE *tokenlist;
のときに、

fgets(buffer, BUF_LEN, tokenlist);
を実行すると、セグメンテーションエラーがおこることがあります。
しかしいくら原因を考えてもわかりません。
そもそもfgetsはセグメンテーションエラーがおこらないようつくられた関数ときいていたので困惑しています。
ほかの環境(Linux+GCC4、Cygwin+GCC4)では問題なく動くため、BSD特有の現象なのでしょうか?
ご教示お願いします。

374 :デフォルトの名無しさん:2008/11/27(木) 21:42:45
tokenlist にはなにを入れてるの?標準入力?w

375 :373:2008/11/27(木) 21:45:58
>>374
テキストファイルです。1行ずつ読もうとしてこのように書きました。

376 :デフォルトの名無しさん:2008/11/27(木) 22:04:26
:問題
リリースビルドしたExeファイルを開発環境で実行する分には正常動作。
他のPCで実行すると下記エラーが出る。
Microsoft Visual C++ Runtime Library
[Runtime Error!]
This application has requested the Runtime to terminate it in an unusual way.
Please contact the application's support team for more information.
:開発環境
VisualStudio2005Pro+WindowsDriverKit6001.18001
:問題起こしそうなヘッダ、ライブラリ
追加インクルードパス>WINDDK\6001.18001\inc\api
winmm.lib shlwapi.lib
usbiodef.h usbioctl.h atlcoll.h setupapi.h 
winioctl.h cfgmgr32.h atlstr.h
:試したこと
DirectX9.0bインストール
Microsoft Visual C++ 2005 再頒布可能パッケージ (x86)インストール

377 :デフォルトの名無しさん:2008/11/27(木) 22:40:45
>>375
再現可能な最低限のコードを貼ってくれ。
その断片だけ見ても何とも言えない。

378 :373:2008/11/27(木) 22:57:18
>>377
わかりました。
次のようにmain関数でtokenlistにファイルを関連づけます。
tokenlistはグローバル変数です。
int main(int argc, char **argv)
{
    (略)
    tokenlist = fopen(argv[1], "r");
    (略)
   
    getToken();
    (略)
}
getToken関数でfgetsを行います。
void getToken() {
    char buffer[BUF_LEN]; /* バッファ */
    (略)
    fgets(buffer, BUF_LEN, tokenlist);
    (略)
}
このgetToken関数は、その他の関数でtokenlistの次の行の情報が必要になるたびに呼ばれます。
よろしくお願いします。

379 :デフォルトの名無しさん:2008/11/27(木) 23:01:48
>>378
にほんごわかりますか?

恐らくどっかでtokenlistを壊しているのだろうよ。
再現する最低限のソースを作る過程で見つかることもしばしばだから
やれと書いているのにそれすらできないんじゃ望み薄だが。

380 :初心者:2008/11/27(木) 23:13:54
C++初心者です。
現在、独習C++で勉強しています。
中級者向けの本、お勧めの本などありましたら
教えていただければ幸いです。

381 :デフォルトの名無しさん:2008/11/27(木) 23:15:27
中級者向けの定番は Effective C++

382 :デフォルトの名無しさん:2008/11/27(木) 23:17:25
>>380
http://pc11.2ch.net/test/read.cgi/tech/1227705211/56

383 :373:2008/11/27(木) 23:34:00
>>379
ソースが非常に巨大なためその点はご迷惑をおかけしました。
とりあえずtokenlistをあまり長期間保持しないように変えました。
ご教示ありがとうございました。

384 :デフォルトの名無しさん:2008/11/28(金) 02:47:13
中級者向けの本って中級者が読むんだよね。
何で初心者が?

385 :376:2008/11/28(金) 12:36:14
>>355
Dr.JamsaのC++超入門
自分はこれが一番しっくり来たっす。
>>380
C++標準ライブラリの使い方完全ガイド。
STLは中級者レベル?(初心者レベルだったらスマソ)

>>376なんですが、他で質問した方がいいですかね?



386 :デフォルトの名無しさん:2008/11/28(金) 12:42:38
>>385
状況を細かく噛み砕いてDirectXスレ辺りへどうぞ。

387 :376:2008/11/28(金) 12:48:20
>>386
レスありがとうございます。
確かに質問内容がだめでした。
もう少し、”○○を使うと他でエラーが出る”くらいまでやるべきでした。
エラーをもう少し特定して他スレ行ってきます。

388 :デフォルトの名無しさん:2008/11/28(金) 13:29:16
ランタイムだろうしな

389 :デフォルトの名無しさん:2008/11/28(金) 14:52:04
キー入力を求めてる間にも時刻を表示したりすることってできるでしょうか?

390 :デフォルトの名無しさん:2008/11/28(金) 14:55:25
>>389
できる環境もあればできない環境もあります。

391 :デフォルトの名無しさん:2008/11/28(金) 15:00:38
>>390
できる環境の場合のやり方を教えてください。

392 :デフォルトの名無しさん:2008/11/28(金) 15:11:13
>>391
できる環境の場合、そうなるようにやります。
その方法は、大抵の場合複数あります。

393 :デフォルトの名無しさん:2008/11/28(金) 16:17:46
>>392
getcharの実行中はプログラムは止まったままだと思いますが
どうやってやるのでしょう?

394 :デフォルトの名無しさん:2008/11/28(金) 16:25:29
getchar使わなきゃいいだろ。
ゲームとかキー入力うけつけながら残り時間表示とかしてるだろ?

395 :デフォルトの名無しさん:2008/11/28(金) 16:25:51
>>393
スレッド作成して別スレッドで時計表示

396 :デフォルトの名無しさん:2008/11/28(金) 17:02:26
>>391
Windowsなら
メッセージ処理する
Directinput使う
conio.h使う
など

397 :デフォルトの名無しさん:2008/11/28(金) 18:09:55
>>395
ありがとうございます。大体分かりました。ところで、下のプログラムを実行すると
main関数のgetchar以降が実行されないみたいなんですがどうしてなんでしょう?
#include <stdio.h>
#include <pthread.h>
#include <unistd.h>
void thread(void);
int main(void) {
int handle;
pthread_t id;
int c;
handle = pthread_create(&id, NULL, (void *(*)(void*)) thread, NULL);
while(1) {
printf("Main\n");
c = getchar();
printf("Main %d\n", c);
usleep(500*1000);
}
}
void thread(void)
{
usleep(500*1000);
while(1) {
printf("Thread %d\n", (unsigned) time(NULL));
usleep(1000*1000);
}
}


398 :デフォルトの名無しさん:2008/11/28(金) 18:28:12
>>397
なんで自分の環境を書かないの?
>397でUnix系と言うことは判ったけど。
で、getchar()で止まっているスレッドよりもusleep()で止まっているスレッドが優先されているだけじゃないのかね。
少なくとも私の環境(cygwin)では巧くいくようだよ。

399 :デフォルトの名無しさん:2008/11/28(金) 18:30:48
>>398
ありがとうございました。解決しました。

400 :デフォルトの名無しさん:2008/11/28(金) 21:06:47
なんていうか、かなり変な質問かと思うんですが……。
if文を利用する価値ってどんなもんですか?

リアルタイムで変化しうる1万個のフラグがあって、1/60秒ごとに全てのフラグをチェックする必要があるが、if文ひとつでチェックすべきフラグが9千個ほどにまで削減できるとしたら。
if文を入れても入れなくても処理速度は変化しないとすれば、このif文に価値ってありますか?

401 :デフォルトの名無しさん:2008/11/28(金) 21:13:06
処理的に入れなければならないifなのであれば、処理速度を問わず、それは存在しなければならない。
最初コストの話かと思ったんだが、そういう風にも見えないのでもう少し説明が欲しい

402 :デフォルトの名無しさん:2008/11/28(金) 21:14:24
if文一つ入れることで1割のフラグチェック処理を枝刈りできるのなら割と有意義に思えるけどな

403 :デフォルトの名無しさん:2008/11/28(金) 22:27:15
>>400
そのフラグはif文を使わずに何を使ってチェックするのかね。

404 :デフォルトの名無しさん:2008/11/28(金) 22:47:21
>>401
究極的に言えば、「わずかな処理を省くためにif文を入れるべきか」って話です。
八千個のフラグチェックを削減できるなら「効率化」、五千個の削減も「効率化」、四千、三千も「効率化」と呼べるでしょう。
それなら、千個の削減は「効率化」か、五百個、百個、五十個は……。と考えていくと、どこまでが「効率化」と呼べるのか、と疑問に思ったので。
『状況や環境による』と言われてしまえばそれまでなのですが……。
「ソースを増やしてでも最大限処理を減らすべき」か「体感できない程度の無駄なら無視すべき」か、どちらを優先すべきなのか悩まされてしまいます。

405 :デフォルトの名無しさん:2008/11/28(金) 22:50:38
まともに動いてから考えればいいんじゃないの?

406 :デフォルトの名無しさん:2008/11/28(金) 23:16:38
どちらでもなく、「速度が問題になったときに考えるべき」だよ。
んで、速度が問題になったときに何をすべきかというと、そのif文を入れることではなく、
そのif文を入れることで問題が解消されるのかどうかを考えるべき。


407 :デフォルトの名無しさん:2008/11/29(土) 17:02:36
何で矢印キーのエスケープシーケンスって上下右左の順に大きくなるの?上下左右でなくて。

408 :デフォルトの名無しさん:2008/11/29(土) 18:26:42
>>407
何でそれが疑問なの? 右と左のどちらを優先すべきかと聞かれたら、普通は右だと思うでしょ。
右は桁を+する方向だし、プラスとマイナスを逆順にしたいやつはいないと思うんだけど。

409 :デフォルトの名無しさん:2008/11/29(土) 18:50:33
>>408
それだと上下が下上になってないとおかしいと思うんだけど

410 :409:2008/11/29(土) 18:54:09
さらに言うとx軸方向が先の方が良くない?数学でよく使うxy平面で言うと右左上下じゃん

411 :デフォルトの名無しさん:2008/11/29(土) 20:21:35
日本人は普通上下左右と言うが、これは国や地域で異なる
順番なんてテキトーにつけるしかない

412 :デフォルトの名無しさん:2008/11/29(土) 21:11:09
>>409
いやさ、だから何で疑問に思うのか説明してよ。上下に関しては、左上原点なんてのは視野が狭いとしか。
上下と左右の順序については、どちらを重視するかの問題。

>>411
一応人間工学では、上下のボタンを左右に並べざるを得ない場合には右側に上ボタンを配置することになっている。
これはどうやら、右から左に書く文化圏でもその方がいいらしいよ。

413 :デフォルトの名無しさん:2008/11/30(日) 01:01:41
たしかにjが下でkが上だな

414 :デフォルトの名無しさん:2008/11/30(日) 07:33:56
C言語とは直接関係ない質問なんですが
クイックソートをwikipediaで調べると

1. ピボットとして一つ選びそれをPとする。
2. 左から順に値を調べ、P以上のものを見つけたらその位置をiとする。
3. 右から順に値を調べ、P以下のものを見つけたらその位置をjとする。
4. iがjより左にあるのならばその二つの位置を入れ替え、2に戻る。
   ただし、次の2での探索はiの一つ右、次の3での探索はjの一つ左から行う。
5. 2に戻らなかった場合、iの左側を境界に分割を行って2つの領域に分け、そのそれぞれに対して再帰的に1からの手順を行う。
   要素数が1以下の領域ができた場合、その領域は確定とする。

注:このアルゴリズムでは、領域の左端の値が領域内で最小かつ同じ値が他の位置に無い場合
  ピボットとしてその値を選ぶと同じ領域を再帰的に呼び出す無限ループとなってしまう。

とあるのですが、この注の意味がどういうことかわからないのですが
ピボットが左端で値が最小だとどうして無限ループになってしまうんでしょうか?

415 :デフォルトの名無しさん:2008/11/30(日) 09:39:36
>414
コンピュータのつもりになって気を利かさず愚直に書いてあることにそのまま従ってみればいいんだよ。
1. P は左端の最小値
2. i は左端
3. j は左端
4. i == j なので左じゃないから skip
5. i の左側を境界に分割しても左端なんだから今と変わらない 1 領域のまま。1に戻って同じことの繰り返し。

416 :デフォルトの名無しさん:2008/11/30(日) 12:36:18
C言語の関数名って変数なんですか?
なんか関数名を型変換するようなプログラムがちゃんと動いたんで。

417 :デフォルトの名無しさん:2008/11/30(日) 13:06:23
変数ではないが、先頭アドレスを利用できる。

418 :デフォルトの名無しさん:2008/11/30(日) 13:08:18
>>416
関数名は変数じゃありませんが、関数名を参照すると関数へのポインタと言う値になります。

419 :デフォルトの名無しさん:2008/11/30(日) 19:12:33
int main(int argc,char *argv[]){

int day;
day=atoi(argv[1]);
if(0<argv[1]<32){
int foo,baa;
かくかくしかじか
}
else{
printf("日にちは1から31で入力してください¥n");
}
return 0;
}
と書いておけば
もしコマンドライン引数が41の場合これはかくかくしかじかは実行されませんよね?
どこのバグだかわからなく困っているので助けてください。


420 :デフォルトの名無しさん:2008/11/30(日) 19:14:52
>>419
0<argv[1]<32
こんな条件文は無いかと
0 < argv[1] && argv[1] < 32
じゃね?

421 :デフォルトの名無しさん:2008/11/30(日) 19:18:35
>>420
ありゃ?有りませんでしたっけ
すこしLispかぶれして帰ってきて
たしかCだと一つの括弧でかけるから便利なんだよなと思い
<で挟んでみたのですが、記憶がちがったのかもしれません。
確認してみた所無事に動きました。
非常に助かりました。

422 :デフォルトの名無しさん:2008/11/30(日) 19:29:51
すみません。自分自身の限界が来たので質問させてください。
Javaで非常にシンプルなボタンの作成をしてみました。
なぜだか、5番目のボタンだけキャプションが表示されません。
環境はWin+eclipseです。

トラブルシュート、ログはたくさん見たのでその他のなにか考えなければならないヒントなどいただけると
た す か り ま す

public class Test {
public void method(){
int i;
Button h[]=new Button [9];
int dx[]={1,2,3,4,5,6,7,8,9};
int dy[]={1,1,1,1,1,1,1,1,1};
String st[]={"aa","ii","uu","ee","oo","か","き","く","け"};

Display display = new Display();
Shell shell=new Shell(display);
shell.open();

for(i=0; i<9; i++){
h[i]=new Button(shell,SWT.BORDER);
h[i].setBounds(dx[i]*50,dy[i]*30,50,30);
if(i!=4){h[i].setText(st[i]);}}
while(!shell.isDisposed()){if(!display.readAndDispatch()){display.sleep();}}
display.dispose();}
public static void main(String[] args){
Test test = new Test();
test.method();}}



423 :デフォルトの名無しさん:2008/11/30(日) 19:32:12
0 < day && day < 32
じゃなくて?
意図からすると
1 <= day && day <= 31
か?

424 :デフォルトの名無しさん:2008/11/30(日) 19:34:54
>>422
んあ、c++のスレだった。
スレ汚しスマソ。

Javaに言ってきまふ。
422は無視してくだせい。

425 :デフォルトの名無しさん:2008/11/30(日) 20:00:51
> day=atoi(argv[1]);
> if(0<argv[1]<32){
・折角数値に変換したのに、元の文字列と比較してどーする
・C/C++では a<b<c という条件式は
 文法上は書けるが、見た目とは相反する動きになるから
 a<b && b<c と書くべき
 (普通の処理系なら a<b は成り立てば1、成り立たなければ0
  a<b<cは、(1か0)<c という式として翻訳されてしまう)

426 :デフォルトの名無しさん:2008/11/30(日) 20:07:39
すみません。
ユーザーがランダムな順番で入力した四角形の4つの頂点座標のCPoint型(x,y座標を保持)の変数の中から
四角形の左上の頂点がどれかを判定したいのですが
うまい方法が思いつきません。

1番左 かつ 1番の上の座標を求めれば良いだけジャン…と思っていたんですが

//CPoint cp0, cp1, cp2, cp3には既にx,y座標が代入済みとする

//四角形の左上座標がどれか4つの中からを決める
CPoint tmp;
tmp = cp0;
if ( tmp.x >= cp1.x ) if ( tmp.y >= cp1.y ) tmp = cp1;
if ( tmp.x >= cp2.x ) if ( tmp.y >= cp2.y ) tmp = cp2;
if ( tmp.x >= cp3.x ) if ( tmp.y >= cp3.y ) tmp = cp3;
return tmp;//左上座標を返す

長方形だとこれで問題なさそうなんですが、例えば極端に歪んだ平行四辺形とかだと
左から2〜3番目の頂点が左上頂点だったり(例:上底、下底が水平で下底が思い切り左に寄っている)
上から2〜3番目の頂点が左上頂点だったり(例:右辺、左辺が垂直で右辺が思い切り上に寄っている)
等のケースに対応できません。

427 :デフォルトの名無しさん:2008/11/30(日) 20:33:50
>>426
左上って定義が曖昧すぎないか?
全てのパターンを分ける以外方法無いと思う

428 :デフォルトの名無しさん:2008/11/30(日) 20:43:23
つまり、こういうケースか?
  _
/  \
 ̄ ̄ ̄
「左上」自体の定義によっては一番左の点が左上かも知らん。

429 :426:2008/11/30(日) 21:40:33
>>427
うーん。人間にとっては迷うことなく一意に決められそうですけど
いざ言語化して厳密に定義するとなると難しいですね…

>>428の図をみて思ったのですが
◇(菱形)みたいな形だとどれが左上か厳密に決められないので

「上底下底が水平 or 右辺左辺が垂直な四角形(台形)に限定する」
とすると決まりそうですね。

「その頂点のx座標より右側にx座標があればひとつにつき1点ずつ、
 その頂点のy座標より下側にy座標があればひとつにつき1点ずつ
 の評価点を加点し、最も高い評価点の頂点を左上の頂点とする 」

>>428の台形だと
上底の左側の頂点:右2点、下2点、計4点
上底の右側の頂点:右1点、下2点、計3点
下底の左側の頂点:右3点、下0点、計3点
下底の右側の頂点:右0点、下0点、計0点
で「上底の左側の頂点」が左上

あ、なんとか行けそうです。有難うございます。
たぶん漏れるケースはないかと…

430 :デフォルトの名無しさん:2008/11/30(日) 23:43:17
そうまでして左上を定義する意義が判らん。

431 :426:2008/12/01(月) 00:21:31
左上にこだわるというか
4つの座標の入力順が狂っていても治す必要があったので
実際には右上と右下と左下も決めます。

432 :デフォルトの名無しさん:2008/12/01(月) 00:23:33
一番上で一番左じゃダメなんだろうか。

433 :デフォルトの名無しさん:2008/12/01(月) 00:27:20
erase() がイテレータを返すコンテナでは

list<foo, bar>::iterator it = xmap.begin();
while (it != xmap.end()) {
if (it->finished()) {
it = xmap.erase(it);
} else {
++it;
}
}

とかやりますが、イテレータを返さない、たとえば map
とかで

for (map<foo, bar>::iterator it = xmap.begin(); it != xmap.end(); ++it) {
if (it->second.finished()) {
xmap.erase(it);
}
}

みたいなのは大丈夫なんでしょうか?

434 :デフォルトの名無しさん:2008/12/01(月) 01:54:02
>>432
今回の場合は、一番上だが一番左じゃないケース、一番左だが一番上じゃないケースに対応する必要があったんじゃないかね。


435 :デフォルトの名無しさん:2008/12/01(月) 01:55:17
>>431
それならもう入力段階で弾くか正す方が早いかと

436 :デフォルトの名無しさん:2008/12/01(月) 02:11:50
>>434
いやだから、一番上を優先して、一番上なら一番左じゃなくてもいいことにすればいいんじゃないかってこと。
少なくとも私なら、そうする。それなら、上下が等しい場合のみ左右をチェックすればいいから効率もいい。

437 :デフォルトの名無しさん:2008/12/01(月) 02:19:24
  ___
/   /
\  /
 \/
上底の左側の頂点:右2点、下2点、計4点
上底の右側の頂点:右0点、下2点、計2点
左の頂点:右3点、下1点、計4点
下の頂点:右1点、下0点、計1点

438 :デフォルトの名無しさん:2008/12/01(月) 02:25:39
左上とか右上とか位置を決めて何がしたいの?
四辺がねじれないように描画したいとか?

439 :デフォルトの名無しさん:2008/12/01(月) 02:26:45
>>436
ああ、一番上でも一番左でもないケースがあるわ。
でも見た目的には左上に見える。

 /|
/  |
 ̄ ̄
こんなのとか。
こんな図形絶対データに入らねーよ!とかなら構わんけど、
俺はあんたの作りだとすげー気持ち悪い感じがする。
対応漏れが意図的で、かつ仕様として問題ないんなら良いんだけどね。

440 :436:2008/12/01(月) 02:46:32
>>439
それ、上から順でなんか問題があるのか?
元質は、左上だけを決定したいのではなく順序を決定したいらしいぞ。

441 :デフォルトの名無しさん:2008/12/01(月) 04:40:09
順序なんてどこに書いてあるんだ…?
今回の質問は、四角形の各頂点座標から
(菱形みたいな明らかに決定不能な場合を除いて)
左上、右上、左下、右下をそれぞれ決定したいってことだろ。
例えば一番上が右上の場合、それが左上として認識されてはいけないのでは?

442 :426:2008/12/01(月) 06:10:59
>>435
え〜と。入力段階で弾くために判定をしています。

>>437
>>439
>>429で取り敢えず決めた「上底下底が水平 or 右辺左辺が垂直な四角形(台形)に限定する」
に反するのでその形状はご勘弁を…

>>436
それだと極端に歪んだ平行四辺形(例:右辺、左辺が垂直で右辺が思い切り上に寄っている)

/|
| |
|/

に対応できないもので…
ただ、「そもそも左上を厳密に決めない」という手も確かにありますね…

本当の最終的な目的は
「ユーザーが適当な順番で入力した座標4点の四角形の範囲を
 1ピクセルずつ拾って画像処理をするための座標を計算したい」

ですので必ずしも左上を厳密に決めなくてもなんとか計算できるかもしれません。
(パッと今は思いつきませんが)

443 :デフォルトの名無しさん:2008/12/01(月) 09:08:20
凸図形なら座標平均の左上で行けそうな気がするけど
ブーメランみたいな凹図形だと厳しいな。

444 :デフォルトの名無しさん:2008/12/01(月) 09:50:42
画像処理で使うなら左上って言うのは
上を優先して次に左を優先じゃね?画像処理したことないからよく分からんけど。

445 :デフォルトの名無しさん:2008/12/01(月) 11:06:43
外接する長方形の左上の点から最も近い角じゃないかという気がする。

446 :デフォルトの名無しさん:2008/12/01(月) 12:15:27
等距離の場合も有るよ

447 :デフォルトの名無しさん:2008/12/01(月) 13:14:13
>>446
touzen

448 :デフォルトの名無しさん:2008/12/01(月) 18:06:58
タッズン…???

449 :デフォルトの名無しさん:2008/12/02(火) 01:06:09
x+yが最小の点が左上じゃないのか
439にも対応できるぞ

450 :デフォルトの名無しさん:2008/12/02(火) 01:11:01
既出の事を別の言葉で言い換えたんですね、わかります。

451 :デフォルトの名無しさん:2008/12/02(火) 01:13:26
>>449
>>439をひたすら縦に引き伸ばしてから同じことを考えるんだ
明らかに右上の座標のx+yのほうが小さくなる

452 :426:2008/12/02(火) 07:03:11
>>449
あっ
それ1番最初に考えました。

453 :デフォルトの名無しさん:2008/12/02(火) 14:47:45
>>426は仕様を明確にしろ。

(0,0)と(0,1)のどちらが左上だ?
凹四角形の扱いはどうするのだ?

454 :デフォルトの名無しさん:2008/12/02(火) 15:15:12
>>453
>>429

455 :デフォルトの名無しさん:2008/12/02(火) 17:33:01
int a[100];
int b[100];

bの[0~99]までの全内容を a[0~99]にfor文とかmemcpyやmemmoveとか使わないで
代入する方法なんてありますか・・・?

456 :デフォルトの名無しさん:2008/12/02(火) 17:39:07
>>455
a[0]=b[0];
a[1]=b[1];
a[2]=b[2];
  ・
  ・
  ・
a[99]=b[99];

457 :デフォルトの名無しさん:2008/12/02(火) 17:49:01
>>456
やはりないかぁ・・・

458 :デフォルトの名無しさん:2008/12/02(火) 18:04:11
移植性なんて知らない。
struct array_of_int_100 {
int array[100];
};

int a[100];
int b[100];

*(struct array_of_int_100*)a = *(struct array_of_int_100*)b;


459 :デフォルトの名無しさん:2008/12/02(火) 18:09:59
std::copy(b, b + 100, a);

460 :デフォルトの名無しさん:2008/12/02(火) 18:21:47
gcc拡張で
a = b;

461 :デフォルトの名無しさん:2008/12/02(火) 18:44:57
a|oven::copied_to(b);


462 :デフォルトの名無しさん:2008/12/02(火) 19:20:46
文字列データから文字列をサーチじゃなく、
バイナリデータからバイナリ列をサーチする関数、STLないですか?


463 :デフォルトの名無しさん:2008/12/02(火) 19:23:28
boost::xpressive

464 :デフォルトの名無しさん:2008/12/02(火) 19:32:15
C++初心者です。

list<int> list[M][N];

みたいな2次元配列って出来るんですか?

465 :デフォルトの名無しさん:2008/12/02(火) 20:22:08
マルチすんな初心者だからってのは免罪符にゃなんねーぞ死ね馬鹿


できるよ

466 :デフォルトの名無しさん:2008/12/02(火) 20:55:07
C/C++に詳しい方々よ。
質問があるのでどうか答えてほしい。
C++とVB.NETで両方ともオブジェクト指向でわけわからんになってしまった経験があるのだが。オブジェクト指向って本当に必要なんですか?
コンピューターの世界で無理やり知らなければならないような方向に誘導されてるような気がするのですが。
オブジェクト指向は効率的なプログラムを組むために必要だとか利便性を説いてるが、かえって複雑になって習得が難しくなってる気がする。
Windows上でツールを作ることを目的としてプログラミング言語を2,3勉強したが。身についたのはC言語だけ。
もうこうなったらオブジェクト指向はさっぱりあきらめてC言語だけで行こうかと思ってるのですけど。
C言語でアプリやツール、ゲームをつくる需要は今後も残るのでしょうか?

467 :デフォルトの名無しさん:2008/12/02(火) 21:06:00
>>466
俺は詳しいとはいわんが、C の需要は残ると思う。ただ、アプリ、ゲームを
チームで全てCで作ることはあまり無くなるだろう。一人で作るなら勝手に。
ドライバとか低レベル(悪い意味で無くて)のものはCで残るものがあるはず。

ただ、オブジェクト指向使えた方が楽だと思うんだけどなぁ…
(C→C++,Java と来た人だけど)

他の人の意見も見てみたい

468 :デフォルトの名無しさん:2008/12/02(火) 21:12:54
リア厨房の頃HSPから入って「関数?クラス?いらねーよ」とか言ってた私ですが
今ではすっかりC++に馴染んでオブジェクト指向じゃないと面倒だと感じるようになりました^q^

>>467の言う通り完全に需要がなくなることは当分無いと思う(実際COBOLとか未だに需要あるし)けど、
やっぱり自分一人という範囲に限らないならオブジェクト指向の知識は必要だと思う。
ライブラリの類もオブジェクト指向前提のものは多いしね。

469 :デフォルトの名無しさん:2008/12/02(火) 21:20:11
極端なこと言えば、オブジェクト指向なんて当たり前のことに名前を付けただけ。
みんながむやみやたらと唱えるバズワードと化してしまったのがだいぶ前から。

あと、Cで書かれたプログラムだってオブジェクト指向的な部分はいくらでも指摘できる。
もちろん、Cはオブジェクト指向プログラミング言語ではないし、
そこで書かれたプログラムにも、オブジェクト指向プログラミングでよく見かける特徴は
あまり見出せないけど。

470 :デフォルトの名無しさん:2008/12/02(火) 21:23:52
>>466
気持ちはすごいわかる。

自分もそんなに分かってるわけじゃないけど、世間のオブジェクト指向って
それっぽい文法を採用してるよ、ってぐらいなので、そんな気にすることはないと思う。

言語体系が複雑になっているのは、汎用性とのトレードオフじゃないかね。
C言語のコアはシンプルだけど、何かするなら結局OSのAPIとか使わないとならない。
Javaみたいにそれ全部仕様に含んじゃうと、当然仕様は膨らんじゃう。

仕事でチーム作業の場合 C++で統一するってのは仕方ないだろうね
でも自分は C で作ってる。必要最小限のコードで済ませられるし、
プログラムとかプロセスのレベルでシステムを設計すれば、実際のところ
言語はなんでもいいしね。


471 :デフォルトの名無しさん:2008/12/02(火) 21:23:55
>>466
そのうち慣れるって。
慣れたらもう戻れないけどね。いや、戻れるけど
クラス無いのきびしーって思うようになるよ。
関数やローカル変数なかったらきびしーなんてもんじゃないけど。
そういえばCOBOLには無いんだっけw

472 :デフォルトの名無しさん:2008/12/02(火) 21:26:04
>>467
ご回答ありがとう。
C++とVB.NETと一通り勉強したけど、自分でオブジェクト指向でプログラムつくれなくて挫折したわ。
これを理解できるのはかなり頭のいい人だろうね。
趣味でプログラミングをやってるので、チームワークの必要なことはしないし知ってるのは唯一自分でコードが書けたC言語だけでいいかなとも思った。

ところで質問をもうひとつしますが。
ウェブブラウザのFirefoxってフリーでソースが公開されてるけど、
ビルドするのにGCCを用いる様だけど、これってC言語でできてるのでしょうか?


473 :デフォルトの名無しさん:2008/12/02(火) 21:30:56
デザインパターンの本を読むと
オブジェクト指向で何がしたいのか分かると思う

474 :デフォルトの名無しさん:2008/12/02(火) 21:33:21
>>466
確かに色々と覚えることがあって回りくどくて面倒なんで
うんざりするほどその気持ちはわかる。
自分もそう思っていたんで。

でも、とりあえずクラス化したら楽だと思うんだ。
慣れないうちは全部publicなメンバでも良いと思う。
関数名とか変数名とかdrawとかxみたいに短くても楽に管理できるし。
それだけでも重宝するかと。

475 :デフォルトの名無しさん:2008/12/02(火) 21:59:58
>>474
なんだか知らないけれど新たにがんばってみようと言う気になったわ。
ありがとうよ。

476 :デフォルトの名無しさん:2008/12/02(火) 23:33:31
C++ は気張って OOP とか言わずに、Cに STL があると思った
だけで大分便利。ついでに自分で template 書けるようになると
もっと便利。そんなことしてるうちに自然と OOP。

477 :デフォルトの名無しさん:2008/12/03(水) 02:46:39
OOPってそんな気張ったモノでもないよ
ファイル処理関連はどの言語もOOPみたいなもんだ
単に語順と追加機能の有無だけ

478 :デフォルトの名無しさん:2008/12/04(木) 17:38:38
入門書みつつ文法を1から学び、日々黒い画面の中で動かしているのですが
左上に「ファイル」、右上に最小化最大化閉じる、といったものがある普通のアプリの段階にはいつ入るものなのでしょうか?
あるいはこういった骨格みたいなの?は入門書的にはなんという項目から始まるものなのでしょうか

479 :デフォルトの名無しさん:2008/12/04(木) 17:54:24
>478
入門書は普通、CやC++の基礎部分を解説するもの
ウィンドウシステムは応用部分にあたるので
入門書ではあまり語られない

一通り入門書を触ったら、Visual C++ Express 辺りを落として
インスコした Visual C++ をテキトーに弄ったり
Windowsプログラミングの書籍を読んで勉強するヨロシ

480 :デフォルトの名無しさん:2008/12/04(木) 18:17:54
>>478
http://homepage2.nifty.com/c_lang/index_sdk.html


481 :デフォルトの名無しさん:2008/12/04(木) 18:19:18
C言語はUNIXでもWindowsでもMacでもLinuxでも使うけど
ある程度共通項が多い上扱いやすい stdio に対して
ウィンドウシステムの扱いは各環境でバラバラ。
そしてその多くはそれだけで本が1〜数冊書ける複雑さ。
直接扱うのは複雑だからと、簡単に扱うためのライブラリもある。
(WindowsならMFCや.net、LinuxならTkやGTKやQtなど)
それから、色んな環境で扱えるように作られたライブラリもある。
(wxWidgetとか。.netやTkも一応互換環境がありこっちにも分類可能)
環境も手段も多様で、総てを統括するのは困難。

482 :デフォルトの名無しさん:2008/12/04(木) 18:32:53
>>479-
ありがとう、また文字を表示する作業から勉強しなおしてきます

483 :デフォルトの名無しさん:2008/12/05(金) 09:10:33
void * (*)(void *) 型の意味を教えてください

484 :デフォルトの名無しさん:2008/12/05(金) 09:34:16
なんかよく解らんポインタを引数にとって、なんかよく解らんポインタを戻す関数へのポインタ

485 :デフォルトの名無しさん:2008/12/05(金) 09:38:40
それなりに的確な説明なのに何故か笑ってしまったw

486 :デフォルトの名無しさん:2008/12/05(金) 11:47:41
日本語のcdeclプログラムを作ってみないか?

487 :デフォルトの名無しさん:2008/12/06(土) 10:25:01
どこまでを設計と呼ぶのやら

488 :デフォルトの名無しさん:2008/12/06(土) 10:27:23
すっまん。誤爆だ。忘れてくれ。

489 :デフォルトの名無しさん:2008/12/07(日) 10:30:31
アクセス制御ってぶっちゃけあんまいらなくね?


490 :デフォルトの名無しさん:2008/12/07(日) 10:47:51
まぁ個人でやっている分には間違ってメンバ変数を弄って困ってしまうって状況は想像つかない。
アクセスできなくて困ることはあるが。

491 :デフォルトの名無しさん:2008/12/07(日) 17:10:34
ところで
int v(char *c){int i;sscanf(c,"%4d",&i);return htons(i);}
この関数をもっと短くする方法あるかな?
Code Golfの感じで。
引数のcharポインタは"YYYYMMDD"といった数字文字列の領域を指してると思いねぇ。

492 :デフォルトの名無しさん:2008/12/07(日) 17:32:09
>491
七行スレのログ読めば短くするノウハウが沢山あると思う

493 :デフォルトの名無しさん:2008/12/07(日) 18:38:38
>>491
先頭のintを省く

494 :デフォルトの名無しさん:2008/12/07(日) 23:11:37
charと*の間の空白も不要。

495 :デフォルトの名無しさん:2008/12/08(月) 08:24:27
POSIXスレッドのmutexロックって標準でデッドロックを回避してくれますか?

496 :デフォルトの名無しさん:2008/12/08(月) 11:20:15
>>495
いいえ

497 :デフォルトの名無しさん:2008/12/08(月) 11:47:46
http://www.geocities.jp/chacha_yhk1219/prog/prog001.html
↑を見てインターフェースクラスというものを知ったのですが
インターフェースクラスをスーパークラスとして実装を行った場合、
特定のサブクラスのみが持つようなメンバ関数にアクセスすることができないと思いました。
このサイトに書いてあるインターフェースクラスというものが間違いなのか、
それとも私の理解がぜんぜん足りていないのでしょうか。
どこが間違っているか、どこが理解不足かの指摘をお願いします。


498 :デフォルトの名無しさん:2008/12/08(月) 11:51:55
>>497
型キャストすれば特定のサブクラスのみが持つようなメンバ関数にアクセスすることができる。
reinterpret_castだったかな?

499 :デフォルトの名無しさん:2008/12/08(月) 11:54:55
異なるクラスを IExample として共通に扱いたいのであるから、
特定のサブクラスのみが持つ特殊なメンバ関数などには興味がないはずである

500 :デフォルトの名無しさん:2008/12/08(月) 11:55:17
例えばですが、
>>497のサイトでCExample3という、IExampleを継承したクラスを追加するとして、
IExampleがもしMethod2()というメンバ関数を持っていたら、
大幅な修正を加えないとMethod2を呼ぶことができないように思います。

理解が足りないのでしょうか…
C++は難しいです


501 :デフォルトの名無しさん:2008/12/08(月) 11:57:34
リロードせずに書き込んでしまいました。

>>498
レスをありがとうございます。
スーパークラスからサブクラスへのキャストはあまりよろしくないと聞きました。
実際は使っても良いものなのでしょうか。
それとももっと別の書き方をするのでしょうか。

>>499
レスをありがとうございます。
ということは、特殊なメンバ関数を使いたい場合には、
やはりどういったクラスがあるかを確認して、
そのクラスの型を持つポインタを用意する必要があるということでしょうか。

502 :デフォルトの名無しさん:2008/12/08(月) 11:58:37
しかも500はIExapmleがじゃなくてCExample3が、の間違いです。すみません

503 :デフォルトの名無しさん:2008/12/08(月) 11:59:21
なんか課題でテンプレートを使ってジェネリック関数のsearch(b,e,b2,e2)とcopy(b,e,d)と
partition(b,e,p)を定義しろってのがあったんだけどだれかおしえてくだしあ><

504 :デフォルトの名無しさん:2008/12/08(月) 12:00:59
なんとなくですが>>499さんの仰ることがぼんやりとわかった気がします。
頭の回転が遅いので、これをヒントにもっと考えてみます。ありがとうございます。

505 :デフォルトの名無しさん:2008/12/08(月) 12:03:45
>>504
Javaを学ぶと良い。言語仕様にInterfaceを含んでいる。

506 :デフォルトの名無しさん:2008/12/08(月) 12:04:01
>>501
特定のサブクラス固有の特殊なメンバ関数を使いたいというのは、
すべてのクラスを共通のインタフェイスで扱いたいという趣旨に反している
設計がどこかおかしい

507 :デフォルトの名無しさん:2008/12/08(月) 12:42:56
>>503
template<class T>void copy(T * b, T * e, T * d) {for (; b != e; ++b, ++d) *d = *b;}
他は仕様が余りに曖昧なのでパス。

508 :デフォルトの名無しさん:2008/12/08(月) 12:50:36
例えばこんなのとか?
template<typename FI, typename PRED>FI partition(FI b, FI e, PRED p)
{
if (b == e) return b;
while (p(* b)) if (++b == e) return b;
FI n = b;
while (++n != e) if (p(* n)) swap(* ++b, * n);
return b;
}

509 :デフォルトの名無しさん:2008/12/08(月) 14:05:26
p(* n)<ーどういう意味?

510 :デフォルトの名無しさん:2008/12/08(月) 14:11:07
イテレータbの指す値を引数にして関数オブジェクトpを呼ぶ

511 :デフォルトの名無しさん:2008/12/08(月) 14:11:41
すまん、イテレータnだった

512 :デフォルトの名無しさん:2008/12/08(月) 14:23:05
答えてくれてどうもありがとう。
でもなんか動作がほんの少しちがうようだ。原因は不明

513 :デフォルトの名無しさん:2008/12/08(月) 14:27:01
そりゃぁ、仕様を提示しないで動作が一致したら凄いと思うよ。
つーか、>508ってSTLの実装じゃないの?w

514 :デフォルトの名無しさん:2008/12/08(月) 14:33:51
virtual void UpdateMatrix( const Matrix &parent ){}

ここで「unused parameter 'parent'」のWarningが出てしまいます。

コンパイラを変える
コンパイラオプションを変える
#pragmaで抑制する
以外の簡単な解決法があれば教えてください。

515 :デフォルトの名無しさん:2008/12/08(月) 14:39:34
virtual void UpdateMatrix( const Matrix & ){}


516 :デフォルトの名無しさん:2008/12/08(月) 14:48:54
>>515
d
なんで気付かなかったんだろ

517 :デフォルトの名無しさん:2008/12/08(月) 14:51:06
気付くという話じゃない。文法書読め。

518 :デフォルトの名無しさん:2008/12/08(月) 21:46:41
#include <stdio.h>

class   CHoge
{
    const int path; //  ここでのconstがエラー?
public:
    CHoge();
    void    Show();
};

CHoge::CHoge(){ path = 1024; }

void    CHoge::Show(){  printf( "%d\n", path ); }

void    main()
{
    CHoge   hoge;

    hoge.Show();
}
上記のソースでコンパイルするのですが
error C2758: 'path' : オブジェクト コンストラクタの初期化リストで初期化されませんでした。
とコンパイルエラーがでます
const int path を int path にするとコンパイルは通るのですが、
pathをconstにして変更不可にしたい場合どのような手段があるのでしょうか?

519 :デフォルトの名無しさん:2008/12/08(月) 21:53:52
CHoge::CHoge(){path=1024 ;}

CHoge::CHoge() : path(1024){}

constなんだから代入できるわけ無いだろカス

520 :デフォルトの名無しさん:2008/12/08(月) 22:10:07
ん?
ではどうしろと?


521 :デフォルトの名無しさん:2008/12/08(月) 22:14:11
ちゃんとどうしたらいいか書いてくれてるじゃないか

522 :デフォルトの名無しさん:2008/12/08(月) 22:17:27
>>521
参考書にはその書式載ってなかったんだ
ありがとう

523 :デフォルトの名無しさん:2008/12/08(月) 22:30:52
#include <stdio.h>

class   CHoge
{
    const int path
public:
    CHoge();
    void    Show();
};

CHoge::CHoge() : path(1024){} 

void    CHoge::Show(){
    char    lo[path];       // ここでエラー
    printf( "%d\n", path );  // ここはOK
}

void    main()
{
    CHoge   hoge;

    hoge.Show();
}
う〜ん
error C2057: 定数式が必要です。
error C2466: サイズが 0 の配列を割当てまたは宣言しようとしました。
error C2133: 'lo' : サイズが不明です。
とエラーがでるんですが、#define の変わりにはならないんでしょうか?

524 :デフォルトの名無しさん:2008/12/08(月) 22:34:22
C++ってconstなメンバに何の修飾もなくアクセスできるの?
CHoge::pathとかいろんな言語でありがちな書き方だと思うけど

525 :デフォルトの名無しさん:2008/12/08(月) 22:37:07
エラーが出た箇所よりも後ろについてここはOKと判断するのって危ないよねえ

526 :デフォルトの名無しさん:2008/12/08(月) 22:45:11
satic つけろ static
あとそうすると定義方法が変わるけど

527 :デフォルトの名無しさん:2008/12/08(月) 22:46:20
Cでは const 修飾した変数は定数として使えないけど
C++ではできるよ

528 :デフォルトの名無しさん:2008/12/09(火) 00:04:01
static const int path = 1024;
これ、クラス・関数外ならstaticは要らない。

529 :デフォルトの名無しさん:2008/12/09(火) 11:59:20
c++で例えば
while(a!=c) a++;この文ってa++だけ繰り返すんだよね?

530 :デフォルトの名無しさん:2008/12/09(火) 12:00:25
>>523
static ではない const は「インスタンス生成後に書き換えないよ」というだけで
コンパイル時に決定できないかも知れない。なので、
>#define の変わりにはならないんでしょうか?
ならない。ここは素直に頭に static 付けて、後ろに = 1024 付けるよろし。

但し、もし VC++ 6.0 だとこれもできないんで enum hack 使うしかない。

>>529
是。

531 :デフォルトの名無しさん:2008/12/09(火) 12:07:40
>>530
529だけどおkと解釈しますね

532 :530:2008/12/09(火) 12:42:49
あああ「是」じゃわかんねーよ馬鹿>俺
そです。おk。

533 :デフォルトの名無しさん:2008/12/09(火) 13:02:42
>>529
a!=c も繰り返すよ、というのが正確だけどまあいいか

534 :デフォルトの名無しさん:2008/12/09(火) 14:23:28
>while(a!=c) a++;
なんでa=c;にしないの

535 :デフォルトの名無しさん:2008/12/09(火) 14:36:21
aとcの型がcopy constructibleとは限らないから他

536 :デフォルトの名無しさん:2008/12/09(火) 15:01:03
そこは assignment compatible というべきだな。

537 :デフォルトの名無しさん:2008/12/09(火) 15:43:06
オーバーロードしてて副作用があるかもしれない。

538 :デフォルトの名無しさん:2008/12/09(火) 16:28:47
>>536
言われてみればそうだな
指摘あんがと


539 :デフォルトの名無しさん:2008/12/09(火) 18:14:40
>532
大丈夫、中国語では「そう」って感じの意味だ

540 :デフォルトの名無しさん:2008/12/09(火) 18:43:19
是非

541 :デフォルトの名無しさん:2008/12/09(火) 19:59:20
宗介「肯定だ。」

542 :デフォルトの名無しさん:2008/12/09(火) 20:15:13
そーすけってポニョの?

543 :デフォルトの名無しさん:2008/12/10(水) 02:06:45
>>539
「是」は「はい」だ
「対」が「そう」に近い

544 :デフォルトの名無しさん:2008/12/10(水) 02:46:18
>543
対か。謝謝。

545 :デフォルトの名無しさん:2008/12/10(水) 08:30:11
元々、「是非」と言う言葉は「是が非でも」だ。
つまり、「「はい」ではなく「いいえ」だとしても」という意味だね。

546 :デフォルトの名無しさん:2008/12/10(水) 09:24:26
ここなんて中国語スレ?

547 :デフォルトの名無しさん:2008/12/10(水) 09:36:53
>>542
台詞からして、相良軍曹だな。

548 :デフォルトの名無しさん:2008/12/10(水) 12:46:39
ちょっとした疑問が浮かんだんですが、
scanf()は入力したものを受け取る関数だと思うのですが、
受け取れる箇所は1つだけなのでしょうか?

例:scanf("%d",&a)は10進数で受け取り、aに保存?すると思いますが
  scanf("%d",&a,&b)のように複数に保存できるようにはできないでしょうか?

変な質問でスマソ、意味がわからなかったら軽くスルーしてください orz

549 :デフォルトの名無しさん:2008/12/10(水) 12:48:08
//空白区切り
scanf("%d %d", &a, &b);
//コンマ区切り
scanf("%d,%d", &a, &b);


550 :デフォルトの名無しさん:2008/12/10(水) 17:40:07
scanf("%d",&a);
b=a;
とするしか。

551 :デフォルトの名無しさん:2008/12/10(水) 18:09:08
なるほど、一つの入力を「複数に保存」と捉えたのか。

馬鹿だな。

552 :デフォルトの名無しさん:2008/12/10(水) 21:41:53
Visual C++を使用していて、ちょっと困ってしまったので助けてください。
下記画像のようにスペース部分に色つき矢印やらドットやらが表示されて消えなくなってしまいました。
どこかでキーボード押し違えたみたいで・・
この設定の解除の仕方を分かる方いたら教えてください><
   ↓
http://imepita.jp/20081210/770880


553 :デフォルトの名無しさん:2008/12/10(水) 21:42:55
MAKEFILEでどうしても分からない事がありますので、 お教え願いたいのですが。
#-------------------------------------- リンカ(GUI)
linkexe = $(linkopt) -Tpe -aa
#-------------------------------------- リンカ(CONSOLE)
linkcon = $(linkopt) -Tpe -ap
#-------------------------------------- リンカ(DLL)
linkdll = $(linkopt) -Tpd -aa

linkconとlinkdllのマクロが使用されている箇所が、
この行以下にはありません。
しかし、linkconとlinkdllの記載を削除すると、リンク時にエラーが出ます。

$(name)T.EXE: FOO1.OBJ $(sobj) $(name)T.RES
$(linkexe) @&&|
$(C0GUI) FOO1 $(sobj)
$(linkout)$.
!if $(UseBCC)
$&
$(DebugLib) NOEH32 IMPORT32 CW32
!endif
$&.RES
|

質問
@リンクエラーでは、 $(linkexe) @&&| という部分に関係がしていると思われるのですが、
@&&| の意味が分かりません。この意味について教えて頂けませんでしょうか。
または参考になるサイトがあれば、そちらを教えて頂きたいです。

A$(linkout)$.
$. の意味も分かりません。

554 :デフォルトの名無しさん:2008/12/10(水) 21:46:49
>>553
Make専用スレへどうぞ。

>>552
VisualStudio専用スレへどうぞ。

どちらもC/C++の質問ではありませんね。

555 :552:2008/12/10(水) 22:31:10
失礼しました。移動します。
またよろしくお願いします。


556 :553:2008/12/10(水) 22:32:45
失礼しました。移動します。
またよろしくお願いします。


557 :なめ:2008/12/10(水) 22:39:29
ID 名前 性別

というフォーマットのファイルがあるとします。
これを、それぞれを文字列として、構造体に格納するとします。
構造体の例:
struct{
std::string a; // IDを格納
std::string b; // 名前を格納
std::string c; // 性別を格納
}_dataType;

各行には、上記の3つのレコードだけだとして、
区切り文字は、半角空白か、Tab('\t')
行末には空白文字は許容するけど、それは、構造体の「性別」を格納する変数には
含まない

てな条件で、データファイルを読み込む場合、
std::stringで、std::getline() を使う
char * で、fstream::getline()をつかう
char * で、fgets()を使う
その他
どれが一番楽なのか教えてほしいっす。できれば、切り分けするところのサンプルなんかも。。。

環境:gcc + cygwin
できれば、Linuxにも流用したいので、Win系のライブライは使いたくないです。

558 :デフォルトの名無しさん:2008/12/10(水) 22:45:46
>>557
http://pc11.2ch.net/test/read.cgi/tech/1226229627/57,60-61

559 :デフォルトの名無しさん:2008/12/10(水) 22:51:07
>>557
短絡的な意味で最も簡単なのはfscanfだろうね

560 :デフォルトの名無しさん:2008/12/10(水) 22:55:56
FILE * fp = fopen("foo", fp);
char tId[1000];
char tName[1000];
char tGener[1000];
fscanf(fp, "%999s%999s%999s", tId, tName, tGender);
fclose(fp);
_dataType foo = {tId, tName, tGender};


561 :デフォルトの名無しさん:2008/12/10(水) 23:16:19
>>551
え?

562 :デフォルトの名無しさん:2008/12/11(木) 09:02:29
>>551
そういう質問みたいだが。
>>548
>scanf("%d",&a,&b)のように複数に保存できるようにはできないでしょうか?

>>557
楽なのは stream I/O で >> 演算子。

>>560
無根拠に1000とか。

563 :デフォルトの名無しさん:2008/12/11(木) 10:21:06
scanf("%d %d",&a, &b)
としたいだけだろ。b)を全角で書くような奴の質問だぞ。

564 :デフォルトの名無しさん:2008/12/11(木) 10:41:12
scanf()使うなら戻り値もみとけ。

565 :デフォルトの名無しさん:2008/12/11(木) 11:56:03
bool型のフラグの状態を判定させるのって簡単になにかないですか?
if elseで場合わけしてっていうのならわかりますが

566 :デフォルトの名無しさん:2008/12/11(木) 12:09:06
「判定」と「場合わけ」の違いを定義してくれたまえ。

567 :デフォルトの名無しさん:2008/12/11(木) 12:13:53
場合分け: (p→r)∧(q→r)→(p∨q→r)
判定: (true→true)∨(false→false)

568 :デフォルトの名無しさん:2008/12/11(木) 12:18:57
bool で if/else より簡単な場合分けの方法があるのか・・・?
言いたいことがよくわからん。

複数のフラグをint型の変数に保存していて、その簡単な取り出し方法
ということなら (質問の意味は) わかるが。

569 :デフォルトの名無しさん:2008/12/11(木) 12:19:38
フラグの状態を判定じゃなくて"反転"でした・・・
すいません

570 :デフォルトの名無しさん:2008/12/11(木) 12:21:34
当然 ! よりも簡単な方法を求めているんだよね。

571 :デフォルトの名無しさん:2008/12/11(木) 12:22:20
if(flag == true) flag= false;
else flag = true;

これを一発でかけないものかと思ったんです

572 :デフォルトの名無しさん:2008/12/11(木) 12:33:14
flag=!flag;

573 :デフォルトの名無しさん:2008/12/11(木) 12:40:45
flag ^= true;

flagがtrue, 0以外の値を取るときはだめ

574 :デフォルトの名無しさん:2008/12/11(木) 12:49:02
まさしく flag = !flag; だな

575 :デフォルトの名無しさん:2008/12/11(木) 12:49:12
flag = (flag == true)? false: true; なんて書くなよ。


576 :デフォルトの名無しさん:2008/12/11(木) 12:55:36
そもそもif(flag==true)とか書いちゃう辺りが初心者だなあ
真偽値が入った変数ならif(flag)で良いのに

577 :デフォルトの名無しさん:2008/12/11(木) 13:42:55
>>576
if や while の条件式には比較演算子がないといけない、と
思い込む人が多いね。

578 :デフォルトの名無しさん:2008/12/11(木) 13:57:10
>>576
そうしたほうがわかりやすいから、わざわざそうしてるよ

579 :デフォルトの名無しさん:2008/12/11(木) 14:02:25
logical equalの単位元がtrueだからp==trueなんていうのはp*1とか書いてるのと同じぐらい冗長

580 :デフォルトの名無しさん:2008/12/11(木) 14:05:13
というお話だったのさ…

581 :デフォルトの名無しさん:2008/12/11(木) 14:05:36
心配症なもんで、 if ((flag==true) == true) と書かないと気が済まない。

582 :デフォルトの名無しさん:2008/12/11(木) 14:09:26
>>579
実行コードに差は出ないからどっちでもいいじゃん

583 :デフォルトの名無しさん:2008/12/11(木) 14:29:29
>>582
話題を実行コードに限定して「差は出ない」とか、どんだけ勝手なんだ。

584 :デフォルトの名無しさん:2008/12/11(木) 15:03:40
>>582
使ってない変数を放置とか、変数名に適当に連番つけちゃうタイプでしょ。
どうせ実行コードには関係ないしーって。

585 :デフォルトの名無しさん:2008/12/11(木) 15:48:09
>577
というより、初心者は条件式について誤解してるんだよな。
ifやwhileが条件式を要求してる=条件式を解釈してると思ってるみたいな。
・条件式は値を返す
・if、whileなどは値が真か偽かを見てるだけ
ということを理解出来たらそんな誤解しないんだけどね。

586 :デフォルトの名無しさん:2008/12/11(木) 16:00:46
俺はあえて比較することはあるな。
if((hoge=func()) != 0)

条件式の中で代入すんなって言われそうだがw

587 :582:2008/12/11(木) 16:03:11
条件式いれた方が、万人にわかりやすいから、そうするだけ。
変数名はきちんとつけるよ

588 :デフォルトの名無しさん:2008/12/11(木) 16:15:01
>>586
hoge=func()がブール型でないなら、!= 0はありだと俺は思うよ。
ブール型なら、次のどっちかにするけど。
1.
hoge = func();
if (hoge)
2.
if (bool hoge = func())


589 :デフォルトの名無しさん:2008/12/11(木) 16:48:09
>>587
int i = 0; // iに0を代入

こんなコメント付けるタイプですね?

590 :デフォルトの名無しさん:2008/12/11(木) 17:10:38
>>589
いや、iを0で初期化、だよ。

591 :デフォルトの名無しさん:2008/12/11(木) 17:33:28
しない奴は、無い方がわかりやすいからしないんだよ。

592 :デフォルトの名無しさん:2008/12/11(木) 18:19:38
そうそう。余計なものは無いほうがよい


だからお前修正前のコードを#if 0で残しておくなって

593 :デフォルトの名無しさん:2008/12/11(木) 18:36:20
#if 0で残すことに対する常套句は
・戻したくなる時とかあるでしょ
・修正に至る経緯を知るためにも大切なんですよ
あたりかな。

594 :デフォルトの名無しさん:2008/12/11(木) 18:40:23
まともなVCS使え。

595 :デフォルトの名無しさん:2008/12/11(木) 18:53:13
ankhsvnって複数人がファイル追加などのプロジェクト変更を行うとプロジェクトファイルが
コンフリクト祭りになるんだけど、どうにかならない?

596 :なめ ◆dHe9wXXwgk :2008/12/11(木) 21:44:46
>>559
ありがとうございます。
fscanf で、delimiterが、'\t'とか扱えるんですか?また、複数の' 'を1つの区切りとして扱えましたっけ?

>>560
ありがとうございます。
[1000]の部分は、可変長(極端な話、65535 とか)にしたいですが、その場合この方法だと難しいですよね

>> 562
>楽なのは stream I/O で >> 演算子。
ありがとうございます。
速度の面でどうなんでしょうか?
あと、delimiterが、TABの場合は可能でしょうか?

597 :デフォルトの名無しさん:2008/12/11(木) 21:48:19
なぜ、試してみないんだろう?

598 :デフォルトの名無しさん:2008/12/11(木) 22:12:51
まともなVCSつかえというくらいだからナイス返答を期待したんだが、だめか。
スレ違いながらもいい機会だと思ったのになー
vcprojファイル内の順番がぐちゃぐちゃにならない方法でもいいんだけど。

599 :デフォルトの名無しさん:2008/12/11(木) 22:36:31
任意の実数を底とする対数ってやっぱ底の変換公式を使って
double log2(double a,double b){
return log(b)/log(a);
}
とやるしかないんかのぉ。

600 :デフォルトの名無しさん:2008/12/11(木) 23:07:08
>>598
なんでプロジェクトファイルをみんなで弄るんだ?
つーか、Subversionスレに行けって。

>>599
ない。

>>596
1000が65536でも別に構わんと思うが。どっちみち、最大サイズの仮定なんだから。

601 :デフォルトの名無しさん:2008/12/12(金) 08:12:13
今unsigned型(10進数で最大値2,147,483,647)の変数にパスワードをユーザーから入力してもらうことを考えます。
ユーザーが入力するのは52進数か62進数のパスワードです。このとき変数がオーバーフローしないようにすることを考えると、
いちいち52進数ないし62進数の最大値を求めてそれ以上上がらないように設定するしかないでしょうか?
(例えばある桁がAで左の桁がBでさらにその左の桁がCならその桁は上げることができない)
それともif文でif(変数 + 上昇量 > 2147483647)のようにif文の中だけでオーバーフローするようなことができるのでしょうか?

602 :デフォルトの名無しさん:2008/12/12(金) 08:27:57
> 52進数か62進数

52進数は「A〜Z,a〜z」、62進数は「0〜9,A〜Z,a〜z」ってことか?

> if文でif(変数 + 上昇量 > 2147483647)のようにif文の中だけで
> オーバーフローするようなことができるのでしょうか?

可能かどうかと言えばできる。

環境や言語は知らんが、WindowsでVC++(MFC)なら、CEdit派生クラスで
OnCharをオーバーライドかな。

それよりも問題は、入力途中の段階で52進数か62進数かを、どうやって
判断するのかだ?

それと52進数で「A」と入力した時と、62進数で「A」と入力した時では、
数値に変換した際に値が違うのか?

603 :デフォルトの名無しさん:2008/12/12(金) 08:32:20
>>602
解答ありがとうございます。
52進数か62進数と言ったのは単に自分が仕様をまだ決めてないだけです。
環境はSolaris コンパイラはcc or gccです。

604 :601:2008/12/12(金) 09:41:27
if(pass[0] * 62 * 62 * 62 * 62 * 62 * 62 * 62 * 62 * 62 +
pass[1] * 62 * 62 * 62 * 62 * 62 * 62 * 62 * 62 +
pass[2] * 62 * 62 * 62 * 62 * 62 * 62 * 62 +
pass[3] * 62 * 62 * 62 * 62 * 62 * 62 +
pass[4] * 62 * 62 * 62 * 62 * 62 +
pass[5] * 62 * 62 * 62 * 62 +
pass[6] * 62 * 62 * 62 +
pass[7] * 62 * 62 +
pass[8] * 62 +
pass[9] > 2147483647) pass[now_i]--;

実際にプログラミングしてみたらこのコードがうまく動きませんでしたどうしたらいいでしょうか?

605 :デフォルトの名無しさん:2008/12/12(金) 09:44:24
>>604
お馬鹿さんや、62の9乗を計算してご覧。
高高6桁で桁溢れするわけだが。

606 :601:2008/12/12(金) 09:46:03
>>605
でもオーバーフローするif文も書けるんじゃなかったんですか?

607 :601:2008/12/12(金) 09:50:20
あとこのプログラムのif文がうまく機能しないのはなんででしょう?
pass[10] = 60 のときでも if文がなぜか false になってしまいます。

if(pass[10] * 62 * 62 * 62 * 62 +
pass[11] * 62 * 62 * 62 +
pass[12] * 62 * 62 +
pass[13] * 62 +
pass[14] > 99999) pass[now_i]--;

608 :デフォルトの名無しさん:2008/12/12(金) 10:08:11
62^ 2=                3844
62^ 4=             14776336
62^ 9=      13537086546263552
62^ 13= 200028539268669788905472

609 :デフォルトの名無しさん:2008/12/12(金) 10:12:39
>>600
プロジェクトにファイルを追加するのが複数人いるってそんなに珍しいことか?
うちはロックするようにして回避してる。

>>607
うちではtrueになるよ。

610 :デフォルトの名無しさん:2008/12/12(金) 10:53:05
>>601
if((最大値-進数) < 前の桁までの合計値 ) && (新しい桁の数値 > (最大値-前の桁までの合計値))
{
 //オーバーフロー処理
}

あってるかどうかは試してないから分からんが方向性はこんなんのはず
オーバーフローする直前のタイミングを捕まえて、本当にオーバーフローするかどうかを「オーバーフローさせないで」判定する


611 :デフォルトの名無しさん:2008/12/12(金) 12:01:54
>>610
なるほど!!!式変形すれば良かっただけでしたか。
その方針でプログラミングしてみます。

612 :デフォルトの名無しさん:2008/12/12(金) 12:04:52
オーバーフローしうる桁だけやりなよ
あと、unsignedなら42億じゃないかと思う。

613 :デフォルトの名無しさん:2008/12/12(金) 12:20:51
>>612
うちの環境では unsigned u; と定義した変数が21億までしか持てませんでした
あとなぜかオーバーフローしたら負の値になりました。

614 :613:2008/12/12(金) 12:28:28
自己解決しました
unsignedの最大値は42億かもしれません。

615 :デフォルトの名無しさん:2008/12/12(金) 12:51:04
プログラマがこういうときに42億とかって言うか?

616 :デフォルトの名無しさん:2008/12/12(金) 13:15:05
うん

617 :デフォルトの名無しさん:2008/12/12(金) 14:26:47
>>615
約9.6桁。

618 :デフォルトの名無しさん:2008/12/12(金) 14:32:32
>>613
unsignedが負になるわけないだろ
どうみてもsigned longの値

619 :デフォルトの名無しさん:2008/12/12(金) 15:01:48
%d とかで確認してる、に一票

620 :デフォルトの名無しさん:2008/12/12(金) 18:58:41

int NUM = 100; グローバル変数


int func(){

NUMを使う

}

とするのと

int func(int NUM){

}
int main(){
int NUM =100;
func(NUM);
}

では実行速度かわりますかね??funcを1000回ぐらい呼び出すんですが・・・

621 :デフォルトの名無しさん:2008/12/12(金) 19:06:30
いちいち宣言するからなんか確保とかするのに時間かかるんじゃ?
って思ってるのであれば全く問題ない最適化の対象だからうまいことやってくれる

つか高々1000回かよwwwwwww

622 :デフォルトの名無しさん:2008/12/12(金) 19:30:09
後者はNUMをスタックに積む、呼出し後にスタックから取り除くという
余分な命令が実行されるので、実行速度は確実に変わる。

でも1000回なら誤差の範囲。

623 :デフォルトの名無しさん:2008/12/12(金) 19:37:18
>>622
嘘をいうな
ためしてみろよ


624 :デフォルトの名無しさん:2008/12/12(金) 19:50:08
>>623 お前でもステップ数を数えるくらいはできるだろう。ww
前者
main:
pushl %ebp
movl %esp, %ebp
subl $8, %esp
andl $-16, %esp
movl $0, %eax
addl $15, %eax
addl $15, %eax
shrl $4, %eax
sall $4, %eax
subl %eax, %esp
call func
leave
ret

625 :デフォルトの名無しさん:2008/12/12(金) 19:50:51
>>623 続きだ。
後者
main:
pushl %ebp
movl %esp, %ebp
subl $8, %esp
andl $-16, %esp
movl $0, %eax
addl $15, %eax
addl $15, %eax
shrl $4, %eax
sall $4, %eax
subl %eax, %esp
movl $100, -4(%ebp)
pushl -4(%ebp)
call func
addl $4, %esp
leave
ret

626 :デフォルトの名無しさん:2008/12/12(金) 19:52:05
>>624
>>625
それがわかるんなら話は早いな
最適化かけてから見直せ

627 :デフォルトの名無しさん:2008/12/12(金) 20:06:17
>>626 pushってわかる? ww
前者
main:
pushl %ebp
movl %esp, %ebp
subl $8, %esp
andl $-16, %esp
subl $16, %esp
call func
leave
後者
main:
pushl %ebp
movl %esp, %ebp
subl $8, %esp
andl $-16, %esp
subl $28, %esp
pushl $100
call func
leave
ret


628 :599:2008/12/12(金) 20:08:37
>>600
返事が遅れたがThanks!

629 :デフォルトの名無しさん:2008/12/12(金) 20:43:27
速度気にしてグローバル変数使うようなの相手にすんな

630 :デフォルトの名無しさん:2008/12/12(金) 22:23:16
>>623
おい、こら。自信満々に難癖つけといて、無言で逃亡か?

631 :デフォルトの名無しさん:2008/12/12(金) 23:54:45
>>627
今時のコンパイラなら、func()をインライン展開してしまうからイミディエイトプッシュのコストは消えるだろうね。
つーか、速度気にしてグローバル変数使う前に、func()にstaticつけておけよ。

632 :デフォルトの名無しさん:2008/12/13(土) 00:31:14
>>631
コンパイラが頑張っても、引数をレジスタに乗っけるコードは余計に必要。見苦しいぞ。
「私が未熟でした。ごめんなさい」くらい言えんのか。

static云々は>>620に言え。本当にstaticが不要なのかは>>620じゃなきゃわからん。

633 :631:2008/12/13(土) 00:37:07
>>632
見苦しいも何も、この話題に乗るのは>631が初めてだけど。
レジスタに乗せるコードは要るかなぁ。少なくとも、グローバル変数を取ってくるよりはコスト掛からないよ。

634 :デフォルトの名無しさん:2008/12/13(土) 00:47:26
funcの中では、引数ならすぐにレジスタに置いてなるべくそれを使うようにするけど、
グローバル変数だとマルチスレッドとか考慮して都度メモリにアクセスするコードを出すから、
頻繁にグローバル変数へアクセスするコードは遅いって聞いたことがある。

635 :デフォルトの名無しさん:2008/12/13(土) 00:49:28
レジスタに乗っける値をどっかから取ってこなきゃならない。
グローバルから取ってくるのと同じコストはかかる。

636 :デフォルトの名無しさん:2008/12/13(土) 08:19:04
>>634
それはあるね。global 変数は volatile が付いているのと
同様に最適化されなくなる

>>620には関係ない話だけど

637 :デフォルトの名無しさん:2008/12/13(土) 12:00:00
>>634, >>636
volatileついてないグローバル変数の最適化を行わないコンパイラなんて聞いたことないな。
伝聞でなくソースだせ。

ついていない場合、最適化をできるとしている文書(あんたらの主張の逆)
http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.dui0205hj/CJAEGDEA.html
一方、変数が volatile として宣言されていない場合、コンパイラはその値を実装の外部で変更できない
ものと見なすことができます。 そのため、コンパイラは変数に対する最適化を実行できます。

638 :デフォルトの名無しさん:2008/12/13(土) 14:18:11
できるからするとは限らない。例えばgccのとある68000用の実装ではしていなかった。

639 :デフォルトの名無しさん:2008/12/13(土) 14:46:24
それは「行わない」ではなく「出来ない」

640 :デフォルトの名無しさん:2008/12/13(土) 23:29:00
>>637
逆にこっちは、グローバル変数ではなくメンバ変数だけど、
いずれにせよ自動変数との差が出るという話。
http://www.emit.jp/prog/prog_opt0.html

641 :デフォルトの名無しさん:2008/12/14(日) 00:30:44
1 for(int j = 0; j < nSize; j++) Buffer[j] = i;
2 for(int j = 0; j < nSize; j++) pBuffer[j] = i;
1はグローバル変数、2は自動変数

642 :デフォルトの名無しさん:2008/12/14(日) 15:44:45
Cのスレッドを使った並行プログラミングについての質問です。
いわゆる生産者消費者問題(有限バッファ問題)です。

生産者スレッド
do {
pthread_mutex_lock(&lock);
share_buf_num = read(fd, prod_buf, SHARE_BUFSIZE);
strncpy(share_buf, prod_buf, share_buf_num);
pthread_mutex_unlock(&lock);
} while (share_buf_num != 0);

消費者スレッド
do {
pthread_mutex_lock(&lock);
strncpy(cons_buf, share_buf, share_buf_num);
write(fd, cons_buf, SHARE_BUFSIZE);
pthread_mutex_unlock(&lock);
} while (share_buf_num != 0); // do {

share_bufが共有バッファ、SHARE_BUFSIZEがそのサイズ
生産者でデータをリードしている間は消費者は待っており、
そのあと消費者がライトしている間は生産者が待つ
という動作を期待してるんですが、生産者のみがループし続けて
ループを抜けたあとに消費者スレッドが動くという挙動を起こします。
何が原因なのでしょうか。
gcc 4.3.2, Ubuntu8.10(仮想マシン上)です。

643 :デフォルトの名無しさん:2008/12/14(日) 16:04:53
share_buf_numはいつふやしてんの


644 :デフォルトの名無しさん:2008/12/14(日) 16:16:07
生産者の方でリードしたデータ分を代入しています。

645 :デフォルトの名無しさん:2008/12/14(日) 18:14:40
#include    <windows.h>
#include <stdio.h>

void    main()
{
    ULARGE_INTEGER  h1;
    ULARGE_INTEGER  h2;
    ULARGE_INTEGER  h3;

    GetDiskFreeSpaceEx( NULL, &h1, &h2, &h3 );

    printf( "h1.QuadPart: %llu\n", h1.QuadPart );

    LONGLONG i = h1.QuadPart;

    printf( "%llu\n", i );

    //  h1.QuadPart = 16928739328
    //  h1.LowPart  = 4043837440
    //  h1.HighPart = 3
}
上記のように空き容量を表示したいのですが
printfを使ってますがその値は h1.QuadPart の値ではなく
h1.LowPart の値が表示されます
これはどういうことでしょうか?

646 :645:2008/12/14(日) 18:24:33
コンパイラは VisualC++6.0 
OSは WindowsXP Home Edition です

647 :デフォルトの名無しさん:2008/12/14(日) 19:48:30
>%llu
%lld

648 :645:2008/12/14(日) 19:55:58
コンパイラを Visual C++ 2008 Express にしたところ
解決しました

649 :645:2008/12/14(日) 20:00:42
>>647
VC++6.0 ではダメでした

650 :デフォルトの名無しさん:2008/12/14(日) 20:03:13
VC6はllに対応していない代わりに、%I64uってのが使えたはず。

651 :デフォルトの名無しさん:2008/12/14(日) 20:36:25
#include<stdio.h>

main(){
int c,i;
int n[2];
for(i=0; i<2; i++){
printf("%d",i+1);
while((c=getchar()) != '\n'){
if(c >= '0' && c <='9'){
c = c - '0';
n[i] = n[i] * 10 + c;
}else{
/* 終了 */
}
}
}
printf("%d + %d = %d",n[0],n[1],n[0] + n[1]);
return 0;
}

getchar関数を使った足し算を作成したのですが2つの数字を入れてみたところ、
n[1]の値だけ入力した値と異なった値(正の整数が負の整数に、値もめちゃくちゃ)がでてしましました。

どこを改善したらいいか分かりません。アドバイスお願いします。

また、コメントの終了部分に文字が入った場合その場で終了という感じでreturn0を入れたのですが、
1つめを入力したあと終了せずに2つめまで行ってしまいます。これについても終了できる関数かなにかを教えてください。

コンパイラはgccです。

652 :デフォルトの名無しさん:2008/12/14(日) 20:44:48
>>651
getchar()では一桁だけしか入力できないしエラー処理も厄介だから、
fgets()で1行入力してからじっくり解析する方がいいと思う。
が、それ以前に状況をもっと的確に説明できないもんかね。

653 :デフォルトの名無しさん:2008/12/14(日) 21:30:31
>>651
俺は初心者だが、最近fgetsを入力として使うのがリーズナブルだなと思った。
ただ、fgetsをキーボード入力として使うとバッファが残っちゃうのでそれを消す機能を付けた自作関数を使うといいと思う。
ttp://ja.wikipedia.org/wiki/fgets

char *fgetsStdin(char *s, int n){
char *temp = fgets(s, n, stdin);
if(temp == NULL){
/* エラー処理(初心者なのでわかりません) */
}
if(strchr(s,'\n') != NULL){
s[strlen(s)-1] = '\0';
}else{
while(getchar() != '\r');
}
return temp;
}

654 :デフォルトの名無しさん:2008/12/15(月) 04:40:37
#include<stdio.h>
#include<string.h>

typedef struct{
int a;
char name[100];
int b;
int c;
}stringx;

int main(void)
{
int i;
stringx str[5];

for(i = 0;i < 5;i++){
printf("a:");scanf("%d", str[i].a);
printf("name:");fgets(str[i].name, 100, stdin);
printf("b:");scanf("%d", str[i].b);
以下略

これでnameのところに空白も読み込める文字列を入力したいんですが

(実行例)
a:1
name:b:2

と、何故かnameの入力自体がスルーされてしまいます
ちなみにscanfに終了判定を付けたものやgetsでも同じようにスルーされます
何処がいけないのでしょう
コンパイラはgccです

655 :デフォルトの名無しさん:2008/12/15(月) 04:46:16
入力した文字:
'1'、'\n'
初回のscanf()の消費した文字:
'1'
入力に残った文字:
'\n'

fgets()は、この残っている改行文字を拾ってしまう。

結論:
scanf()とfgets()を混ぜるのは難しい。

対策:
・初回のscanf()のフォーマットを"%d "にする。
・初回のscanf()をfgets()とatoi()(或いはstrtol())に置き換える。

656 :デフォルトの名無しさん:2008/12/15(月) 12:08:11
>>642
たぶん2つのスレッドが交互に動くことを期待しているのだろうけど、そのような保証はまったくない
lock〜unlockはその範囲内が同時に実行されないことを保証するだけ
unlockから抜けてもすぐにスレッドが切り替わるわけではないし (通常はそのまま走り続ける)、
もう一方のスレッドがずっとlock待ちをしていたのだといても、次に中に入るのがどっちのスレッドになるかは運任せ
(今まで寝てた方のスレッドよりも走り続けてるスレッドの方が先に入る可能性が高いかもしれない)
2つのスレッドが交互に動いて欲しいなら、交互に動くよう確実にプログラムしなければならない
条件変数の使い方を覚えるといいよ

657 :デフォルトの名無しさん:2008/12/15(月) 22:52:00
>>654
#include<stdio.h>
#include<string.h>

typedef struct{
int a;
char name[100];
int b;
int c;
}stringx;

int main(void)
{
int i;
stringx str[5];
char buff[100];
char *p;

for(i = 0;i < 5;i++){
printf("a:");fgets(buff,100,stdin);sscanf(buff,"%d", &str[i].a);
printf("name:");fgets(buff, 100, stdin);
if(p = strchr(buff,'\n'))
*p = '\0';
strcpy(str[i].name,buff);
printf("b:");fgets(buff,100,stdin);sscanf(buff,"%d", &str[i].b);
printf("c:");fgets(buff,100,stdin);sscanf(buff,"%d", &str[i].c);
}

658 :デフォルトの名無しさん:2008/12/16(火) 01:06:02
char *cm_getMessage(msg_filename, msg_number)
  char *msg_filename; // メッセージ定義ファイル名
  int msg_number;   // メッセージ番号
{
int i;
}



2,3行目は何を表しているの?引数の型の定義?

659 :デフォルトの名無しさん:2008/12/16(火) 01:14:23
そそ、所謂オールドスタイル。全く持ってお勧めできないが。

660 :デフォルトの名無しさん:2008/12/16(火) 17:34:15
100000もある配列の中から配列の中身が「0」の物だけ抜き出して、さらにその抜き出した0の中からランダムに1つ配列を選ぶっていうのを作りたいんだけど

while(x!=0){
y=rand()%100000;
if(array[y]==0) x=0;
}

これだと配列の中身が0の物が1つしかなかったら特定に膨大な時間がかかるよね
何かいい方法ないですか?


661 :デフォルトの名無しさん:2008/12/16(火) 17:39:42
0が入ってるインデックスの配列作ってそこから抜き出しては?

662 :デフォルトの名無しさん:2008/12/16(火) 17:40:22
10万どころか100万くらいならシーケンシャルに全部舐めても一瞬で終わる


663 :デフォルトの名無しさん:2008/12/16(火) 17:41:34
>>660
そのコード、ランダムに1つ要素選んで、それが0でないか調べるとなっていて、
文章に書いてあることとやっていることの順番が違うぞ。

664 :デフォルトの名無しさん:2008/12/16(火) 17:53:29
>>661
こんなかんじ?
j=0
for(i=0;i<100000;i++){
if(array[i]==0)array2[j]=array[i];j++;
}

y=rand()% j;

array2[y]=〜〜〜〜;


665 :デフォルトの名無しさん:2008/12/17(水) 05:17:05
array2にはarray[i]じゃなくてiを入れておけば充分だろ。

666 :デフォルトの名無しさん:2008/12/17(水) 05:17:54
どうでもいいけどif文の使い方を間違えているな。

667 :デフォルトの名無しさん:2008/12/17(水) 08:20:09
>>664
array2 は全部0

668 :デフォルトの名無しさん:2008/12/17(水) 10:46:13
>>665-667
なるほど、ありがとうございました

669 :デフォルトの名無しさん:2008/12/18(木) 08:15:06

#include "stdafx.h"
#include <windows.h>
#include <locate.h>

int _tmain(int argc, _TCHAR* argv[])
{
    TCHAR   message[256];

    setlocale(LC_ALL, "japanese");

    lstrcpy( message, _TEXT("Hello world.\n") );

    printf_s( "%s\n", message );

    return 0;
}

として実行するのですが、printf_s では H しか表示されないのですが、
どうすれば Hello world. と表示されるのでしょうか?
コンパイラはVC++ 2008 Express です

670 :669:2008/12/18(木) 08:27:38
解決しました

671 :デフォルトの名無しさん:2008/12/18(木) 08:31:03
>>669
_tprintf_s( _TEXT("%s\n"), message );

672 :デフォルトの名無しさん:2008/12/18(木) 14:38:06
C言語でstrcpy関数を使って文字のコピーをするプログラムを作ったのですが、
コピー後のバッファーにNULL文字が入りません。

どのようにしたら、NULL文字を入れることができるでしょうか?



673 :デフォルトの名無しさん:2008/12/18(木) 14:53:54
>>672
普通に書いたら0もコピーされる
お前がよっぽど変なプログラム書いたとしか思えない


674 :デフォルトの名無しさん:2008/12/18(木) 14:55:21
>>672
strcpyのかわりにmemcpy使え。 ちゃんと文字数も渡すんだぞ。

675 :デフォルトの名無しさん:2008/12/18(木) 16:41:23
なんか乱数のはずが同じ数字になるんだが…

簡略化した奴をちょっと書いてみるんだが
ランダムに配列から数字を引っこ抜く関数を二回呼び出してるんだけど、それが必ず同じ値を引っ張ってくる
なんでだ???

int array[50]={1,2,3,…,48,49,50};

int randomNumber(int x){
return array[(int)((rand() / ((double)RAND_MAX+1.0f)) * x)];
}

void main(void){
int a,b;
srand(time(NULL));
a=randomNumber(50);
b=randomNumber(50);
if(a==b){
printf("同じだよ");
}
}

676 :デフォルトの名無しさん:2008/12/18(木) 16:46:56
srand(time(NULL)); は乱数の発生順を、その内容によって初期化する、。
time(NULL)は1秒以内なら同じ数値を返すから1秒以内なら同じで当然。

そもそもsrandを毎回呼ぶ必要はない。

677 :デフォルトの名無しさん:2008/12/18(木) 16:49:11
って内容見ないで脊髄レスしてしまった。
数字表示させてみて。全部0じゃないのそれ?

678 :デフォルトの名無しさん:2008/12/18(木) 16:49:56
>>676
srand(time(NULL));を消してやってみたけど同じ値がでてくるよ!

679 :デフォルトの名無しさん:2008/12/18(木) 16:57:50
ごめん別のところで問題起こしてた、自己解決さーせんwww

680 :デフォルトの名無しさん:2008/12/18(木) 16:58:53
とりあえず、問題なかったわ。 +1.0fで50が返る可能性があるのがちとまずいだけだな

681 :デフォルトの名無しさん:2008/12/18(木) 17:08:43
>>680
50が返る可能性はないと思うが

682 :デフォルトの名無しさん:2008/12/18(木) 17:12:07
(rand() / ((double)RAND_MAX+1.0f)
この部分は 0 〜 1に満たない範囲で値になるので、1にならない以上
50にはならないから大丈夫。

683 :デフォルトの名無しさん:2008/12/18(木) 17:54:41
いや実際返ってきたけど

684 :デフォルトの名無しさん:2008/12/18(木) 17:57:34
ねーよ。配列内部の値と、添え字を勘違いしていないか?

685 :デフォルトの名無しさん:2008/12/18(木) 18:03:07
RAND_MAX : 65535 を +1.0の 65536.0 で割った値は、1には満たない、0.9999・・・
それに50を掛けても、50に近い値にはなるが、50には満たない。
その値の整数部分をとっているわけだし。

686 :デフォルトの名無しさん:2008/12/18(木) 18:08:47
return array[(int)((rand() / ((double)RAND_MAX+1.0f)) * x)];
      ↑
int array[50]={1,2,3,…,48,49,50};

687 :デフォルトの名無しさん:2008/12/18(木) 18:52:01
わろす

688 :デフォルトの名無しさん:2008/12/18(木) 19:00:21
クラスのある一つの大小関係でclass全体のスワップをしたいんだが如何すればいいですか?
クラスをベクタコンテナで宣言してvt.at(i).swap(vt.at(i+1))みたいなアルゴリズムを考えています。

689 :デフォルトの名無しさん:2008/12/18(木) 19:03:46
stlにすでにある件

690 :デフォルトの名無しさん:2008/12/18(木) 19:14:56
いやあるのはswapするとこだけね


691 :688:2008/12/18(木) 19:28:45
>>689-690
どういう意味ですか?
vt1.swap(vt2)

temp=vt1,vt1=vt2,vt2=tempになるのは解るんですが
vt.at(i)とvt.at(k)のスワップ方法が解らないんです。

692 :デフォルトの名無しさん:2008/12/18(木) 19:37:20
#include <algorithm>
std::swap(vt.at(i), vt.at(k));

693 :688:2008/12/18(木) 19:39:25
>>692
そんな簡単なのがあるんですね。
本には載っていなかったので助かりました。
ありがとうございます。
すいませんでした。

694 :デフォルトの名無しさん:2008/12/19(金) 00:21:53
マジで勉強しようと思っている者ですが
初心者にお勧めのサイトとか教えてください#

695 :デフォルトの名無しさん:2008/12/19(金) 00:24:24
http://www.bohyoh.com/
ぼうようはどうよう?

696 :デフォルトの名無しさん:2008/12/19(金) 00:32:24
>>694
初心者なら素直に本を一冊買った方がいいと思うなぁ…

697 :デフォルトの名無しさん:2008/12/19(金) 00:32:59
ふむふむ・・

698 :デフォルトの名無しさん:2008/12/19(金) 00:42:39
俺にできるかな?

699 :デフォルトの名無しさん:2008/12/19(金) 00:42:51
手法を学ぶのも重要だが、言語の使用や、標準ライブラリを逆引きできる本も欲しいね。

700 :デフォルトの名無しさん:2008/12/19(金) 00:50:20
翻訳の手順やプログラムの実行方法などは、処理系や実行環境によって異なりますから、....
つまり、・・・・どうすればいいのか.....

701 :デフォルトの名無しさん:2008/12/19(金) 00:52:04
ふむふむ・・・コンパイラが必要って訳ですね。


702 :デフォルトの名無しさん:2008/12/19(金) 01:05:32
>>694
http://www.geocities.jp/ky_webid/ProgrammingPlacePlus/c/000.html

最初は意味分からんことが多いと思うが、一つ一つ理解していけばいい。
ゆっくりしていってね。

703 :デフォルトの名無しさん:2008/12/19(金) 01:25:16
よし、早速自分なりに頑張ってみるよ


704 :デフォルトの名無しさん:2008/12/19(金) 02:51:30
main(void)
{
return 0;
}


エラーがでます。

705 :デフォルトの名無しさん:2008/12/19(金) 02:58:22
解の公式を加算減算だけで表すプログラムがわからぬ・・・

706 :デフォルトの名無しさん:2008/12/19(金) 02:58:31
そうですか。

707 :デフォルトの名無しさん:2008/12/19(金) 07:14:06
>704
プログラミングの質問に限らず、エラーが出て質問する時は
出たエラーメッセージを貼ろうね、しまじろうとのお約束だよ

708 :デフォルトの名無しさん:2008/12/19(金) 12:23:58
はい、わかりました。

709 :デフォルトの名無しさん:2008/12/19(金) 13:26:06
やっぱり、言語をノートに書いたりして覚えたりした?

710 :デフォルトの名無しさん:2008/12/19(金) 13:39:52
目の前の箱で試せる時代に、それはない。

711 :デフォルトの名無しさん:2008/12/19(金) 13:42:33
何回も繰り返してたら覚えれえるかな

712 :デフォルトの名無しさん:2008/12/19(金) 14:35:16
567という整数の10の位だけ(つまり6)を取り出して出力する

#include <stdio.h>

int main(void)
{
int num = 567;

num = num / 10;
num = num % 10;
printf( "%d\n", num );

return 0;
}

どうしてこれで6になるのかわかりやすく教えて!偉い人


713 :デフォルトの名無しさん:2008/12/19(金) 14:38:33
>>712
int num = 567;
num = num / 10; < num=56
num = num % 10; < num=6

714 :デフォルトの名無しさん:2008/12/19(金) 14:41:27
そ・・・そういうわけか!!

715 :デフォルトの名無しさん:2008/12/19(金) 15:20:26
中学校数学レベル

716 :デフォルトの名無しさん:2008/12/19(金) 15:59:21
残念、小学生レベル。あと、自分基準で〜レベルとか、ランクをつけなくて良いから。
時代によって違うから。

717 :デフォルトの名無しさん:2008/12/19(金) 16:15:53
 ( ⌒;::)
 |||
<#`Д´>=3

718 :デフォルトの名無しさん:2008/12/19(金) 16:28:41
>>717
なんで頭に●ンコが生えてんの?

719 :デフォルトの名無しさん:2008/12/19(金) 16:31:14
>>716
>残念、小学生レベル。
>自分基準で〜レベルとか、ランクをつけなくて良いから。
>残念、小学生レベル。
>自分基準で〜レベルとか、ランクをつけなくて良いから。

720 :デフォルトの名無しさん:2008/12/19(金) 16:49:48
>>719
いや、本当にそれは小学生レベルだろ?割り算、余りを求める算数を
あんたは中学で習ったのかい?w

721 :デフォルトの名無しさん:2008/12/19(金) 16:53:39
それじゃ聞くが、割り算、余りを求める算数を、中学校で習った時代を教えてくれ。
近代の義務教育でな。

722 :デフォルトの名無しさん:2008/12/19(金) 16:57:54
#include <stdio.h>

int main(void)
{
int no;

printf("数字を入力してください:");
scanf( "%d", &no);   /*数字を読み込む*/

printf("あなたは%dと入力しましたね\n", no);

return 0;
}

ビルドエラーが発生しました。続行して、最後に成功したビルドを表示しますか?

教えて!偉い人

723 :デフォルトの名無しさん:2008/12/19(金) 17:05:46
>>722
   /*数字を読み込む*/
^^^^^の全角空白かな

724 :デフォルトの名無しさん:2008/12/19(金) 17:09:33
ありがとう!!偉い人!!

725 :デフォルトの名無しさん:2008/12/21(日) 08:35:26
シューティングで当たり判定の高速化を図りたいんだけど
vector<obj>::iteraot p, q;

p = playerbullet.begin()
while ( p != playerbullet.end() ) {
  q = enemy.begin();
  while( q != enemy.end() ) {
    if( isHit(p,q) )
     // 当たってたときの処理
  }
}

のようにやってるんだけど
遅くて使い物にならない
何か高速化の方法ってありますか?

726 :デフォルトの名無しさん:2008/12/21(日) 10:24:52
>>725
敵を4分木に入れて、弾の直線と当たり判定を取るってのは?
弾をレイと捉えてレイトレースみたいなイメージ

727 :デフォルトの名無しさん:2008/12/21(日) 11:21:03
>>725
画面を数分割して敵弾の位置を大まかに分類しておいて、
明らかに無関係な領域にある敵弾は当たり判定自体をスキップする。

複雑な当たり判定を要する弾の場合は、
まずは判定の楽な円-円の判定で大まかに判定し、
明らかに離れているものは真面目に当たり判定を行わずスキップ。

728 :デフォルトの名無しさん:2008/12/21(日) 12:28:11
どう考えてもボトルネックはisHit()関数なのになんでそこを晒さないのか

729 :デフォルトの名無しさん:2008/12/21(日) 12:41:23
画面を4分割にするとして、境目にある場合は
どう処理すればいい?

730 :デフォルトの名無しさん:2008/12/21(日) 12:42:51
どっちかに所属させとけよw

731 :デフォルトの名無しさん:2008/12/21(日) 12:46:12
両方に属すると判断しとけばいいんじゃね

732 :デフォルトの名無しさん:2008/12/21(日) 12:46:37
>>725みたいな総当りは、シェーダとかGPGPUでやったら速そうだな

733 :デフォルトの名無しさん:2008/12/21(日) 12:50:34
>>731
つうか、例えば横512ドットだとして
左は、0 <= x < 256
右は、256 <= x < 512
とすれば、元から境目に存在はしない

734 :デフォルトの名無しさん:2008/12/21(日) 12:56:53
上下左右別々に扱うわけか。

735 :デフォルトの名無しさん:2008/12/21(日) 13:21:21
>>728
////////////////////////////////////////////////////////////////////////////////////////////////
//  指定された2つの RECT構造体が、重なっているか判定する
//  重なっていると true
//  かさなっていないと false を返す。
bool    RectLap( const RECT *a, const RECT *b )
{
    //  改良失敗
//  if( (a->top < b->bottom) && (a->bottom < b->top) && (a->left<b->right) && (a->right>b->left) )
//  {
//      return true;
//  }

    if( a->top < b->bottom )
        if( a->bottom > b->top )
            if( a->left < b->right )
                if( a->right > b->left )
                    return true;

    return false;
}
となります
改良の余地があればご指摘お願いします

736 :デフォルトの名無しさん:2008/12/21(日) 13:41:57
単純な□同士の判定なのか。
それで重いってことは、よほど沢山の弾があるのか?

737 :デフォルトの名無しさん:2008/12/21(日) 13:53:01
100発もないのですが、どうしても重くなるのです
別スレッドで処理しているのですが、
CPUが割り当てられなくて処理落ちしてるとかも
考えられますか?

738 :デフォルトの名無しさん:2008/12/21(日) 13:57:12
同期処理に時間がかかってんじゃね?
別スレッドにするメリットってあんの?

739 :デフォルトの名無しさん:2008/12/21(日) 14:00:43
Celeron 2.53GHz
重たいわけもないでして
昔作ったやつは100発でもいけたので
不思議なのです
変えたといえばコンパイラだけですが
VC++6.0 -> VC++ 2008 Express にしただけです

740 :デフォルトの名無しさん:2008/12/21(日) 14:02:09
>>738
スレッドを使った理由は技術的好奇心だけです
元の1スレッドに戻してみます

741 :デフォルトの名無しさん:2008/12/21(日) 14:08:59
VC++ 2008 Express
リリースモードでコンパイルしたら実用レベルになりました
スレ汚しすいません

742 :デフォルトの名無しさん:2008/12/21(日) 16:01:12
学校の講義でC言語を学ぶことになったので、
VC++ 2008 ExpressをPCに導入したのですが、
計算をさせて、結果を表示するプログラムを作って実行させたら
結果が出力される前にDOS窓が閉じてしまいます。

どうしてでしょうか?

743 :デフォルトの名無しさん:2008/12/21(日) 16:05:28
そういう仕様
デバッグしないでいいならCtrl-F5(デバッグしないで実行)で。
それ以外にもとめる方法はいくつかあるが。

744 :デフォルトの名無しさん:2008/12/21(日) 16:06:39
>>742
あきらめろ

745 :デフォルトの名無しさん:2008/12/21(日) 16:14:07
>>743
ご親切にありがとうございました!

出力結果を無事に見ることができましたmm

746 :デフォルトの名無しさん:2008/12/21(日) 16:22:20
最近のム板もひどいな

747 :デフォルトの名無しさん:2008/12/21(日) 16:49:43
返り値に複数の値を返したいんだけど

こういう場合は
1、グローバル変数を使う
2、ポインタで参照渡し
3、1つの関数を関数をいくつかに分ける
4、関数内で返したい値を1つの値に纏めた後、呼び出し先でまとめられた値を復元する

どれがスマート?

748 :デフォルトの名無しさん:2008/12/21(日) 17:19:36
1 → よほど制限された状況でなければあり得ない解決法
2 → どうしても同時に2つ返す必要があるのであれば、普通はそうする
3 → 同時に2つ値を返す必然性がないのであれば、そうする
4 → よほど制限された状況でなければあり得ない解決法
5、構造体にして返す。コピーのコストに見合えばアリ

749 :デフォルトの名無しさん:2008/12/21(日) 18:08:53
質問です。
構造体に値を入れて、その入れた内容をポインタにキャストしたのですが
出来ませんでした(何も渡すことが出来なかった)

char *test;

test = (char *)&kouzoutai;

上記のようにしても駄目でした。
構造体をポインタにキャストする事は出来るのでしょうか?

750 :デフォルトの名無しさん:2008/12/21(日) 18:13:11
なにをもって「できなかった」と判断したのか

751 :デフォルトの名無しさん:2008/12/21(日) 19:14:24
まぁむちゃくちゃキャストしたんだろうな
構造体ないに文字列持ってたんだろうな、それを直接(char * )でキャストしようとしたんだろ?

752 :デフォルトの名無しさん:2008/12/21(日) 20:05:47
fopen_sなどのセキュアな関数が定義されている場合に定義される
マクロって何かありますか?
それが定義されていればセキュアな関数を使うようにしたいのです。

753 :デフォルトの名無しさん:2008/12/21(日) 20:05:57
>>749
kouzoutai の型が分からない限り答えようがない

754 :デフォルトの名無しさん:2008/12/21(日) 20:30:29
>>752
処理系名のマクロじゃないかな?


755 :デフォルトの名無しさん:2008/12/21(日) 21:17:43
>>752
一般的な方法はまだない。Open WatcomとVisual C++を個別にマクロで検出するしかない。

756 :デフォルトの名無しさん:2008/12/21(日) 21:55:04
VCのバージョンしかないんじゃないかな?

757 :デフォルトの名無しさん:2008/12/21(日) 22:23:21
ソースみたら

 _MSC_VER >= 1400

で判別してるものがあったのですが、これで大丈夫ですかね

758 :デフォルトの名無しさん:2008/12/21(日) 23:29:53
#if defined(_MSC_VER) && _MSC_VER >= 1400 か

759 :デフォルトの名無しさん:2008/12/21(日) 23:32:19
どもです

760 :デフォルトの名無しさん:2008/12/22(月) 15:54:01
べたのメモリ上に二分木などを構築するライブラリやサンプルソースを
ご存知の方いないでしょうか?
メモリマップトファイル上にツリーを作って、複数のプロセスから参照したいと思っています。


761 :デフォルトの名無しさん:2008/12/22(月) 16:23:15
>>760
意味がわからん

762 :デフォルトの名無しさん:2008/12/22(月) 16:29:33
「ヒープじゃなく、指定した領域 (メモリマップトファイル) を使う
 バイナリツリーが欲しい」
以外の解釈が可能か?
いや俺は見た事ないし、書くとしたら大変そうだが。

763 :デフォルトの名無しさん:2008/12/22(月) 16:34:49
そのmmapした領域からallocとfreeをする関数を書けば
いいだけじゃないの?

各データは固定長だろうから、それこそ配列にして
使用済みかどうかのフラグを持つだけでもいいし


764 :デフォルトの名無しさん:2008/12/22(月) 16:40:25
スレチならすんません

理解しているのはC言語の基礎だけです
DOS窓で動く、ジャンケンゲーム、数当て(BIGorSMALL)、石取りゲーム
くらいは作れるようになりました
この後一体どういう学習をすれば、Windows上で動く簡単なツールなんかを作れるようになりますか?
「GUI(?)をつくりたい」って言えばいいんですかね?

環境はWinXPhome/VC++2008
Windowsフォームアプリケーション?みたいなのもやってみたんですがさっぱりです
とりあえず、ウインドウを表示して、次に画像なんかを表示して〜
みたいなものはどうやってやればいいですか?
分かりにくかったらすいません宜しくお願いします

765 :デフォルトの名無しさん:2008/12/22(月) 17:03:09
ウィンドウはOSの環境に依存する
C言語でWindowsAPIを使えばいい
Win32API,ウィンドウメッセージなんかでぐぐるといいが、
長いし(書くときはコピペするかウィザードで生成すればいいが)、少しとっつきにくいかもしれない

VCを使っているのなら、新規プロジェクト作成のウィザードから
Windowsアプリケーションを使うのもいい
どういうものを作りたいかによって選ぶべきと思う

766 :デフォルトの名無しさん:2008/12/22(月) 17:05:05
>>764
あなたの気のおもむくままに

767 :デフォルトの名無しさん:2008/12/22(月) 17:05:59
>>760
分かるには分かるが
面倒くせぇ

768 :デフォルトの名無しさん:2008/12/22(月) 17:06:45
>>765
回答ありがとうございます
Win32API?と、VCの機能を調べてみます

769 :デフォルトの名無しさん:2008/12/22(月) 20:31:59
VC++2008EEでただのCプログラムを作るにはどうすればいいですか?新規プロジェクトにはC++しかありません。

770 :デフォルトの名無しさん:2008/12/22(月) 21:44:39
C++をやっとけばいいよ
CとC++は同じものだと考えてとりあえずは問題ない
というのも、C++はbetter Cという考えがあるから

「C++ではない純粋なC」でないといけないというのは
ちょっと特殊

771 :デフォルトの名無しさん:2008/12/22(月) 21:47:21
C++ でプロジェクト作っても、
ファイルの拡張子を .c にすれば C になるはず

772 :デフォルトの名無しさん:2008/12/22(月) 22:50:56
今、ポインターを学んでるんですけど・・
なんでアドレスとか表示する意味があるんだ?
どうして、ポインターで指す必要があるんだ?
間接的にオブジェクトに代入してなんの意味がある?
ビット数の表示に意味なんてあるんだろうか?
いまやってることに、意味がない気がして・・
今、すげー・・やる気を失ってるところです・・
だれか・・元気付けてください・・

773 :デフォルトの名無しさん:2008/12/22(月) 22:55:00
>>772
すごく使うことになるのでとりあえず使い方をマスターしておけ

774 :デフォルトの名無しさん:2008/12/22(月) 22:57:09
>>772
お前の家の住所に意味はないのか?
例えば、「お前の家が見たい」って言われたとして、家ごとコピーして渡さなくても住所教えればいいだろ。そういうことだ。

775 :デフォルトの名無しさん:2008/12/22(月) 22:57:30
>>773
どう使うのか・・こう・・具体的に説明してくれるとありがたいです・・

776 :デフォルトの名無しさん:2008/12/22(月) 22:58:01
>>774
そ・・そういうことか!!!!!!!!

777 :デフォルトの名無しさん:2008/12/22(月) 22:58:52
>>772
なんでかっていうとめんどくさいからググレ
でも必要だから絶対覚えろ

・・・これは流石にひどいか

http://www7b.biglobe.ne.jp/robe/cpphtml/
ここのポインタの部分だけでもみるといいよ
C言語だったとしても内容変わらんから

778 :デフォルトの名無しさん:2008/12/22(月) 23:23:27
int c;
c=getc();

これで合ってると思うんですが、printf("c=%d", c);で表示すると入力したものじゃなくて変なのが入るんですがなぜですか?

779 :デフォルトの名無しさん:2008/12/22(月) 23:25:02
>>778
%cだ。
それだと。文字コードが表示される。

780 :デフォルトの名無しさん:2008/12/23(火) 00:01:22
>>775
100000個の要素を持った配列を渡すとき、「ちょっとこれサイズでかくね?」って思うでしょ
でもポインタ1個渡せば、あとはポインタの位置をずらしていくだけで配列を参照できるの
ねっ簡単でしょ
以上、ヴァンプ将軍のさっと簡単ハッキングでした

781 :デフォルトの名無しさん:2008/12/23(火) 02:49:18
なんだか聞きたいことがうまくまとめられてないのですが.....
先日Cの入門書を一通り学習し終えたのでwindowsアプリに手を出し始めました
しかしwindowsアプリではCの入門書でいうところの最初に学んだprintfやscanfのようなものが一切出てこず、違うものばかりです
ではそういったCの入門書ででてきてwindowsアプリの入門書では全くでてこない↑等のものはどこで使うのでしょうか?
また、書店にいくとCの関数辞典のようなものがありますがそういった書籍にのっているものも上記のようにwindowsアプリではでてこないものばかりなのでしょうか?

782 :デフォルトの名無しさん:2008/12/23(火) 02:59:31
上記のようにwindowsアプリではでてこないものばかり

783 :デフォルトの名無しさん:2008/12/23(火) 03:01:14
cはどのOSでも共通して使える言語。Windows限定の場合は、下地に使うだけ。

784 :デフォルトの名無しさん:2008/12/23(火) 03:04:27
>>781
Windowsでも一応コンソールアプリがあるけど、ふつーはprintf()とか標準入出力系の
関数は使いません。
それ以外の、ファイル入出力とか、文字種のチェックとか数学系とか時間計とかは使います。
ファイルにロックとかけるとか、ミリ秒単位で時間を扱うとか、ちょっとこった使い方をすると
WindowsのAPIとかを使うことになります。

785 :デフォルトの名無しさん:2008/12/23(火) 03:09:27
>>782-784
ありがとう、入門書で最初にやったことがいきなり不要扱いだったんで居間まで何やってたんだろう('A`)と少し不安になりました
プログラムを勉強するなら関数辞典は買っておけとよく言われるのですがこの関数辞典とは一般にC/C++のものをさすのでしょうか?

786 :デフォルトの名無しさん:2008/12/23(火) 03:17:45
>>785
そうだと思うけど、買う必要はないかな?
Cの標準関数の説明なら、ネットで探せばみつかるし。

http://www.bohyoh.com/CandCPP/C/Library/index.html

こういうやつとか。


787 :デフォルトの名無しさん:2008/12/23(火) 03:23:32
>>786
お気に入りにいれました
しかし結構何のことか全くわからん内容の関数とかあるんだなぁ・・・

788 :デフォルトの名無しさん:2008/12/23(火) 03:30:22
googleで「manpage fread」とかmanpageをつけてググると、詳細な説明がでてくる。

本を買うならリファレンスより、何とかクックブックとか何とかの技500とかみたいに、短いサンプルが
たくさん乗ってるやつのやつのほうがいいけど、オンラインでそういうやつあるかな?

789 :デフォルトの名無しさん:2008/12/23(火) 08:59:44
敵が右往左往して巡回するようにしたいのですが、なぜか右端でブルブル高速で震えているだけになっています
どうすればよいのでしょうか
敵の位置を変数「enemyposx」に入れてます

if(enemyposx<79.0)
{
enemyposx+=0.8;
}
if(enemyposx>113.0)
{
enemyposx-=0.8;
}
else
{
enemyposx+=0.8;
}

790 :デフォルトの名無しさん:2008/12/23(火) 09:09:51
113.1 -(2つ目のブロック)-> 112.3 -(3つ目のブロック)-> 113.1 -(2つ目のブロック)-> 112.3 -> ...

791 :デフォルトの名無しさん:2008/12/23(火) 10:00:28
普通は x座標とは別に、進行方向を示す変数を持つもんだよ

if( x < 79 ) diff = +0.8 ;
if( x > 113 ) diff = -0.8;
x += diff;


792 :デフォルトの名無しさん:2008/12/23(火) 10:17:59
>>780
> ねっ簡単でしょ

ボブ! ボブじゃないか!

793 :デフォルトの名無しさん:2008/12/23(火) 11:38:56
>>791
できました。ありがとうございました

794 :デフォルトの名無しさん:2008/12/23(火) 12:01:20
自分も最初はポインタの概念がよく分からなかったなw

でも解析とか始めるようになってデバッガーとか使い出してからやっと理解できたわ

795 :769:2008/12/23(火) 15:13:54
>>771
CLRオプションでコンパイルできないと言われましたがどうすればいいでしょうか?

796 :デフォルトの名無しさん:2008/12/23(火) 16:10:58
どこで聞くのが適切なのかよく分からなかったのでここで質問致します。
以下をご存じの方がいらっしゃいましたら、ご教授頂けましたらありがたいです。

環境はcygwin + g++です。将来的に linux でも使いたいと思っています。
異なる2台のHDDに各々数10GBのデータが入っています。
両方の HDD から、一度に512MB 程度づつ、データをメモリに読み込み、
逐次比較をしていくようなプログラムを作っているます。

HDD1台ごとに、一つのスレッドを作成し、スレッド内で HDD->メモリの
DMA 転送を行いつつ、dual buffer 構成にして別のスレッドで比較をしようと考えています。

HDD からメモリへDMA 転送をさせる方法を知りたいのですが、
普通に fread 文で読み込めば、勝手にDMA転送をしてくれるものなのでしょうか?

797 :デフォルトの名無しさん:2008/12/23(火) 16:16:33
>>795
プロジェクト作る時はCLRじゃなくてWin32のほうで

798 :デフォルトの名無しさん:2008/12/23(火) 16:39:58
>>796
DMA するかどうかはプログラミングの外の話じゃないかな。
それとメモリに読み込むより mmap した方が良いんじゃね?

799 :デフォルトの名無しさん:2008/12/23(火) 18:15:48
Cで
int a[n][2]という配列を作りたいのですが、

int **a;
a = (int *)malloc(n * sizeof(int *));
for(i = 0; i < n; i++){
 a[i] = (int *)malloc(2 * sizeof(int));
}

でいいのでしょうか?

800 :デフォルトの名無しさん:2008/12/23(火) 18:20:56
二つ目が決まってるなら
int (*a)[2]で確保一回で済ますというのもあるな

801 :デフォルトの名無しさん:2008/12/23(火) 18:46:49
レスありがとうございます。

int (*a)[3];
a = (int *)malloc(n * sizeof(*a));

これでいいのでしょうか?

802 :デフォルトの名無しさん:2008/12/23(火) 18:50:10
>794
Javaのほうが先にやってた俺は「参照が具体的な数値になったようなもんか」と考えたっけな

803 :デフォルトの名無しさん:2008/12/23(火) 20:15:59
ポインタはすんなり理解できたから、なんで理解できないのか、理解できない。

804 :デフォルトの名無しさん:2008/12/23(火) 21:11:49
なぜか昔からポインタで詰まる人が多いんだよね
ある程度コンピュータを知ってれば、アドレスのことでしょ?って思って
正確ではないにしろ、理解に詰まることはないんだけどね

Javaの参照とポインタは言葉通り、ちょっとニュアンスが違う。
そのあたりが"ポインタ"で詰まる理由のひとつかもね



805 :デフォルトの名無しさん:2008/12/23(火) 21:52:39
>>801
int (*a)[3];
a = (int (*)[3])malloc(sizeof(int [3]) * n);
だな

806 :デフォルトの名無しさん:2008/12/23(火) 22:20:22
visual C++2008 ......を使ってるんですが・・
プロジェクトの消去する方法がわかりません
ヘルプとかで、いろいろ探したりもしてみたんですが、わかりませんでした
どなたか、教えてください

807 :デフォルトの名無しさん:2008/12/23(火) 22:36:04
>>806
ソリューションエクスプローラーで右クリックしてメニューで削除を選ぶと削除される。

808 :デフォルトの名無しさん:2008/12/23(火) 22:39:07
おぉ、サンクス!
でも、消えない・・

809 :デフォルトの名無しさん:2008/12/23(火) 22:39:53
>>805
ありがとうございました。

810 :デフォルトの名無しさん:2008/12/23(火) 23:12:55
>>799
も間違ってるよな

811 :デフォルトの名無しさん:2008/12/24(水) 10:02:22
Visual C++を使っています。
http://www.asahi-net.or.jp/~yf8k-kbys/newcpp2.htmlのサイトにある、

//hello.cpp
#include <iostream>
using namespace std;

int main()
{
cout << "hello" << endl;
}

をコンパイルしたのですが、
MSVCRTD.lib(crtexew.obj) : error LNK2019: 未解決の外部シンボル _WinMain@16 が関数 ___tmainCRTStartup で参照されました。
C:\Documents and Settings\Owner\My Documents\Visual Studio 2008\Projects\test\Debug\test.exe : fatal error LNK1120: 外部参照 1 が未解決です。
とエラーが表示されコンパイルできません。

こんな初歩的な質問ですみませんが、どうすればコンパイルできますか?
またエラーの意味も出来れば教えてください。

812 :デフォルトの名無しさん:2008/12/24(水) 10:16:38
エラーの意味:
  「Windows アプリケーションだっていうから
   WinMain() を呼び出そうとしたら
   そんな関数なかった」
解決法:
  コンソールアプリケーションとしてプロジェクト作り直す。

813 :デフォルトの名無しさん:2008/12/24(水) 10:24:37
>>812
解決法とエラーの意味ありがとうございます!
無事コンパイルできました。

ここで疑問ですが、
win32コンソールアプリケーションとwin32プロジェクトの違いはなんなのでしょうか?
よければ教えていただきたいです。

814 :デフォルトの名無しさん:2008/12/24(水) 10:27:10
Windowsアプリケーションにはメッセージループがあるだろ

815 :デフォルトの名無しさん:2008/12/24(水) 10:28:55
>>814
返答ありがとうございます

816 :デフォルトの名無しさん:2008/12/24(水) 10:34:27
>>813
win32プロジェクトはイベント割り込みを考慮して作る
たとえば「ウィンドウを再描画してくれ」といってきたりする(以下、イベント)
このようなイベントが起きたときにどう処理するかをプログラムしていく
だが、コンソールにはイベントがない

817 :デフォルトの名無しさん:2008/12/24(水) 10:35:56
ここではイベントじゃなくメッセージというべきだったか

818 :デフォルトの名無しさん:2008/12/24(水) 10:41:08
>>816
なるほど、大まかに理解することが出来ました。
つまりは、イベントを考慮する場合はwin32プロジェクトで作れということですね
返答ありがとうございました

819 :デフォルトの名無しさん:2008/12/24(水) 11:00:20
>>811の者です。度々失礼します。
現在http://www.asahi-net.or.jp/~yf8k-kbys/newcpp3.htmlのプログラム

//hello2.cpp
#include <iostream>
#include <string>
using namespace std;

int main()
{
string name;
cout << "こんにちは。私はコンピュータです。" <<endl;
cout << "あなたの名前を入力してください。" <<endl;
cin >> name;
cout<<name<<"さん。よろしく。"<<endl;
}

をコンパイルし、
画面を表示し、入力することにも一応成功しているのですが、
名前「小林」を入力し、エンターを押すと同時に「小林さん。よろしく」の表示を見るまもなく、
表示されると同時にウインドウが消えてしまいます。
これは正常な動作でしょうか?

820 :デフォルトの名無しさん:2008/12/24(水) 11:10:59
終端まで実行すると即座に終了する
正常ですよ

821 :デフォルトの名無しさん:2008/12/24(水) 11:12:22
>>820
正常でしたか。安心しました。
回答ありがとうございます

822 :デフォルトの名無しさん:2008/12/24(水) 11:13:34
はい。あなたの反応速度が遅いだけです。

ところで、int main()と宣言しておきながらintを返さないサンプルを掲示しているような
ヘッポコサイトは参考にしない方がいいです。

823 :デフォルトの名無しさん:2008/12/24(水) 11:31:43
C99以降は (C++も?) main の終了後は 0 を戻すが
それ以前だと未定義だっけ?

>>819
デバッグなしで実行 (Ctrl+F5) すると
終了時に一時停止する。

>>822
>あなたの反応速度が遅いだけ
イミフ

824 :デフォルトの名無しさん:2008/12/24(水) 11:34:32
>>823
>>デバッグなしで実行 (Ctrl+F5) すると 終了時に一時停止する。
確かに一時停止しました!!参考になります

825 :デフォルトの名無しさん:2008/12/24(水) 18:06:50
質問です。
VC6.0時代は
for(int i = 0; i < 10; ++i)
{
//いろいろ
}
printf("%d", i);

とすることができましたが、VC9.0ではprintfのところではすでにiが無効になってしまいますよね。
これって、C/C++が昔からこだわっていた「互換性を保つ」に反している気がするのですが、どうなのでしょうか?

VC6.0時代の解釈がC++の言語仕様上間違っていたので、直したとかなんでしょうか?

826 :デフォルトの名無しさん:2008/12/24(水) 18:11:18
>>825
VC6時代にはまだ正式な規格じゃなかったから。
.NET(2002)から対応したが、デフォルトではVC6互換だった。
2005からデフォルトがISO準拠になったが、プロジェクトのプロパティのC/C++ 言語の
for ループ スコープの強制準拠をいいえにすれば同じ動作になる。

827 :デフォルトの名無しさん:2008/12/24(水) 18:14:45
>>825
C++の最初の定義ではVC6.0の仕様だった。
その後変更になった。

828 :デフォルトの名無しさん:2008/12/24(水) 18:54:22
>>826-827
ありがとうございます。
良くわかりました

829 :デフォルトの名無しさん:2008/12/24(水) 19:40:45
C言語で以下の用なプログラムを見ました。
このようなプログラムの記述でもよい?というかどういう意味なのでしょうか?
よろしくお願い致します。

1.
(kata)自作関数()
戻りの型を”()で閉じてる”上に関数との間に”スペース”がありません。
ちなみにkataには、変数でvoidが入ります。後半の()はvoid型なのに。

2.
rrom.abc[0].ddd[0]
ピリオドが二つあるのですが、これは一体何を意味しているのでしょうか?
構造体かと思いましたが、そのあとにまたピリオドがあって、構造体の構造体?

3.
struct destr s_ssss;
struct destr aaaa;

void aa_a;
void aa_b;
char dd_d;

といった文があったのですが、1行目でstructを宣言しておきながら;してる意味は?
そのあとにもまた;で終了して、次の行からは構造体の中身ともおわれしき代入があります。
{}で閉じる必要はないのでしょうか?

830 :デフォルトの名無しさん:2008/12/24(水) 19:58:03
>>829
中途半端な知識で中途半端に引用しているから、説明してもいいけど余計に混乱すると思う。
丸ごとアップローダにあげた方がいいと思う。

一応簡単に。
1.
・記号の前後のスペースなんか気にするな。殆どの場合に省略可能だ。
・「変数でvoidが入る」なんてことはない。何か勘違いをしている。

2.
・rromという構造体の実態の、メンバabcと言う構造体配列の0番目の要素のメンバdddという配列なのだろう。

3.
・1行目のそれは、そういう構造体があると言う只の宣言だ。
・3行目以降は構造体の中身ではない。引用が不充分なので、それが何かはわからない。

831 :デフォルトの名無しさん:2008/12/24(水) 21:34:22
>>830
ありがとうございます。

1.に関してということは
voidJISAKUkANSU() でもvoid JISAKUKANSU でもよいということでしょうか?

ちなみにkataは、別のヘッダファイルで void kata; なっていたのでvoidかとおもっていました。

2.
struct rrom{
abc[10]
}
strcut abc{
ddd[10]
} とかいった感じではなく

struct rrom{
abc[10]
}
abc[0] = nanka

とかいった感じなのでしょうか?この場合でも一番上が構造体だから.をつけると
理解すればよいのかな?

3.
3行目以降は本当に何行か構造体の中身みたいな感じで書かれていました。
なんでこんな書き方してるんだろうとおもってました。他の所でこの構造体
つかってた感じだったので、;をつけて下に何故かいているんだろうって

832 :デフォルトの名無しさん:2008/12/24(水) 21:46:03
>struct rrom{
>abc[10]
>}
>strcut abc{
>ddd[10]
>} とかいった感じではなく
>
>struct rrom{
>abc[10]
>}
>abc[0] = nanka
>
>とかいった感じなのでしょうか?

違う。
struct ddd_t {
/* 何か */
};

struct abt_t {
struct ddd_t ddd[10];
};

struct rrom_t {
struct abc_t abc[10];
};

rrom_t rrom;

rrom.abc[0].ddd[0]
みたいなかんじだと思われ。型と変数を混同しないように。

833 :デフォルトの名無しさん:2008/12/24(水) 22:12:19
ある構造体fooを一行でunsigned char[40]に型キャストするのは不可能でしょうか。。。
struct Foo{
(sizeofが40になる単純なデータ群)
}
をboost::serializeで使うのにいちいちserialize書くのかったるいのですorz

834 :デフォルトの名無しさん:2008/12/24(水) 22:22:34
833の者です。
質問が不誠実過ぎたと思うので加筆します
struct Foo;

void function{
Foo f;

//この下2行の文章のmemcpyする必要がないので(&uchar[0])=&Fooにしたい->型キャスト って発想なのですが。
unsigned char n[40];
memcpy(&n[0],&f,sizeof(f));
};
何か思い当たる人はご教示お願いいたします。

835 :デフォルトの名無しさん:2008/12/24(水) 22:25:04
*(char*)(&foo)

836 :デフォルトの名無しさん:2008/12/24(水) 22:26:31
ごめん >>834 読む前に買いあ

837 :デフォルトの名無しさん:2008/12/24(水) 23:35:35
>voidJISAKUkANSU() でもvoid JISAKUKANSU でもよいということでしょうか?
にほんごよめますか?
>830には、「きごうのぜんご」とかいてありますよ。


>ちなみにkataは、別のヘッダファイルで void kata; なっていたのでvoidかとおもっていました。
だから、1行ずつ切り出さないで全部貼れ。


>3行目以降は本当に何行か構造体の中身みたいな感じで書かれていました。
>なんでこんな書き方してるんだろうとおもってました。他の所でこの構造体
>つかってた感じだったので、;をつけて下に何故かいているんだろうって
自分で読み直して、説明が理解できますか?
いいから貼れ。

838 :デフォルトの名無しさん:2008/12/24(水) 23:37:44
>>833
unionならキャストの必要さえない。
が、キャストでやるならunsigned char * foo = reinterpret_cast<unsigned char *>(& f)でいい。

839 :デフォルトの名無しさん:2008/12/24(水) 23:50:38
シェルでpwdしてカレントディレクトリ表示するのと
cでgetcwd()して表示するのって何か違いがありますか?

840 :デフォルトの名無しさん:2008/12/24(水) 23:54:16
はい。実装によっては異なります。
シンボリックリンクの解釈の辺りで。

841 :デフォルトの名無しさん:2008/12/25(木) 00:07:39
>>838
単純ポインタに変換してしまうとucharが1/40しか保存されないんです><

842 :デフォルトの名無しさん:2008/12/25(木) 00:24:26
>>841
そんなことは無いと思いながら実験してみたら、やはりそんなことはなかった。

typedef struct {
int i, j;
char s[32];
} Type;

int main(void)
{
Type t;
t.i = 0xabadcafe;
t.j = 0xdeadbeef;
strlcpy(t.s, "foobar", sizeof(t.s));
unsigned char *uc = (unsigned char *)(&t);
printf("0x%x\n", *(int *)uc);
printf("0x%x\n", *(int *)(uc+4));
printf("%s\n", uc+8);
return 0;
}

$ ./a.out
0xabadcafe
0xdeadbeef
foobar

なんか別のところで間違えてるんじゃないの?

843 :デフォルトの名無しさん:2008/12/25(木) 00:32:23
>>840

なるほど、ありがとうございます。
シンボリックの扱いを実験してみることにします。

844 :デフォルトの名無しさん:2008/12/25(木) 00:32:38
>>842
一応こちらでも実験したつもりで居るのですが、
boost::serializeの仕様が関わってるのかもしれませんし、速度重視で実験コード書いたので失敗したのかもしれません。
が、ちょっと今日は時間がないので明日以降に再質問したいと思います。
ご丁寧にありがとうございましたmm

845 :796:2008/12/25(木) 00:36:01
>>798
遅くなりましたがレスをどうもありがとうございます。

>DMA するかどうかはプログラミングの外の話じゃないかな。

素人ですみません。DMA するかどうかを調べる方法を
議論するとしたら、例えばどのあたりの板が適当でしょうか?

>それとメモリに読み込むより mmap した方が良いんじゃね?

ランダムアクセスは行わずに、シーケンシャルアクセスのみで、
また、一度読んだ領域は2度と読みません。
また、HDD からの読み込みが終了しているタイミングに、別スレッドから
占有的に,、同じHDDに対して高速書き込みを行いたいと考えてますので、
mmap のように必要になった時に初めてメモリ転送を行うのではなく、
決まったタイミングに全てのデータを一気にメモリに転送してしまいたいと
考えており、fread (or read?)文が適切かなと考えています。


846 :デフォルトの名無しさん:2008/12/25(木) 00:54:19
>>845
DMAはデバイスドライバが行う。Windowsではアプリケーションから制御できない。

847 :デフォルトの名無しさん:2008/12/25(木) 01:14:50
796がDMAと呼んでいるものは、
DMAではなくlibaioとかFILE_FLAG_OVERLAPPEDとかの
非同期IOのことではないだろうか。

848 :デフォルトの名無しさん:2008/12/25(木) 01:17:07
fread使ったことないとか?

849 :796:2008/12/25(木) 01:24:03
>>846
レスをどうもありがとうございます。
linux であれば、O_DIRECT フラグをつけて
open する事により、DMA 出来る(?)ようですが、
windows の場合は、DMA を行ってくれるかくれないかは、
プログラマレベルでは全く制御できず、運任せという事でしょうか。
ファイル転送ブロック容量等を色々と変えてさまざま条件で
転送速度を計測し、各々の条件でデバイスドライバが
DMAを行ったか否かを推測して、DMAを行ってくれる条件を
試行錯誤して探してみるしかないでしょうか?



850 :796:2008/12/25(木) 01:31:01
>>847
レスをありがとうございます。
cygwin ではなく VC++ で FILE_FLAG_OVERLAPPED
を使った経験はあり、実際に速度向上を体感できていましたが、
libaio というのは全く知りませんでした。これはcygwin で使えるのでしょうか。
ぜひ勉強してみようと思います。


851 :デフォルトの名無しさん:2008/12/25(木) 01:38:11
>>849
君が言ってるDMAって、誰に教えてもらったの?

852 :796:2008/12/25(木) 01:46:30
別に誰に教えてもらったわけでもないですが。。
1 TB×16 台(16TB) の RAID0 に 2Gbps の速度で
高速アクセスを行うようなハードウェア+アプリケーションを作成しており、
可能な限り高速なアクセスをしたいと考えております。
DMA 転送は、DSP やFPGA のアプリケーションで扱った経験は
ありますが、PC 上で確実にDMAを行いたいという経験は
初めてです。


853 :デフォルトの名無しさん:2008/12/25(木) 01:59:00
今時のパソコンなら、HDDアクセスはDMA転送してるんじゃないの、ドライバが?

854 :デフォルトの名無しさん:2008/12/25(木) 02:11:21
>>849
> O_DIRECT
それはやっぱりDMAとは呼ばない。
間にディスクキャッシュを噛ませないという意味でしかない。
ちなみにWindowsだとFILE_FLAG_NO_BUFFERINGが近い。

O_DIRECTがなくても、ディスクとOSキャッシュのメモリとの間の転送はDMAが使われる。
DMAなんてものは1アプリケーションが介入する領域の話ではない。

DMAがされるかどうか確認・設定したいなら、
WindowsではデバイスマネージャでATAコントローラのところを見ればいい。
もちろん可能ならDMA有効が初期設定、不可能なものなんて今時存在しないだろ。

855 :796:2008/12/25(木) 02:30:37
>>853
>>854
レスどうもありがとうございます。大変勉強になります。
理論値よりもだいぶ遅かったので、DMA できていない事が原因なのかなと
思いこんでいたのですが、別の原因で遅くなっているのかもしれませんね。

>O_DIRECTがなくても、ディスクとOSキャッシュのメモリとの間の転送はDMAが使われる。

OSキャッシュという概念がよくわかっておらず恐縮ですが、
O_DIRECTがなくても、DMAは必ず行われ、CPU の2次キャッシュや3次キャッシュは
汚染されないという理解でよろしいでしょうか?

とりあえず、
1.ディスクキャッシュを使用せず
2.非同期 I/O を用いる
という方法が考えうる最速の方法という事でしょうか?
可能であれば、cygwin でwindows/linux のマルチプラットフォームに対応したいと
考えていましたが、各々の OS で固有の API を使うしかないという事のようですね。


856 :デフォルトの名無しさん:2008/12/25(木) 02:36:03
if (suuti > 100){

printf("100以上なので修正します\n");

suuti = 100;
}
printf("数値は%dです\n",suuti);

100以上の数字を入力してもメッセージを表示してくれません

何か間違ってるのでしょうか・・?

857 :デフォルトの名無しさん:2008/12/25(木) 02:39:23
>>855
なんかキミ、用語だけは知ってるけど全然理解してないみたいだね。
本読んで勉強してきなよ。

858 :796:2008/12/25(木) 02:45:05
>>857
すみません。。元々ハードウェア設計が専門で正直、PCは
あまり詳しくありません。cygwin を使うのも初めてです。
具体的に855のどのあたりが致命的に間違っている点でしょうか?

859 :デフォルトの名無しさん:2008/12/25(木) 02:49:15
>>856
きっと間違ってるんでしょうね
どっかが

860 :デフォルトの名無しさん:2008/12/25(木) 06:36:50
>>858
CPUのキャッシュがどういう性質のものかも理解できていないじゃん。

>>856
100を超える比較しかしていないから、100を入力してもメッセージは出ないね。

861 :デフォルトの名無しさん:2008/12/25(木) 06:52:34
(kata)自作関数()

本来ならこのkataにはどういったものがはいるのでしょうか?

862 :デフォルトの名無しさん:2008/12/25(木) 06:53:50
>>861
断片を貼られてもなんとも言えません。いい加減大人しく全体を提示するか、さもなければお帰りください。

863 :デフォルトの名無しさん:2008/12/25(木) 07:32:11
教科書をじっくり時間をかけて読む事をお勧めする

864 :デフォルトの名無しさん:2008/12/25(木) 07:33:38
>>862
全体は個人的なものじゃないので無理なのです・・・
考えられるパターンとしてはやっぱり戻り方では?

865 :デフォルトの名無しさん:2008/12/25(木) 07:41:03
>>864
にほんごよめますか?
>862には「かえれ」、>863には「きょうかしょをじっくりよめ」とかいてあります。

866 :デフォルトの名無しさん:2008/12/25(木) 07:56:49
手を隠したまま手相を見てもらおうとするようなもので
それはもう常人ではなくエスパーに頼むしかない

867 :デフォルトの名無しさん:2008/12/25(木) 08:15:44
携帯から失礼します
自分は最近C++に手を出し、今classで止まってます
本当に基礎の概念
classは設計図みたいなものである
と言うことやコンストラクタ、デストラクタ、メンバ変数
くらいは理解したのですが、ここから先(プロパティ、継承)などが理解できません

使い道が分かればもう少し理解が深まると思うのでどなたか、「なるほど、これは確かにclassと言う概念が必要だな」
と思うようなソースなり、コピペなり、ありましたら教えてください

例えば関数なら、何度も使うような処理を複数回書かないため
とか
マクロなら、あとで値の変更が容易なのと、見通しをよくするため
とか

色々「なるほどこれは必要だな」と思える理由があります。
しかしclassに関しては何も見えてこないんです
よろしくお願いします

868 :デフォルトの名無しさん:2008/12/25(木) 08:35:02
継承は置いておいて、クラスに関して簡単に。

例えば何かのアプリケーションがあり、それには複数の設定があるとする。
そのアプリの実装において、設定ファイルがどういう構造かは決定的ではない場合、
しかも一箇所では一部のデータのみを読み書きしたい場合、
普通は設定の一部のみを読み書きする関数を用意すると思う。
しかし、データの管理を呼び出し側に委ねることになる。
クラスにしておけば、データ構造を隠蔽することができるので、
呼び出し側にデータの管理を任せることなく密かに管理できると言う次第。

869 :デフォルトの名無しさん:2008/12/25(木) 08:37:41
>>867
例えばMFCでは
ウィンドーを作るだけのCWndクラスがあって
それを継承して表示用のクラスCViewが作られる
CViewを継承してCScrollViewクラスやCListViewクラスなどが作られる
こうすればCListViewを作るときウィンドー関係や表示関係の処理を複数回書かなくてすむし見通しも良くなる
(ここでいうウィンドーはボタンやテキストボックスやバーなどの表示単位のこと)


870 :デフォルトの名無しさん:2008/12/25(木) 08:47:15
>>867
まずオブジェクト指向を学びたまえ
そしてJavaやC#やVBへと旅立つのだ

871 :デフォルトの名無しさん:2008/12/25(木) 08:52:34
>>867
カプセル化とか多態性とかいろいろ利点はあるんだけれども、
はじめのうちはデータと関数を一緒に管理できる、ってとこかな
囲碁のプログラムを作っているとして、駒を置く・目の数を数える、等の
盤面のデータ(int board[15][15]みたいな)を引数にとって何か仕事をする関数をたくさん作ると思うが、
それなら盤面のデータもそれに付随する関数もclassの中に取り込んでしまえば、管理が楽になる。

872 :デフォルトの名無しさん:2008/12/25(木) 11:48:07
>>858
個々の技術は知っているようだが、PCという括りじゃなくて、(OSを含む)コンピュータ
システムの全体像をを理解していない。
各々の技術が「記憶階層」のどの位置にあたるのか調べて理解してから出直しなさい。

873 :デフォルトの名無しさん:2008/12/25(木) 11:57:16
大した事言ってないのに偉そうにしとるな

874 :デフォルトの名無しさん:2008/12/25(木) 11:59:39
うん、基本的な事知らないの奴に無料で詳しく教えるほど暇ではないのだ。
「記憶階層」からたどれば必要な項目は手繰れる。

875 :デフォルトの名無しさん:2008/12/25(木) 12:39:22
言葉に騙されてる感じ

876 :デフォルトの名無しさん:2008/12/25(木) 13:10:43
C++でなんか作りたいんだが良いプログラムのアイディア教えてくれ

877 :デフォルトの名無しさん:2008/12/25(木) 13:29:14
int *p;
p = malloc(sizeof(int));
*p = 1;

p = realloc(p, sizeof(int) * 2);


こうするとp[0]には1が入っててp[1]で2番目を参照できる、でおk?

878 :デフォルトの名無しさん:2008/12/25(木) 13:41:22
>>876
ずばーんとDYNAMICでどかーんとIMPACTがあって
ずきゅーんとHeartをゆさぶるDreamなソフト

とりあえずP2Pで匿名を謳(騙)っておけば脳タリン厨房は釣れそうだぜ

879 :デフォルトの名無しさん:2008/12/25(木) 13:51:56
>>877
pがNULLでなければOK

880 :デフォルトの名無しさん:2008/12/25(木) 14:09:00
>>879
d
reallocの取っ掛かりが掴めた

881 :デフォルトの名無しさん:2008/12/25(木) 14:31:58
>867
そうだなぁ…例えば、こんなのとか?
#include <vector>
#include <iostream>
class MyObject {
public:
virtual void method() = 0;
};
class MyObjectA : public MyObject {
public:
void method() {
std::cout << "A" << std::endl;
}
};
class MyObjectB : public MyObject {
public:
void method() {
std::cout << "B" << std::endl;
}
};
void func(std::vector<MyObject *> &objects) {
for(int i=0; i<objects.size(); i++) {
objects.at(i)->method();
}
}

882 :デフォルトの名無しさん:2008/12/25(木) 16:30:18
while(1)
printf( "どかーん\n" );

883 :デフォルトの名無しさん:2008/12/25(木) 18:31:25
#include <stdio.h>

int main(void)
{
int i;
for (i = 1;i <= 10;i++) {
printf("メッセージ\n");
}
return 0;

このプログラムの中に1ってあるじゃないっすか
この1ってただの綴りみたいなものなんですか?
それともほかの数字とか入れたりしちゃうんでうすか?
なんか、そこんとこ解っとかないと前に進めません!!

884 :デフォルトの名無しさん:2008/12/25(木) 18:44:06
ググらない
調べない
やることもしない
試しもしない
感謝の言葉もない

885 :デフォルトの名無しさん:2008/12/25(木) 18:46:17
そういう人に私はなりたい

886 :デフォルトの名無しさん:2008/12/25(木) 19:00:55
という気がしたという夢を見た

887 :デフォルトの名無しさん:2008/12/25(木) 19:59:25
>883
そのコードの場合、やりたいことが単に10回繰り返すだけだから
開始番号の1と終了条件の10自体に特に意味はなく
10回繰り返せるように開始番号と終了条件が設定されていれば良い。
for(i=0; i<10 …としてもちゃんと10回繰り返すことになるから
「そのコードに限っては」1や10という数字自体に特に意味はない。

ただ、そのループの中で i の値を利用する場合には事情が違ってくる。
i の値を利用出来るように適切な開始番号と終了条件を設定することになるだろう。

888 :デフォルトの名無しさん:2008/12/25(木) 20:03:06
>>887
ほぉほぉ・・・

サンクス☆



889 :デフォルトの名無しさん:2008/12/25(木) 21:22:08
main(){}

↑このプロ負らむのを時に、言われましたが、何かいい方法?が?

890 :デフォルトの名無しさん:2008/12/25(木) 21:25:53
日本語でおk

891 :デフォルトの名無しさん:2008/12/25(木) 22:58:53
俺は
int main(){return 0;}
にして、起動元のOSに正常終了したことを返したい。

まあ、これより先は宗教戦争。

892 :デフォルトの名無しさん:2008/12/25(木) 23:00:11
Cの次期規格ではreturn 0を省略できるんだっけ?

893 :デフォルトの名無しさん:2008/12/25(木) 23:03:40
現規格でできる。

894 :デフォルトの名無しさん:2008/12/25(木) 23:05:29
宗教論争っていうか、return 0を省略できるのを知らないで、人に書けって
指摘してたけど、それ省略できるよって揚げ足取られて、暴れだす人とかは
何度もみてる。

895 :デフォルトの名無しさん:2008/12/25(木) 23:06:40
旧規格でも問題ないな。
警告出すコンパイラはあるけど。

896 :デフォルトの名無しさん:2008/12/25(木) 23:11:07
>>894
VC6 とか対応してないし、古いコンパイラ対策として書いた方がいい場合もある。

>>895
確かに省略はできるなw
何が帰るかは分からないが。

897 :デフォルトの名無しさん:2008/12/25(木) 23:19:11
>>894
省略できるって言うけど、どういう状況でそう言えるのか、言わないあんたもどうかと。
値を返す必要の無い関数なら必要ないが、値を返す場合、何かしら return 値 を書かないと
コンパイラが警告を出すし、関数が返す型を指定しておいて値を返さないのはおかしいし。
あと、mainに関しては、ANSI、ISO準拠ではプログラムの開始が main とし、
int型の値を返すスタイルを推奨しているから、int main(void) return 0; が標準”スタイル”
とされているが。その辺も、それを使うか使わないかは人それぞれだが、
筋を通すなら必要なコードは書くべき。

898 :デフォルトの名無しさん:2008/12/25(木) 23:20:25
>>889 は何を言ってるか意味分からんけど、
まあ、それみたいに掲示板とかに貼る書き捨ての数行のとかのコードとかは
return を省略したりするんだけど、それにいちいち >>891 みたいに
ツッコミ入れてくる奴がいるんだよ。
>>891 はちがうけど、ムダにあおり気味に。

で、それにreturn 書かなくてもいいだろって、揚げ足をとってやると、
「書くべきだ」とか、暴れだすってのがいつもの流れっていうか。

それは宗教論争じゃないだろって。

899 :デフォルトの名無しさん:2008/12/25(木) 23:24:59
>>897
ちょっと文章から読めないんで違ったら悪いんだが、
ここで 「省略できる」って言ってるのは、一般の関数とか
たまたま省略しても問題ない、というケースの話じゃなくて、
プログラムが正常終了する場合は main の return は省略
してもよいって規格で正式に定められてるっていう意味だよ?

900 :デフォルトの名無しさん:2008/12/25(木) 23:39:31
移植性考えると納得いかなくても書かざるを得ないというのはもう結論出てるだろう。
規格は所詮規格。まともに実装されてないこともあるわけで。

901 :デフォルトの名無しさん:2008/12/25(木) 23:44:28
移植性は関係ないだろ。

902 :デフォルトの名無しさん:2008/12/25(木) 23:48:17
そういえば、移植性を考えるならreturnよりexit()で返すべきとかって議論もみたことあるな。
詳細はわすれたけど。

903 :デフォルトの名無しさん:2008/12/26(金) 14:33:29
性別を選択するだけで好きなものがわかるプログラム作成してみました

#include <stdio.h>
int main (void)
{
int mange;
printf("男性なら0、女性なら1を入力してね: ");
scanf("%d",&mange);
switch (mange) {
case 0:
printf("まんこ大好き!!\n");
for (;;){
printf("%d←マンコ好き度\n",mange);
mange++;
}
break;
case 1:
printf("ちんこ大好き!\n");
for (;;){
printf("%d←ちんこ大好き度\n",mange);
mange++;
}
break;
default:
printf("きもい\n");
break;
}
return 0;
}

904 :デフォルトの名無しさん:2008/12/26(金) 14:43:51
改行しないバージョン
printf("%10d←マンコ好き度\r",mange);


905 :デフォルトの名無しさん:2008/12/26(金) 14:50:58
で、質問は何だ

906 :デフォルトの名無しさん:2008/12/26(金) 15:11:45
TCHAR szPath[MAX_PATH

szPathのszはどういう意味?


907 :デフォルトの名無しさん:2008/12/26(金) 15:28:26
string zero terminated じゃね?

908 :デフォルトの名無しさん:2008/12/26(金) 17:23:52
>>903
子供すぐる

909 :デフォルトの名無しさん:2008/12/26(金) 17:24:04
* bBusy : boolean
* cApples : count of items
* dwLightYears : double word (systems)
* fBusy : boolean (flag)
* nSize : integer (systems) or count (application)
* iSize : integer (systems) or index (application)
* fpPrice: floating-point
* dbPi : double (systems)
* pFoo : pointer
* rgStudents : array, or range
* szLastName : zero-terminated string
* u32Identifier : unsigned 32-bit integer (systems)
* stTime : clock time structure
* fnFunction : function name

* pszOwner : pointer to zero-terminated string
* rgfpBalances : array of floating-point values

* hwndFoo : handle to a window
* lpszBar : long pointer to a zero-terminated string

* g_nWheels : member of a global namespace, integer
* m_nWheels : member of a structure/class, integer
* m_wheels : member of a structure/class
* s_wheels : static member of a class
* _wheels : local variable


910 :デフォルトの名無しさん:2008/12/26(金) 17:45:22
参考になる

911 :デフォルトの名無しさん:2008/12/26(金) 20:31:37
自作関数がうまくいかない・・・・・

プロトタイプガンダムとかも・・うまくいかない・・

912 :デフォルトの名無しさん:2008/12/26(金) 20:59:20
>911
「うまくいかない」だけでは何がどう上手くいかないのか判らないよ。
・上手くいかないコード
・どう上手くいかないのか
(本来こうなって欲しいのにこうなってしまう、という内容
 エラーメッセージがあるならそれを貼る)

913 :デフォルトの名無しさん:2008/12/26(金) 21:14:22
>>912
すいません(´・ω・)

#include <stadio.h>

int main(void)
{
return 0;
}

int sum(void)
{
printf("FOOOO");
return 0;
}
コンパイルしても

c:\documents and settings\yuji\my documents\visual studio 2008\projects\自由だああああ\自由だああああ\自由だあああああああああ.cpp(1) : fatal error C1083: include ファイルを開けません。'stadio.h': No such file or directory
とエラーが表示されます・・

914 :デフォルトの名無しさん:2008/12/26(金) 21:16:55
#include <stadio.h>

#include <stdio.h>

915 :デフォルトの名無しさん:2008/12/26(金) 21:17:04
スタジオのスペルはstudio

916 :デフォルトの名無しさん:2008/12/26(金) 21:30:17
>>914-915

         ナ ゝ   ナ ゝ /    十_"    ー;=‐         |! |!
          cト    cト /^、_ノ  | 、.__ つ  (.__    ̄ ̄ ̄ ̄   ・ ・
ミミ:::;,!      u       `゙"~´   ヾ彡::l/VvVw、 ,yvヾNヽ  ゞヾ  ,. ,. ,. 、、ヾゝヽr=ヾ
ミ::::;/   ゙̄`ー-.、     u  ;,,;   j   ヾk'! ' l / 'レ ^ヽヘ\   ,r゙ゞ゙-"、ノ / l! !ヽ 、、 |
ミ/    J   ゙`ー、   " ;, ;;; ,;; ゙  u ヾi    ,,./ , ,、ヾヾ   | '-- 、..,,ヽ  j  ! | Nヾ|
'"       _,,.. -─ゝ.、   ;, " ;;   _,,..._ゞイ__//〃 i.! ilヾゞヽ  | 、  .r. ヾ-、;;ノ,.:-一'"i
  j    /   ,.- 、  ヾヽ、 ;; ;; _,-<  //_,,\' "' !| :l ゙i !_,,ヽ.l `ー─--  エィ' (. 7 /
      :    ' ・丿   ̄≠Ξイ´,-、 ヽ /イ´ r. `ー-'メ ,.-´、  i     u  ヾ``ー' イ
       \_    _,,......::   ´゙i、 `¨ / i ヽ.__,,... '  u ゙l´.i・j.冫,イ゙l  / ``-、..- ノ :u l
   u      ̄ ̄  彡"   、ヾ ̄``ミ::.l  u   j  i、`ー' .i / /、._    `'y   /
              u      `ヽ  ゙:l   ,.::- 、,, ,. ノ ゙ u ! /_   ̄ ー/ u /
           _,,..,,_    ,.ィ、  /   |  /__   ``- 、_    l l  ``ーt、_ /  /
  ゙   u  ,./´ "  ``- 、_J r'´  u 丿 .l,... `ー一''/   ノ  ト 、,,_____ ゙/ /
        ./__        ー7    /、 l   '゙ ヽ/  ,. '"  \`ー--- ",.::く、
       /;;;''"  ̄ ̄ ───/  ゙  ,::'  \ヾニ==='"/ `- 、   ゙ー┬ '´ / \..,,__
、      .i:⌒`─-、_,....    l   /     `ー┬一'      ヽ    :l  /  , ' `ソヽ
ヾヽ     l      `  `ヽ、 l  ./  ヽ      l         )  ,; /   ,'    '^i


917 :デフォルトの名無しさん:2008/12/26(金) 21:33:27
自作関数はmain関数に埋め込む部品と考えたらいいのでしょうか(´・ω・)?

918 :デフォルトの名無しさん:2008/12/26(金) 21:54:59
>>917 そういう場合もあるだろうね。それだけじゃないけど。

919 :デフォルトの名無しさん:2008/12/26(金) 22:16:58
>>ユージ君
君にはプログラミングにとって重要な素養が欠けているようだ。それは、注意深さだ。

920 :デフォルトの名無しさん:2008/12/26(金) 23:28:08
C言語でソケットについて学びたいとおもっております
初心者が学ぶに最適な本をいくつかありませんか?

921 :デフォルトの名無しさん:2008/12/26(金) 23:31:49
シューティングゲームを作ろうと思っています。
自機や弾などの画像はメインウィンドウにそのまま貼り付けるよりサブウィンドウに貼り付けて
サブウィンドウをメインウィンドウ上で動かしたほうが当たり判定等が楽になったりしないかな?と思ったんですが、
どう実装するのが一般的なんですか?

922 :デフォルトの名無しさん:2008/12/26(金) 23:38:43
最近は 2D のゲームでも DirectX の 3D 機能使って実装するのが一般的。

923 :デフォルトの名無しさん:2008/12/27(土) 00:24:43
>>919
ユージ・・君・・・って・・誰?

924 :デフォルトの名無しさん:2008/12/27(土) 00:33:41
>>923
あんたも注意力が足りない。
>c:\documents and settings\yuji\my documents\

925 :デフォルトの名無しさん:2008/12/27(土) 00:37:05
そ・・そういうことか!!
マジで誰かに見張られてるかと思って死ぬかと思った・・(´・ω・)

926 :796:2008/12/27(土) 02:24:08
>>860
>CPUのキャッシュがどういう性質のものかも理解できていないじゃん。

DMA(HDD->DRAM直接転送)時は、CPU を経由しないのでCPU上のキャッシュメモリは
更新されないが、DMA が行われない場合は HDD → CPU → DRAMという経路を通るので
CPU から DRAM への書き込み時にCPUのキャッシュメモリが更新されるという理解でいますが、
間違ってますでしょうか?
CPU から DRAM への書き込み時にSSE のキャッシュ制御命令(PREFETCHT0等)で
意図的にキャッシュオフをする事も機能的にはできますが、通常、メモリに
書き込んだデータはすぐにCPUで使われる場合が多いので、通常そのような
実装はせずに、むしろ積極的にプリフェッチを利用しているものと理解していました。


927 :921:2008/12/27(土) 04:29:22
>922
2DのゲームはAPI使って実装してるものとばかり思っていました。
DirectXと言うことはサブウィンドウを作らずにメインウィンドウにテクスチャを貼り付けているのでしょうか?

928 :デフォルトの名無しさん:2008/12/27(土) 11:09:26
>913
#include <stadio.h>

#include <stdio.h>
の間違いだよな?間違いだと言ってくれ!

929 :デフォルトの名無しさん:2008/12/27(土) 11:23:47
俺もずっとスタジオの略だと思っていた15の夏

930 :デフォルトの名無しさん:2008/12/27(土) 11:28:00
#include <studio.h> と慣れない頃はよくtypoした思い出

931 :デフォルトの名無しさん:2008/12/27(土) 11:30:31
俺エスティー・ディオって呼んでた
スタンダード・アイオーか
通りすがりだがすごい収穫!

932 :デフォルトの名無しさん:2008/12/27(土) 11:56:15
あんたら、標準入出力を英語でなんと言うか考えてもみなかったの?

933 :デフォルトの名無しさん:2008/12/27(土) 12:12:52
標準出力とかそういう知識以前にC言語を勉強する場合が多いよな

934 :デフォルトの名無しさん:2008/12/27(土) 12:16:41
某オープンソースのライブラリを使ってて、それは基本的に
C言語のライブラリなんだがC++のラッパーもある。

で、そのC++のラッパーがファクトリパターンみたいに
 Foo::create
でポインタを返しておいて、利用者側でdeleteしろという仕様なんだが・・・
これはクソ仕様という認識でいいよな。
あるいは、C++の場合はコンパイラが違ったらどっちにしろリンクできないから、
必ずコンパイラは同じだという確信犯でやってるのか?
自分でC++ラッパ書くしかないなーと思ってるけど、このあたり実際どうなん?


935 :デフォルトの名無しさん:2008/12/27(土) 13:29:01
>>927
おそらくこれ以上はスレ違い
DirectXスレかゲーム製作スレ(板?)へどうぞ

936 :デフォルトの名無しさん:2008/12/27(土) 13:47:28
>933
標準ライブラリをいくつか覚えれば、std〜で始まるライブラリが沢山あるから気付くんだけどな
stdioはライブラリのことをろくすっぽ覚えない内から使うからスタジオとか間違える奴が結構居るね

そして俺も小坊の頃は確かにスタジオだと思っていた

937 :デフォルトの名無しさん:2008/12/27(土) 13:54:24
stdで始まるライブラリってどんなのがあったっけ?

938 :デフォルトの名無しさん:2008/12/27(土) 14:12:50
stdio, stdlib, stdargの各インクルードファイルのことを言いたいのだと思われ。

939 :デフォルトの名無しさん:2008/12/27(土) 15:16:02
stddef「私のことも忘れないで…」

940 :デフォルトの名無しさん:2008/12/27(土) 17:45:35
すません
opendir,readdir,closedirを使って
引数で指定したディレクトリにある画像ファイルをすべて読み込むプログラムを作っています

読む込む部分はコーディング済みで、load_image_data()とします

int main( int argc, char *argv[] )
{
DIR *dir; /* ディレクトリ情報を示すためのポインタ */
struct dirent *dp; /* 各エントリの情報を示すための構造体ポインタ */
char path[512];

if( argc <=1 ) {
strcpy( path, "." );
} else {
strcpy( path, argv[1] );
}
if(( dir = opendir(path) ) == NULL ){
perror("opendir");
exit(-1);
}
for(dp=readdir(dir);dp!=NULL;dp=readdir(dir)){
load_image_data(dp->d_name);//読む込む
}
closedir(dir);
}

こんな感じでやろうとおもってるのですが、読み込む際、
指定ディレクトリではなくカレントディレクトリの走査になってしまいます。
ググってみたのですが、指定ディレクトリのファイル一覧表示はよくみかけるのですが、
読み込むのは見つかりませんでした、アイデアだけでもご教授ねがえませんか

941 :デフォルトの名無しさん:2008/12/27(土) 17:46:41
chdir ?

942 :デフォルトの名無しさん:2008/12/27(土) 17:52:54
load_image_data()
にディレクトリとファイル名、2つを渡す感じですか?

943 :デフォルトの名無しさん:2008/12/27(土) 18:43:03
>>942
path と dp->d_name を '/' で結合しなきゃ。
load_image_data 内でやっても、呼び出し元でやってもいいけど。

944 :940=942:2008/12/27(土) 19:24:33
考えながら自力で組むのはしんどいですね
がんばってみます
ありがとー

945 :デフォルトの名無しさん:2008/12/27(土) 19:29:42
引数ってあんまり意味内容な気がする・・

946 :デフォルトの名無しさん:2008/12/28(日) 00:50:55
エログッズ「おっぱいがいっぱいセット」お届けで〜す (夕刊フジ)

通販を愛用するエログッズ・マニアが戦々恐々だ。
エロいマウスパッドの購入者に対し、恥ずかしすぎる商品名が明記されたままの梱包箱が送られていたことが、購入者からのクレームで25日、明らかになった。
妻や同棲中の彼女に内緒で、単なるマウスパッドとして購入したはずの宅配便。
到着の瞬間が、とんだ悪夢となってしまった。
「おっぱいがいっぱいセット」(1万5000円)の購入者のもとに届いた箱に、商品名がストレートに明記されていたのだ。

この商品は、いわば「立体型エロマウスパッド」。
ゲームソフトメーカー「AKABEi SOFT2(あかべぇそふとつぅ)」(福岡市)が、ファンクラブ限定の代金引換通販で販売。
手首を固定するパッド下部が、弾力のある少女の胸の谷間や尻の割れ目になっており、妄想と実用性を満たす画期的アイテムとして話題となっていた。

24日、購入者のクレームで事態が発覚。このテの商品は通常、中身がわからないような内容表示になっている。
発売元はHPで「一企業として管理意識の低さを大変恥ずかしく思っております」と謝罪したが、たちまちエロゲーム愛好者が集まるサイトで知れ渡り、格好のネタになった。


947 :デフォルトの名無しさん:2008/12/28(日) 00:51:23
スマートポインターを7種類も8種類も作って、C++の言語設計者って馬鹿なの?

これを用途によって間違わずに使い分けるより、new-deleteの対応付けをきっちりやる方が余程簡単だっつーのw
ホント馬鹿だな。

948 :デフォルトの名無しさん:2008/12/28(日) 00:53:57
で、質問は?」

949 :デフォルトの名無しさん:2008/12/28(日) 00:59:14
「馬鹿なの?」が質問でしょ。

でも、スマートポインターの設計者とC++の言語設計者は別なので、
的外れの質問をしてる>>947が馬鹿。救いようの無い馬鹿。

950 :デフォルトの名無しさん:2008/12/28(日) 00:59:34
安い釣りに釣られるなよ

951 :デフォルトの名無しさん:2008/12/28(日) 01:12:31
>>947
あなたのような頭の良い人には smart pointer は必要無いですから使わないでください。

952 :デフォルトの名無しさん:2008/12/28(日) 05:05:19
最適化されない型ってなんだったっけ?
voli... なんとかだった気がするけど・・・

953 :デフォルトの名無しさん:2008/12/28(日) 05:15:35
^Hatile

954 :952:2008/12/28(日) 05:15:57
く、わぃっけっつ〜

955 :デフォルトの名無しさん:2008/12/28(日) 10:10:17
なんでVisualC++のコンソールって勝手に終了しちゃう不親切な設計なわけ?
getchar();を標準でしてくれればいいのに。

956 :デフォルトの名無しさん:2008/12/28(日) 10:17:01
>>955
「デバッグ開始」で実行するならブレークポイントくらい設定してるだろうし
「デバッグなしで開始」なら止まらないだろうからプログラム終了時に pause が入る。

957 :デフォルトの名無しさん:2008/12/28(日) 10:17:50
デバッグしてるのに途中でとめないなんて普通ないからな

958 :デフォルトの名無しさん:2008/12/28(日) 10:35:11
プログラムから制御することを考える
標準で入っていない: 止める/止めないは標準入出力で簡単に制御できる。
標準で入っている: 止める/止めないは特殊なAPIを呼ぶ必要がある。

前者の方が圧倒的にシンプル

959 :デフォルトの名無しさん:2008/12/28(日) 11:03:04
>>955
君向いてないよ

960 :デフォルトの名無しさん:2008/12/28(日) 11:10:18
そもそもVisualC++のコンソールなんていう特殊なものはない。

961 :デフォルトの名無しさん:2008/12/28(日) 11:17:35
VisualC++のコンドームなら俺のコンソールにあるよ

962 :デフォルトの名無しさん:2008/12/28(日) 11:41:25
2日間悩み続けてやっと引数を理解しました

963 :デフォルトの名無しさん:2008/12/28(日) 14:31:55
関数から数値を返す意味なんてあるんでしょうか・?
関数に数値を渡すのと同じ計算結果になるし、意味ないような気がします

964 :デフォルトの名無しさん:2008/12/28(日) 14:32:50
>963
同じ?何と何が同じなんだ

965 :デフォルトの名無しさん:2008/12/28(日) 14:35:35
>>963
何が言いたいのかわからん。関数から数値返さないで関数で計算する
簡単な例出してみて。できることはできるよ。


966 :デフォルトの名無しさん:2008/12/28(日) 14:44:10
>>963
C/C++ でいう「関数」は、数学的な意味での関数ではない。
(最初に「関数」と訳した奴がすべて悪い)
なので
>関数に数値を渡すのと同じ計算結果になる
という保証はない。

967 :デフォルトの名無しさん:2008/12/28(日) 14:45:05
>>963
だったら使わなければいいと思います

968 :デフォルトの名無しさん:2008/12/28(日) 14:47:13
飛べない翼に意味はあるのでしょうか?

969 :デフォルトの名無しさん:2008/12/28(日) 15:36:05
今、苦しんで覚えるC言語というサイトを見ているんですが
関数に数値を渡す
#include <stdio.h>

int sum(int,int); /* プロトタイプ宣言 */

int main(void)
{
sum(50,100);
return 0;
}

int sum(int min,int max)
{
printf("%d\n",(min + max) * (max - min + 1) / 2);
return 0;
}


970 :デフォルトの名無しさん:2008/12/28(日) 15:37:58
関数から数値を返す
#include <stdio.h>

int sum(int,int); /* プロトタイプ宣言 */

int main(void)
{
int value;
value = sum(50,100);
printf("%d\n",value);
return 0;
}

int sum(int min,int max)
{
int num;
num = (min + max) * (max - min + 1) / 2;
return num;
}


計算結果が同じ3825になるし

なんで返さなきゃいけない必要があるのか解らないです

971 :デフォルトの名無しさん:2008/12/28(日) 15:40:50
値を返さない方は画面表示にしか使えないが、
返す方はそれをまたさらに加算したりできるだろ。

972 :デフォルトの名無しさん:2008/12/28(日) 15:46:12
>>971

そ・・そうか!!!
ありがとうございます!

973 :デフォルトの名無しさん:2008/12/28(日) 16:26:50
1の2乗 + 2の2乗 + 3の2乗 + ・・・ + nの2乗が2000を超えるときのnの値と、
そのときの合計を求めるプログラムをwhileを使って作りなさい。


974 :デフォルトの名無しさん:2008/12/28(日) 16:31:18
>>973
分かった

975 :デフォルトの名無しさん:2008/12/28(日) 17:31:17
2乗のしかたがわからない・・

976 :デフォルトの名無しさん:2008/12/28(日) 17:33:29
x * x

977 :デフォルトの名無しさん:2008/12/28(日) 17:47:54
>973みたいな問題出す奴って、馬鹿か間抜けかどっちかなんだろうな。
1行目は「1の2乗+……が」というように式をそのまま提示しているのに2行目では「そのときの合計」と書いている。
1行目がそのままなら2行目では「そのときの値」で充分だし、
2行目を「そのときの合計」としたいのなら1行目は「1の2乗+……の合計が」とでもするべきだ。
尤もそれなら、「この数式のn項までの合計」とでもした方が余程間違いのない表現だと思うが。

何も考えずにこんな表現を使ったのならば只の馬鹿だし、考えた上でこの表現になったのなら間抜けだ。

978 :デフォルトの名無しさん:2008/12/28(日) 18:14:10
頭が爆発しそうだ・・・
難しい・・難しすぎる・・!!

979 :デフォルトの名無しさん:2008/12/28(日) 18:30:31
>>977
教科書に書いていた通りに書いた

980 :デフォルトの名無しさん:2008/12/28(日) 18:46:02
答えください

981 :デフォルトの名無しさん:2008/12/28(日) 19:53:50
>>958
release 時は実行後に pause コマンドを呼んでくれている。
これをデバッグ版でも呼べるようにするオプションくらい
つけてくれてもバチはあたらんと思うんだがね。

982 :デフォルトの名無しさん:2008/12/28(日) 19:53:57
え、俺?

983 :デフォルトの名無しさん:2008/12/28(日) 20:13:24
宿題はよそで。

984 :デフォルトの名無しさん:2008/12/28(日) 20:28:16
デバッグ時は終了したらさっさとコード書き換えたいのに
いちいち止まる方が面倒だ

なんで結果が見たいのにデバッグで実行するんだ

985 :デフォルトの名無しさん:2008/12/28(日) 21:08:25
C++でおすすめの開発環境はなんですか?OSはWinXP SP2です。
CPUが古いCerelonなのであんまり重すぎないものでお願いします。

986 :デフォルトの名無しさん:2008/12/28(日) 21:09:54
Visual C++ 2008 Express Edition

987 :デフォルトの名無しさん:2008/12/28(日) 21:13:59
C++の入門サイトってどこ見ればいいの?

988 :985:2008/12/28(日) 21:15:48
>>986
ありがとうございます
ちょっと導入してくる

989 :デフォルトの名無しさん:2008/12/28(日) 21:20:24
>>979
それじゃ、その教科書の著者編者採用担当者が総じて間抜けなんだろうな。

990 :デフォルトの名無しさん:2008/12/28(日) 22:27:16
>>979
ならばスレ違いだボケナス。

991 :デフォルトの名無しさん:2008/12/28(日) 23:31:14
苦しんで覚えてどうすんの。
言語なんてものは楽しんで覚えなきゃ。

992 :デフォルトの名無しさん:2008/12/29(月) 00:09:06
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[]){
int n = 1, sum = 0;
while(sum >= 2000){
sum += n*n;
n++;
puts("\a");
}
printf("n = %d\a\n", n);
system("pause");
return 0;
}

993 :デフォルトの名無しさん:2008/12/29(月) 00:52:50
>>992
おいおい。ちょっとおかしいぞ。while の中身が逆。ついでになぜに機種依存
させる?こんなもんかな?

#include <stdio.h>
int main(){
int n=0, sum=0;
while(sum <= 2000){
++n;
sum += n*n;
}
printf("n=%d, sum=%d\n",n,sum);
return 0;
}


994 :デフォルトの名無しさん:2008/12/29(月) 04:48:40
#include <stdio.h>
int main()
{
int sum = 0;
int n;
for (n = 1; sum <= 2000; ++n) sum += n * n;
printf("n = %d, sum = %d\n", n, sum);
return 0;
}

995 :デフォルトの名無しさん:2008/12/29(月) 09:13:31
>>984
printfデバッグというものがあってだな・・・

996 :デフォルトの名無しさん:2008/12/29(月) 09:44:54
#include <cstdio>

template< bool b, int sum, int n >
struct func_t
{
static void f(){ std::printf("n = %d, sum = %d\n", n-1, sum);}
};

template< int sum, int n >
struct func_t< false, sum, n >
{
static void f(){ func_t< (n*n+sum>2000), (n*n+sum), n+1 >::f();}
};

int _tmain(int argc, _TCHAR* argv[])
{
func_t< 0, 0, 0 >::f();
return 0;
}

997 :デフォルトの名無しさん:2008/12/29(月) 09:55:31
>>995
それこそデバッガいらないだろう

998 :デフォルトの名無しさん:2008/12/29(月) 10:47:38
次スレ立ててくれ

999 :デフォルトの名無しさん:2008/12/29(月) 11:00:15
>>1000 がスレを立てること!

1000 :デフォルトの名無しさん:2008/12/29(月) 11:05:38
>>999
了解
http://pc11.2ch.net/test/read.cgi/tech/1230516307/


1001 :1001:Over 1000 Thread
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。

262 KB
★スマホ版★ 掲示板に戻る 全部 前100 次100 最新50

read.cgi ver 05.04.00 2017/10/04 Walang Kapalit ★
FOX ★ DSO(Dynamic Shared Object)