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

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

レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさんNGNG
エスケープシーケンスやWin32APIなどの環境依存な物でもOK。
ただしその場合、質問者は必ず、環境を書きましょう。

【初心者歓迎】C/C++室【環境依存OK】
http://pc5.2ch.net/tech/kako/1059/10590/1059041347.html
【初心者歓迎】C/C++室 Ver.2【環境依存OK】
http://pc5.2ch.net/tech/kako/1067/10671/1067189450.html
【初心者歓迎】C/C++室 Ver.3【環境依存OK】
http://pc2.2ch.net/test/read.cgi/tech/1069719929/ (消滅?)
【初心者歓迎】C/C++室 Ver.4【環境依存OK】
http://pc2.2ch.net/test/read.cgi/tech/1073473867/ (消滅?)
【初心者歓迎】C/C++室 Ver.5【環境依存OK】
http://pc5.2ch.net/test/read.cgi/tech/1077102238/

【ラウンジ】質問が長い時はココを使うと便利
http://do.sakura.ne.jp/%7Ejunkroom/cgi-bin/megabbs/lounge/index.html
0002デフォルトの名無しさんNGNG
【関連スレ(処理系別)】
★初心者にVisual C++を教えるスレ★ Part11
http://pc5.2ch.net/test/read.cgi/tech/1077965179/l50
C++Builder相談室 Part9
http://pc5.2ch.net/test/read.cgi/tech/1080541814/l50
GCCについて part3
http://pc5.2ch.net/test/read.cgi/tech/1072484422/l50
Turbo C++ 5.0 プログラミング
http://pc5.2ch.net/test/read.cgi/tech/1030878794/l50
タダで使えるBorland C++ Part3
http://pc5.2ch.net/test/read.cgi/tech/1054390397/l50
タダで使えるVisual C++
http://pc5.2ch.net/test/read.cgi/tech/1082177340/l50
Borland C++ BuilderX
http://pc5.2ch.net/test/read.cgi/tech/1065260556/l50
■ VisualC++(MFC限定)相談室 MFC10.dll■
http://pc5.2ch.net/test/read.cgi/tech/1074104008/
0003デフォルトの名無しさんNGNG
【関連スレ(処理系別)】
★初心者にVisual C++を教えるスレ★ Part11
http://pc5.2ch.net/test/read.cgi/tech/1077965179/l50
C++Builder相談室 Part9
http://pc5.2ch.net/test/read.cgi/tech/1080541814/l50
GCCについて part3
http://pc5.2ch.net/test/read.cgi/tech/1072484422/l50
Turbo C++ 5.0 プログラミング
http://pc5.2ch.net/test/read.cgi/tech/1030878794/l50
タダで使えるBorland C++ Part3
http://pc5.2ch.net/test/read.cgi/tech/1054390397/l50
タダで使えるVisual C++
http://pc5.2ch.net/test/read.cgi/tech/1082177340/l50
Borland C++ BuilderX
http://pc5.2ch.net/test/read.cgi/tech/1065260556/l50
■ VisualC++(MFC限定)相談室 MFC10.dll■
http://pc5.2ch.net/test/read.cgi/tech/1074104008/
0004デフォルトの名無しさんNGNG
【関連スレ(その他)】
C言語なら俺に聞け! Part 76
http://pc5.2ch.net/test/read.cgi/tech/1081597375/l50
C++相談室 part29
http://pc5.2ch.net/test/read.cgi/tech/1082047479/l50
ぼるじょあがC/C++の宿題を片づけますYO! 21代目
http://pc5.2ch.net/test/read.cgi/tech/1078157730/l50
【C++】template 統合スレ -- Part3
http://pc5.2ch.net/test/read.cgi/tech/1066493064/l50
プリプロセッサについて熱く語るスレ。
http://pc5.2ch.net/test/read.cgi/tech/1058203590/l50
タダで最強!フリーC/C++コンパイラ
http://pc5.2ch.net/test/read.cgi/tech/1035882599/l50
C統合・質問スレッド
http://pc5.2ch.net/test/read.cgi/tech/1068359871/l50
くだらない質問でもべっちょ偉そうに聞いていいスレ
http://pc5.2ch.net/test/read.cgi/tech/1069530956/l50
0005デフォルトの名無しさんNGNG
スレ立て乙!
0006デフォルトの名無しさんNGNG
もつ鍋
0007デフォルトの名無しさんNGNG
関連スレ
タダで使えるVisual C++
http://pc5.2ch.net/test/read.cgi/tech/1082177340/l50
0008デフォルトの名無しさんNGNG
>>7
>>2に入れてあるから心配するな。
0009デフォルトの名無しさんNGNG
初心者すぎる質問ですがおながいします。

ボーランドC++コンパイラをダウンロードしてインストールしました。
WinXPで、環境変数のところに「C:\borland\bcc55\Bin」を追加しました。

早速、適当なプログラムを作ってみたのですが、
エラーE2209 が出て、インクルードファイル stdio.h をオープンできないとなってしまいました。

プログラムのソースは

#include <stdio.h>

int main (void)
{
printf ("hello\n");
return 0;
}

です。おながいします。
0010デフォルトの名無しさんNGNG
bcc32.cfgとかilink32.cfg作れ。詳しくはreadme.txt嫁。
0011デフォルトの名無しさんNGNG
>>9
http://www.cmagazine.jp/beginner/bcc/
[設定ファイルの作成]
bcc32.cfg
ilink32.cfg
00129NGNG
>>10
>>11
禿げしくありがとうございます。
ちゃんとコンパイルできて、実行されました。
少しずつ勉強してみます。
0013デフォルトの名無しさんNGNG
C言語の質問です。

ある関数内でmallocし、その関数から抜ける前にfreeしたいのですが、
関数内には条件分岐でreturnする部分が数ヶ所あります。この場合、どう書くのが
一番きれいなのでしょうか?

具体的には
---------------------------
int func()
{
void *p=NULL,*q=NULL;
....
if(...)
return a;
....

p=malloc(...);

....
if(...)
return b;
....
q=malloc(...);
....
/* 続く */
001413NGNG
/* >>13の続き */
for(...){
for(...){
if(...)
return c;
}
if(...)
return d;
}
...
free(p);
free(q);
return e;
}
--------------------------
みたいなものを書きたいのですが、このままだと、条件によってはp,qがfreeされません。
どうすれば、きれいに確実にメモリをfreeできるのでしょうか。

001513NGNG
一応、自分で考えたのは、

(1) return の前にfreeを付ける。
--- 付け忘れる可能性がある。見にくくなる。

(2) funcを包み込む関数(仮にdo_func)を用意して、do_funcでfuncを呼び出しとfreeを行う。
( p,q をglobal変数にしたり、 func に void **型で渡したり)
--- global変数はなるべく増やしたくない。二つの関数間で共有するためだけにglobal変数を使いたくない。
void **型にすると、func内で *p のような書き方をしなければならず、見にくい。

(2') (2)と似ているが、do_func側でmallocもしてしまう。
--- func実行開始時点では mallocするサイズが決まっていないので、うまくいかない。

(2'') (2') と似ているがサイズが決まる前の部分をdo_funcに書いてしまう。
--- 一つの機能が二つの関数に分かれてしまうのは嫌

(3) return を全て goto に変える。
--- なんとなく嫌。

(4) 全体を do{...}while(0); で括り、 returnをbreakに変更。
--- forの内側ではbreakが効かない。

(5) #define RETURN(V) {free(p);free(q);return(V);} などとする。
--- 微妙…

という感じです。しかたなく(5)で行こうかと、あきらめかけているのですが、
もっとまともな書き方があったら教えてください。
001613NGNG
いい忘れましたが、C++ではなくCでお願いします。
それから、コンパイラ依存の機能を使うのもしない方向で。
0017デフォルトの名無しさんNGNG
>>13
漏れならgoto使うなぁ。
一番見やすそうだし、仕様変更にも柔軟に対応できそう。
でも最大確保サイズが分かってて、そんなに大きくないなら
スタック領域確保で対応するかな。

コンパイラ依存の機能はなしっていっても、
移植する必要がないならどんどん使った方がいいと思うよ。
今回の例でいうとalloca関数とか。
0018デフォルトの名無しさんNGNG
C/C++の質問です。

クラスや構造体を関数に渡すとき、ポインタで渡す場合と参照で渡す場合で
違いとかってあるんですか?
できれば"->"より"."を使ってメンバにアクセスしたいので参照渡しにしたいんですが。
0019デフォルトの名無しさんNGNG
>>18
参照にするかポインタにするかよりも、
関数の引数にconstつけるかどうかで、
関数内でデータが変化するかどうかを
関数を使うユーザーに暗示的に示せるので、
関数宣言の仕方に注意すべし。
0020デフォルトの名無しさんNGNG
>>18
機能的に違いは無いが、関数側から見ると、
ポインタはNULLが渡ってくる可能性を考慮する必要があるが、
参照は常に実体がある(ほんとは例外があるがそこまで気にしないでいい)。
0021デフォルトの名無しさんNGNG
どうせ参照渡しでもポインタ渡しでも同じコード吐くことが期待できるしね。
0022デフォルトの名無しさんNGNG
ポインタにせざる得ない場合を除けば参照でいいじゃん。
そのための参照でしょ。
002318NGNG
>>19
毎回忘れて後で読み直す羽目になってる・・・気をつけます。

>>20-21
NULLの場合を考慮しなくていいのは楽かも。
結果同じになるなら自分が使い易いほうでよさそうですね。
これから参照使って渡すようにします。

有難うございました。
0024デフォルトの名無しさんNGNG
>15
(2)推奨。次点で(3)。
func()内での*pでのアクセスを避けるには、
func(void **p_copy)
{
 void *p;
 ...
 p = *p_copy = malloc();
}
とすれば良い。これならレジスタ等もうまく使ってくれる。
もちろん、do_func()内でNULLを代入しておく。
引数の数によっては、void **を渡すのではなく構造体のポインタを渡すのも手。
0025ラポNGNG
C言語始めたばかりなのですがこの問題が全く分かりません。
すいませんが教えてほしいです。お願いします。
整数型配列 array に,先頭から n 個データが入っているとする.このようなときに,次の操作を行う二つの関数を作れ.


1、新しいデータ newdata を第 k 要素 array[k] の場所に挿入する(挿入前に array[k] 以降にあったデータは一つずつ後ろにずらす)関数
array_insert(int array[], int n, int newdata, int k)


2、第 k 要素の内容を削除する(削除前に array[k+1] 以降にあったデータは一つずつ前にずらす)関数
array_delete(int array[], int n, int k)

0026デフォルトの名無しさんNGNG
>>25
宿題丸投げはこちらにいきましょ

ぼるじょあがC/C++の宿題を片づけますYO! 21代目
http://pc5.2ch.net/test/read.cgi/tech/1078157730/l50
0027ラポNGNG
そちらの方に書き込むことにします。
ありがとうございました。
0028デフォルトの名無しさんNGNG
ここは、SDLの話を振っても大丈夫ですか?
0029デフォルトの名無しさんNGNG
構造化プログラミングと段階的詳細化の関係について教えてください。
この2つはどう関係しているのですか?
自分なりの解答としては

構造化プログラミングは構造の把握しやすいプログラムを作る方法のことで、
段階的詳細化はトップダウン法のことである。トップダウン法で作ったほうが
構造の把握しやすいプログラムができる可能性が高い、という点で関係している。

って感じなんですが、不安です。何かアドバイスお願いします。
0030デフォルトの名無しさんNGNG
>>29
あなたの質問 と このスレ の関係について教えてください。
この2つはどう関係しているのですか?
自分なりの解答としては

あなたの質問は環境に依存しない一般的な ことで、
このスレは環境依存もOKな優しいスレのことである。「すれ立てるまでもない質問はここで」 スレで聞いた ほうが
回答を得やすい質問である可能性が高い、と言う点で全然関係していない。

って感じなんですが、不安です。何かアドバイスお願いします。
0031デフォルトの名無しさんNGNG
キモい
0032デフォルトの名無しさんNGNG
>>28
Rubyなんかにもポーティングされてるのに何でここだと思ったか知らないが
専用スレはゲ製にある。

SDLスレ
http://pc5.2ch.net/test/read.cgi/gamedev/1005469181/
0033デフォルトの名無しさんNGNG
2次元のDCTのプログラムで、計算部分を
for(m=0;m<N;m++){
for(n=0;n<N;n++){
a=0.0;
for(v=0;v<N;v++){
for(u=0;u<N;u++){
if(u==0 && v==0)
c=0.5;
else
c=1.0;
a+=c*f[u][v]*cos(((2.0*m+1.0)*u*pai)/(2*N))*cos(((2.0*n+1.0)*v*pai)/(2*N));
}
}
g[m][n]=(unsigned char)a;
}
}
としているのですが、逆DCTをしても元に戻ってくれません。
画像に対してなのですが、これであっているでしょうか?
逆DCTが違う可能性もあるのですが。
0034デフォルトの名無しさんNGNG
>>32
ありがとうございます。
専用スレに逝ってきます。
0035デフォルトの名無しさんNGNG
>>33
アルゴリズムはよくわからないが
>g[m][n]=(unsigned char)a;
とやってる所を見ると精度がunsigned charになってしまう
からじゃないか?
0036デフォルトの名無しさんNGNG
VC++6 で SetLayeredWindowAttributes を使うには、
ヘッダーファイル等をUPDATEしないといけないと思うんだけど、
MicoroSoftのどこで何をダウンロードすれば良いのでしょうか?
0037デフォルトの名無しさんNGNG
>>36
PlatformSDK
0038デフォルトの名無しさんNGNG
ここで聞くべきなのかもわからないのですが、
VC++6.0で簡単なグラフィックを使う場合には
C++の知識が必要なのですか?
Cまでの知識でグラフィックを扱えるものはありますか?
0039デフォルトの名無しさんNGNG
>>38
Windows APIの知識があれば。
0040デフォルトの名無しさんNGNG
>38
CかC++かで言えばC
0041デフォルトの名無しさんNGNG
c++でなんですが、
ヘッタファイルでconst int A = 1;とゆう風に定数を宣言してるのがよく見かけるのですが、
ヘッタファイルではexternをして、宣言はソースファイルに書くものじゃないんですか?
cでは大体ソースファイルで宣言されてたんですが、c++ではヘッタで宣言してるのをよく見るんです
0042デフォルトの名無しさんNGNG
>>41
ヘッタファイルって何?


という突っ込みはさておき、それこそ定数の宣言だけしたような、
対応するcppファイルの存在しないヘッダファイルじゃないの?
インクルードガードしてたら問題はない。
0043デフォルトの名無しさんNGNG
>41
とりあえず用語について。
×ヘッタファイル/○ヘッダファイル
あと、
>ヘッタファイルではexternをして、
こっちは「宣言」ですが、
>const int A = 1;とゆう風に定数を宣言
>ソースファイルに書くものじゃないんですか?
こっちは「定義」と呼ばれるものだと思います。

で、通常 C では #define で定数を定義するので、それを単純に
const に置き換えただけなのではないかと。
0044デフォルトの名無しさんNGNG
>>42
>>43
レスありがとうございます
どこかで、ヘッダファイルにはexternだけ書いて、定義はソースファイルで、という書き込みを見たのですが、
ヘッダファイルの方で定義してもいいんですね
どこでその書き込みを見たかも忘れてしまったので、混乱していました
0045デフォルトの名無しさんNGNG
>>44
コンパイラから見れば、ヘッダファイルとソースファイルに差異はない。
というか、ソースファイルにヘッダファイルが挿入されたものをコンパイラは処理するわけで。
0046デフォルトの名無しさんNGNG
ソースファイルの#include行が当該ヘッダファイルの内容にすり替わったものを想像すれ。
そしてヘッダファイルの存在は忘れれ。
コンパイラが見ているのはその状態だ。

ということですな>>44
0047デフォルトの名無しさんNGNG
俺は定数宣言はヘッダファイルでやるが…少数派なのかな?
0048デフォルトの名無しさんNGNG
>>47
#defineの代わりにしてるなら普通だよ
0049デフォルトの名無しさんNGNG
cでconst 変数を大量にインクルードファイルに書かれると結構迷惑だがな。
0050デフォルトの名無しさんNGNG
まあ enum のがいいだろうけどね
0051デフォルトの名無しさんNGNG
>>44に限らず、初心者レベルの方は

/* 世界で一番汎用的なプログラム */
#include <con>

を見て笑えるようになったら、ヘッダについては卒業だな。
0052デフォルトの名無しさんNGNG
>>51
原理も解るが、笑えんぞw
0053デフォルトの名無しさんNGNG
「#include <stdio.h>
main()
{
printf("1 little ");
printf("2 little ");
printf("3 little ");
printf("4 little indian boys\n");
}                         」
これだと上手くコンパイル出来ないのですが、
「#include <stdio.h>
main()
{
printf("1 little ");
printf("2 little ");
printf("3 little ");
printf("4 little indian boys\n");
}                          」
これだとコンパイルできます、この二つの差は何でしょうか?
エディタはCPadでコンパイラはLSI C-86 Ver.3.30、OSは
winXPです。
0054デフォルトの名無しさんNGNG
コンパイル出来ないならエラーメッセージくらい書いて。
005553NGNG
使い方間違ってただけでした。
#include<stdio.h>
main()
{
int a;
a=54;
printf(">>%dスイマセン^^;\n",a);
}
0056デフォルトの名無しさんNGNG
構造体をグローバルで使いたいんですが、
どこでincludeしたらいいのか悩んでます。
globals.hって作って、その中でテンプレート&宣言をしてるんですが、
うまくリンクできてないみたいで、どこが悪いのかさぱ〜り。
externつけるとリンクしないし、つけないと今度は挙動がヘンだし。
0057デフォルトの名無しさんNGNG
>>56
とりあえずモチツケ
0058デフォルトの名無しさんNGNG
>56
宣言と定義について解ってないと見た。
0059デフォルトの名無しさんNGNG
構造体について解ってないとみた。
0060デフォルトの名無しさんNGNG
言語仕様の理解自体も中途半端そうだな
0061デフォルトの名無しさんNGNG
>>56
ソース晒せ。話はそれからだ。

>どこが悪いのかさぱ〜り。
どしろうとが何処で引っ掛かってるのかなぞ、
ソース見なこっちもさっぱり判らん。
0062デフォルトの名無しさんNGNG
>>56のコミュニケーション能力が一番の問題ではないかと。
単に愚痴りたいだけなのか?
これで質問しているつもりなのか?
後者だったら、よく周りの人間が付き合ってくれるもんだと感心する。
0063デフォルトの名無しさんNGNG
ご心配おかけしましたが、なんとか自己解決しました。
とはいっても、総当たり方式で、ですが。
extrenつけたり外したり、別のヘッダに移したりしてるうちに
ビルドできちゃいました。
テンプレートは.hでやっといて、別ファイルの方で宣言したらうまくいきました。
自分の持ってる本だとそこまで書いてなかったんですよう。
0064デフォルトの名無しさんNGNG
>>63
>ご心配おかけしましたが、...
さらに>>63の将来が心配になった人がいると思われ
0065デフォルトの名無しさんNGNG
Cでは、以下はエラーになりますが、C++では通ります。
int a;
a = int(-3);
printf("%d\n", a);

自分でやってて良く分かってないのですが、このように
データタイプ(値) というのは C++ 的にはどのような解釈
になるんでしょうか?
0066デフォルトの名無しさんNGNG
int型のコンストラクタint::int(int)という解釈。
0067デフォルトの名無しさんNGNG
>>65
キャストでねーの?
0068ANGNG
最近動的メモリ割り当てを使い始めた者です。
環境依存かわかりませんが、borland bcc32 を使ってます。

2次元配列などを動的メモリで何個も使って、普通に動いてるように
見えるコードに、新たに別の配列を同様にして追加しようとすると、その前後で
メモリに書き込めない、というエラーがでるときがあります。
また開放しようとしたときに、メモリが読めない、と言われるときがあります。
ポインタでファイルをオープンしようとして、メモリが読めないとエラーが
出るときもあります。
配列の大きさ種類は色々ですが、最大で100 * 100 の double型の大きさで、
それを数個使う程度です。

何か全然初歩的なミスをどこかで犯してるのかもしれませんが、
もし何か気が付くことがあれば、教えていただけませんか?
お願いします。
0069デフォルトの名無しさんNGNG
>>68
新たに別の配列を同様にして追加 ってどういう意味?
できればソース出して。これだけの情報じゃあなんとも言えない。
0070デフォルトの名無しさんNGNG
mallocのNULLチェックはやってる?
0071デフォルトの名無しさんNGNG
確保領域のポインタの
扱い方を間違えてる
007268NGNG
>>69-71 早速どうもありがとうございます。
ソースは大体以下のような感じです。以下は2個しか書いてませんが、 double 型以外の配列も同様の形で作ったり、などとして配列の数を
増やそうとすると、そこでメモリの読み書きができない、 というエラーが出てきたのでした。

>>70
やっていませんね。NULL を出すということは、そこのメモリは読み書きできなかったということになるんでしょうけど、その場合は
別のところにメモリを確保してくれるのでしょうか?
それともただそこでプログラムは停止する、ということでしょうか?
>>71
きっと間違えてますね。もし以下で何かおかしいことがあれば、 お教えいただけると嬉しいです。
007368 (2)NGNG
double **new_dmatrix(int M, int N);
void free_dmatrix(double **top);

int main() {
double **Array1, **Array2;
Array1 = new_dmatrix(100,100);
Array2 = new_dmatrix(100,100);
......
free_dmatrix(Array1);
free_dmatrix(Array2);
}

double **new_dmatrix(int M, int N){
double **top;
int i,j;
top = (double **)malloc(sizeof(double *) * M);
top[0] = (double *)malloc(sizeof(double) *M*N);
for(i=1; i<M; i++) top[i] = top[i-1]+M;
for(i=0;i<M;i++){
for(j=0;j<N;j++){
top[i][j] = 0.0;
}
}
return top;
}

void free_dmatrix(double **top){
free(top[0]);
free(top);
}
0074デフォルトの名無しさんNGNG
top = (double **)malloc(sizeof(double *) * M);
なのに、
topに1万回も書き込めば何があっても不思議じゃない。
0075デフォルトの名無しさんNGNG
>>73
ポインタと配列に対する知識不足だな。
007668 NGNG
>>74,75
どうもありがとうございます、
仰せの通り知識不足でどうやっていけばいいかは、
はっきりわかりませんが、危険な方法だという事ですね。
もうちょっと安全な書き方を考えてみます。
0077デフォルトの名無しさんNGNG
危険安全以前に、何をどうすればいいかが解ってないと思われ。
>>73のコードは、はっきりいってめちゃくちゃ。動くだけでも奇跡。
0078デフォルトの名無しさんNGNG
正しいプログラムが正常に動作するのは奇跡でもなんでもない。
0079デフォルトの名無しさんNGNG
俺には、このソースから特に問題を見つけられないのだが。
0080デフォルトの名無しさんNGNG
>top = (double **)malloc(sizeof(double *) * M);
>top[0] = (double *)malloc(sizeof(double) *M*N);

これがやりたいのかなぁ
top = (double **)malloc(sizeof(double *) * M);
for (i = 0; i < M; i++)
  top[i] = (double *)malloc(sizeof(double) * N);
0081デフォルトの名無しさんNGNG
インスタンスが複数になる場合staticメンバ変数の初期化というのは
どのように行うのが一般的でしょうか?
0082デフォルトの名無しさんNGNG
アドレスの質問です。
メモリ内の0x41番地に'A'が有るという解釈は間違いですか?
(ASCII配列で)
0083デフォルトの名無しさんNGNG
>>82
間違いです。
ASCIIにおいて、'A'の値が0x41なだけです。
0084デフォルトの名無しさんNGNG
俺も >>73 は拙くはない…つか、ちゃんと出来てると思うが。
なんで読めない奴がいるんだyp
>>80
そうやると sizeof(double) * N バイトのヒープが M 個できるだろ?
008584NGNG
× ヒープが
○ ブロックが
0086デフォルトの名無しさんNGNG
1次元配列でいいのではないかと…。
008733NGNG
>>35
レス遅くなって申し訳ないです。
あれから色々やってみたのですがいっこうに
元の画像に戻らずです・・・。
しかも貼り付けたやつは逆DCTのほうでした。
g[m][n]=(unsigned char)a;
の部分はg[m][n]がunsigned char型なのです。
画像を読み込んでDCTして出力という感じです。
0088デフォルトの名無しさんNGNG
>>87
元に戻らんってどの程度のレベルで言ってるの?
DCT変換後の結果をunsigned charで格納したらその時点で情報落ちするから、
逆DCTしても全く同じにはならないって事じゃないのか? >35は。
008933NGNG
>>88
ちょっとその辺考えてもう一回やってみます。
0090デフォルトの名無しさんNGNG
>>81
インスタンスの管理のしかたはわからんが普通に
class A;だとしたら

class* a;
a = new A;
a->Initialize();
delete a;
と、複数インスタンスとは別にツクってでいーんじゃない?
他の方はどーやっとる?
0091デフォルトの名無しさんNGNG
>>81 >>90

普通にはその変数を定義したところで初期化する。
込み入ったことをやりたかったら、初期化関数をstaticで用意する。
009233NGNG
>>88
元に戻らないというのは、逆DCT後全く違う画像になってしまいます。
砂嵐みたいな感じです。
0093デフォルトの名無しさんNGNG
>>92
んじゃ根本的なアルゴリズムの問題だろ。
まず正しくDCT出来てるか確認汁。
0094デフォルトの名無しさんNGNG
>>84
>double **top;
>top = (double **)malloc(sizeof(double *) * M);
>top[i][j] = 0.0;

藻前はどこをアクセスしていると思っているのか?と小一時間(ry
0095デフォルトの名無しさんNGNG
>>33

> if(u==0 && v==0)
> c=0.5;
> else
> c=1.0;

俺の本には
cu = u==0? 1.0/sqrt(2.0) : 1.0;
cv = v==0? 1.0/sqrt(2.0) : 1.0;
c = cu * cv;
みたいに書いてある。

あとDCT係数は負になることもあるし、256を超えることもある。
unsigned char じゃ無理。
0096デフォルトの名無しさんNGNG
概ね >84 に同意。>73 は確かにバグってるんだけどね。

>94
問い詰められるのはおまいだ。
>top[0] = (double *)malloc(sizeof(double) *M*N);
なんだから、メモリの確保自体はしてあるだろ?
落ち着いて図でも描いてみるべし。

>73
×for(i=1; i<M; i++) top[i] = top[i-1]+M;
○for(i=1; i<M; i++) top[i] = top[i-1]+N;
これでいけると思われ。
でも、どうせなら malloc(sizeof(double*)*M+sizeof(dobule)*M*N) にして
malloc 1回にしたい気もする。
あー、けどアラインメントを考えるとうまくいかない環境もあるか。
009794NGNG
>>96
藻前こそ型を考えて見ろ。
0098デフォルトの名無しさんNGNG
オマエモナー
0099デフォルトの名無しさんNGNG
オマエモナー じゃなく オマエガナー でしょ?
0100デフォルトの名無しさんNGNG
>>81
俺は複雑な初期化を必要とするstaticメンバ変数を使ったことはないが、
デフォルトコンストラクト可能なヘルパクラスをメンバに持つのはどうだ?
class A {
    static struct helper {
        helper() { /*...*/ }
        T member; /* 使いたいメンバ */
    } one;
};
0101デフォルトの名無しさんNGNG
puts("OOOoooooOOOOOOoooOOOOOoooooooOOOOOOOoooOOOOOo");
0102デフォルトの名無しさんNGNG
RECT r[2];
と宣言し、
RECT rec[2] = {{0,0,0,0},{0,0,0,0}};と初期化し
r = recとやるのが無理だったのですが
forでまわすしか方法はないでしょうか?
0103デフォルトの名無しさんNGNG
>>102
構造体にいれる方法もある。
0104デフォルトの名無しさんNGNG
>>102
  memcpy(r, rec, sizeof(r));
0105デフォルトの名無しさんNGNG
C++で整数を文字列としてvectorに格納する時の定石はどのような感じなのでしょうか?

やはり
#include <cstdio>として
sprintfで一度文字列に変換してからvectorへ持っていくという方法がベストでしょうか?
0106デフォルトの名無しさんNGNG
>>105
boost の lexicial_cast 使うのもアリ。何がベストかは、何を重視
するかによるから何とも言えんが。

http://www.boost.org/libs/conversion/lexical_cast.htm#lexical_cast
0107デフォルトの名無しさんNGNG
>>100
スマートなやりかただな
0108デフォルトの名無しさんNGNG
ども。
Solaris8+SunONE7 で ローカル時間にmsec(ミリ秒)を使いたい。
localtime構造体には、msecがなく、困ってます。
何か他のmsecのある構造体を教えてください。
また、time構造体から上の構造体への変換関数もお願いします。




0109デフォルトの名無しさんNGNG
出だしの「ども。」がなんかむかつくから教えない
0110デフォルトの名無しさんNGNG
>>108
μsec ならあるんだけどなー。
残念だなー。
0111デフォルトの名無しさんNGNG
>>106
thnks.
STLの範囲内でと考えていて、参考書では<c*>はなるべく使わない方が
いいと書いてあったので他の人はどうしているか知りたかったと言うところです。
0112デフォルトの名無しさんNGNG
>>110
どうせ精度はmsec以下だけどね。
0113デフォルトの名無しさんNGNG
>>111
標準ライブラリの範囲内なら、std::stringstreamがあるが。
0114デフォルトの名無しさんNGNG
num + ('0'-0)で回すとかでいいんでないかな
0115デフォルトの名無しさんNGNG
>112
無知晒しage
0116デフォルトの名無しさんNGNG
>>114
'0'-0は'0'じゃないの?
0をひく意味があるの?
0117デフォルトの名無しさんNGNG
割り算やmod演算のコストを考えるとsprintfのが早かった

>>116
ない。ボケボケだったよ。
0118デフォルトの名無しさんNGNG
VCなら_itoaとかね
011968 NGNG
>>96 その他皆様、どうも色々とありがとうございました。
恥ずかしながら、96さんのご指摘の通りでした。
常にM=N の配列を使っているので、ある所まではエラーが出なかった
ようです、お騒がせしました
0120デフォルトの名無しさんNGNG
int型変数のケタ数を取得する関数ってあります?

int a=120; // 3ケタの整数
cout<<function(a); // 3が表示される

こんな感じです。
0121デフォルトの名無しさんNGNG
>>120
cout << boost::lexical_cast<std::string>(a).length() ; // (゚д゚)ウマー
0122121NGNG
ってめちゃくちゃ遅いでしょうな。
/=10 で数えたほうがよろしいと思われ。
0123デフォルトの名無しさんNGNG
速度だけで言ったら
if( a < 10 )
//1桁
とか比較したほうが
0124デフォルトの名無しさんNGNG
文字列の中に四つのうちいずれかの文字があると実行する、としたいのですが
文字列の中に+を入れて
if(str[i] == ('+' || '-' || '*' || '/'))
こうすると思った通りに動きません。
if(str[i] == '+')
こうだと正常に動作するので上の論理演算が正しくないと思うのですが
なにがおかしいのかが解らないのでご教授ください
0125デフォルトの名無しさんNGNG
ネタっぽく見えるが…
if(str[i] == ('+' || '-' || '*' || '/'))はif(str[i] == 1)と等価。
if(str[i] == '+' || str[i] == '-' || str[i] == '*' || str[i] == '/' )と書くか
if( strchr("+-*/",str[i]) )と書く。
0126デフォルトの名無しさんNGNG
>>124

switch(str[i])
{
case '+': case '-': case '/': case '*':
    /* 処理 */
break;
}
0127デフォルトの名無しさんNGNG
>124
括弧で式が括られている場合の演算子の優先順位を考えてみましょう。
一段階ずつ自分の手で、式を計算していってみると分かりやすいですよ。
例えば、>124の場合、

1. if (str[i] == ('+' || '-' || '*' || '/'))
まず、('+' || '-' || '*' || '/')の中が評価される

2. if (str[i] == (true || '-' || '*' || '/'))
'+'は非ゼロである為、論理演算ではtrueとみなされる

3. if (str[i] == true)
||は先頭から評価されていき、ひとつでも真となる条件があった場合、
後ろの式は評価されない

4. if (false)
str[i] == trueが成り立たない場合、評価の結果はfalseとなる
0128デフォルトの名無しさんNGNG
ネタではないです…
回答有難う御座います。
ifとswitchではどちらが速いんでしょうか?
0129デフォルトの名無しさんNGNG
>>127
解りやすい解説有難う御座います。
0130デフォルトの名無しさんNGNG
>>128
そんなことを気にするよりも前に、もっと他に気にすることがあるでしょ。。。
0131デフォルトの名無しさんNGNG
PC内の時計から乱数を作る方法どうやってやるんでしたか誰か教えてくれませんか?
0132デフォルトの名無しさんNGNG
>>131
srand(time(NULL));
0133デフォルトの名無しさんNGNG
srand((unsigned int)time(0));
while (1) {
printf(rand() % 2 == 0 ? "まいう" : "まいう〜");
}
0134デフォルトの名無しさんNGNG
たびたびすみませんが、
int a;
a=(srand(time(NULL))/3)*100 + (srand(time(NULL))/13) +1;

ってできるでしょうか?できない気がしてしょうがないんですが、

百の位を0〜3、十と一の位に1〜13の数が入るようにしたいのです
0135デフォルトの名無しさんNGNG
%でした
0136デフォルトの名無しさんNGNG
>>134
ネタですか?
0137デフォルトの名無しさんNGNG
>>134
はげしくワロタ。というかコーヒー吹いたじゃねぇかゴルァ!
0138デフォルトの名無しさんNGNG
> ってできるでしょうか?できない気がしてしょうがないんですが、
srandを知った瞬間からsrandをGoogleなりでちゃんと学習しようよ
自分で検証もせずに相手にデバッグさせるのは、この手のスレで一番のノーマナー
0139デフォルトの名無しさんNGNG
>>134
srandはいわばトランプの札をシャッフルする。
札を配る(乱数を返す)のはrand()。
ヘルプなり入門書なりきちんと読もうや、をい。

なお、やりたいことはトランプっぽいな。
もし、それなら0-51の範囲で扱った方が楽かも知れんぞ。
0140デフォルトの名無しさんNGNG
トランプだとしたら、不定延期するよくないアルゴリズムのような気もする。
0141デフォルトの名無しさんNGNG
入力した順と逆に表示する関数がつくれない・・・
関数しないなら出来るけど。
#include <stdio.h>
#define NUMBER5

void rev_intary(int vc[], int no)
{
int i;
int back = vc[0];
for(i=NUMBER-1; i>=0; i--)
back = vc[i];

}
int main(void)
{
int i;
int a[NUMBER];/*値*/
int temp;

printf("%d個の整数を入力してください。\n", NUMBER);
for (i = 0; i < NUMBER; i++) {
printf("%d番目:", i + 1); scanf("%d", &a[i]);
temp=a[i];
}
puts("逆に並べると、");
printf("%d\n", temp);
puts("です。");
return (0);
}
0142デフォルトの名無しさんNGNG
こんばんは。
0143デフォルトの名無しさんNGNG
>>141
>入力した順と逆に表示する関数がつくれない・・・
そうか。オレは作れるけどな。それがどうかした?
0144デフォルトの名無しさんNGNG
>>141
#define NUMBER5
//スペースが不足してませんか

あと仕様が微妙に不可解。テンポラリ変数使っても意味ないのでは?
配列を逆回ししてあげればそれでおしまいのような。

puts("逆に並べると、");
for (i=NUMBER-1; i>=0; i--)
  printf("%d\n", a[i]);
puts("です。");
0145デフォルトの名無しさんNGNG
人間としての器の大きさの差だな
0146デフォルトの名無しさんNGNG
>>144
なんか i-- とか >= とかが個人的に気持ち悪いので、

puts("逆に並べると、");
for(i=0; i<NUMBER; i++)
printf("%d\n", a[(NUMBER-1)-i]);
puts("です。");

こうしません?

>>141
つうか rev_intary はどこで呼ぶのさ。
0147デフォルトの名無しさんNGNG
>>146
最近のコンパイラなら、それをデクリメント方式に直してくれるのかな?
そうでないなら、加算コストが無駄で、俺は逆に引いてしまう・・・(まぁDBでもないかぎりは変わらんけど)
0148デフォルトの名無しさんNGNG
てか大抵のループはダウンカウンタにされる。気にすんな。
0149デフォルトの名無しさんNGNG
>>144, >>146
前者は内容の可読性、後者はコードの可読性を重視してるってことさね
気にすんな
0150デフォルトの名無しさんNGNG
むしろ関数のどうやって呼び出してどうやって出力するかが
本を見ても意味不明なわけで
0151デフォルトの名無しさんNGNG
>>141=150?
そのレベルだったら配列を関数に渡すのはちょっと難しいかもしれない。
まずは簡単な関数作ったり、ポインタと戯れてみよう。
もしくはいい本を探そう。
0152デフォルトの名無しさんNGNG
>>150
最初から、
「数値配列を逆順に出力する関数を作りたいのですが、
具体的にどう配列をわたし、どう出力したらよいかわかりません。
教えてください。」
と質問しろ。
プログラミングは初心者でも日本語は十年以上使ってるんだろう?

言葉足らずの質問は、こちらが補完して回答するより
本人にきっちり明確に再質問させたほうが、
結局双方のためだと思うが?>all
0153デフォルトの名無しさんNGNG
とても歓迎する雰囲気ではない罠
0154デフォルトの名無しさんNGNG
まあ、カリカリすんな。
ここは初心者スレだ。
相手のレベルにあわせてやるのも必要だろう。
うざければスルーすればいいしな。

あと本人の今後など誰も気にしとらん。
そこに質問があったから、それに答える。
ただそれだけのことだろう。
0155デフォルトの名無しさんNGNG
質問内容のレベルはどれだけ初歩的でも歓迎するが、
質問内容をできるだけ明確にするってのは
初心者スレでも当然要求されるもんだと思うが?
0156デフォルトの名無しさんNGNG
プログラム初心者は歓迎するが、ネット初心者は排斥でいいよ。
何が分からないのか分からない場合は、質問しないのがネチケットですし。
0157デフォルトの名無しさんNGNG
頭を整理してでなおしてきなさいってこった。
0158デフォルトの名無しさんNGNG
コンストラクタについて。

class Hoge{
public:
Hoge(int a){...}
...
};

のようなクラスがあったとき、

Hoge fuc(){
...
return Hoge(x)
}

ってな感じで return文のあとにコンストラクタを
直接書いているコードを良く見ますが、コンストラクタって
戻り値ないのになぜ?

動作は確認したし、すっきり書けるので自分は
すでにこの書き方が身についてしまったのですが、
理由をはっきりさせたいです。

よろしくお願いします。
0159デフォルトの名無しさんNGNG
>>120
遅レスだが、boostよりは速いだろw

n = 1+(int)log10(a);
0160デフォルトの名無しさんNGNG
>>158
それはコンストラクタを直接呼んでいるのではなくて
無名オブジェクトを構築してそれを返しているだけ。

{
 Hoge hoge(x);//hogeという名前のHogeオブジェクト
 Hoge(x);//名前は無いけどHoge型のオブジェクト
}

スコープにそのオブジェクトがあるだけでよい場合は
よく使う手段のような気がする。
0161デフォルトの名無しさんNGNG
コピーコンストラクタによる値渡しならスコープの制約はない。
=演算子のオーバーロードが仕込んで在るんじゃないの?
0162デフォルトの名無しさんNGNG
>>158

たとえばこんな関数があったとき、
void hoge_func( const Hoge& h ) { ... };

こんな風に使うことができる。
hoge_func( Hoge(any_value) ); //Hogeの無名オブジェクトを引数にしている。


>>161
コピーコンストラクタ、operator=()が定義されていなくても基本的には動作する。
当然、メモリイメージそのままのコピーになるけど。
0163デフォルトの名無しさんNGNG
うまくいけばRVOが働くだろうしな
0164デフォルトの名無しさんNGNG
オブジェクトの値渡しか・・・
ボトルネックにならないと分かりきっていない限りはやらないな。
try-throw-catchとか。
0165デフォルトの名無しさんNGNG
マルチバイト文字(Shift_JIS)をうまく置換してくれる関数はどのようにすればよいのでしょうか?
自作しようとして挫折しました。ご教授ください。
0166165NGNG
具体的にはスペースやタブを&nbsp;で全置換する関数です
0167デフォルトの名無しさんNGNG
複数の変数を用意して、
それを小さい順に並び替えるにはどうしたらいいでしょうか?
もし同じ数があれば連続して並ばせる
0168デフォルトの名無しさんNGNG
>166
1.自分で作る
2.人のソースからぱくる
3.ATLなどのライブラリを使う
0169デフォルトの名無しさんNGNG
>167
配列やソートという言葉を知ってますか?
0170167NGNG
すみません、ちょっと説明不足でした

仮に
a=7
b=3
c=5
d=3
とあったとすると、

a=3
b=3
c=5
d=7
となるようにしたいのです。
この例だと4つですが
それが、ころころ変わるのです
数が決まっていれば何とかなりそうですが・・・
0171デフォルトの名無しさんNGNG
>>165
自作するなら ctype.h のマクロを使う。
あるなら開発環境その他のライブラリを使う。
0172デフォルトの名無しさんNGNG
>>170
作業用の配列に入れてソートして戻せば良いのでは?
0173デフォルトの名無しさんNGNG
>>170
プログラム中に同じ型の変数が不定個存在するわけ?
ちょっと想像できない。
素直に配列なり(C++が使えるなら)std::vector/std;;setなりを使うように
書き直したほうが早いぞ。
0174デフォルトの名無しさんNGNG
>170
配列を使わない理由は?
0175デフォルトの名無しさんNGNG
クリップボードの内容を、MessageBoxによるウィザードへの返答によって書き換えるプログラムを作成しています。
何とか完成したかに見えたのですが、VC上で実行すると上手くいくのに、
exe単体を起動すると何故か書き換えは行われず無視されてしまいます。
何が原因と考えられるのでしょうか?

環境はWinXP、VC++6.0SP6です。
0176デフォルトの名無しさんNGNG
三重婚
0177デフォルトの名無しさんNGNG
>>166
スペースとタブに限定するなら、何もしなくてもいいんじゃ?
0178デフォルトの名無しさんNGNG
>>166
素直にエディタの置換機能使うか、
Perlで書いた方が速いぞ。
0179デフォルトの名無しさんNGNG
>>174
使わないというより、使えないのです。
恥ずかしい話ですが、プログラミングを始めてからトントン拍子である程度これたのですが
配列、ポインタあたりからつまづき始め、いらだち始めてきたので気分転換に
今ある知識でちょいと簡単なプログラムを作ろうと思ったのです
0180デフォルトの名無しさんNGNG
>>179
総当りでやらなくちゃいけないから配列使わないと無理。
100個あったら100!分やらなきゃいけないわけで、配列以外では現実味が無い。
0181デフォルトの名無しさんNGNG
>>179
配列の勉強するいいチャンスだと思って。
0182デフォルトの名無しさんNGNG
>>179
ちょっとつまづいた位で勉強する気が失せるようだったら、
向いてないからプログラム辞めた方がいいよ。

そうでないなら、めげずにガンガレ!
0183デフォルトの名無しさんNGNG
つかな、配列でつまずくって、かなり早い段階でつまづいちゃったんだな(w
そら、本腰入れて配列の勉強しろよ。
きちんとした入門書を読むこと。これが一番。
0184デフォルトの名無しさんNGNG
>>179

俺も>>182-183と同意見。
配列C/C++に限らず、プログラム全般で基本かつ習得必須の概念。
ここでつまずいてちゃ、まともなプログラムはかけないよ。
「ここまでとんとん拍子」っていっても、その段階ではほとんど意味がない。
0185デフォルトの名無しさんNGNG
gets()などで文字とかを入力させるとき
Entを押す前にBsとかDelを押しても文字が消えません
一度打ってしまうと修正できないんですか?
0186デフォルトの名無しさんNGNG
>>185
環境による。
0187185NGNG
>>186
0188デフォルトの名無しさんNGNG
scanf()に代わる関数をうp汁
0189デフォルトの名無しさんNGNG
>>188
なんで?
0190デフォルトの名無しさんNGNG
>>185
ioctl()で消したりすることができるようになるかなぁ?
ちなみにgets()は使っちゃあかんぞぃ
fgets() (+scanf())にすべし。
>>186
異議なし。
0191190NGNG
ところで今長い数字を並べた文字列を8文字ずつ分割関数作っているんですが
初心者なんでどうも動作がおかしいんです。
(tokenはvector<int>として定義)
int BigInt::ceil_int(int numerator,int denominator)
{
int result = numerator/denominator;
if((numerator%denominator)!=0){
if(result>0)
result++;
else
result--;
}
return result;
}
0192190NGNG
BigInt::BigInt(stirng s)
{
set(s);
}

int BigInt::set(string s)
{
for(int i = 1;i <= ceil_int(s.length(),INTERVAL_BI);i++)
{
if((s.length()-i*INTERVAL_BI) < 0)
token.push_back(atoi(s.substr(0,s.length()%INTERVAL_BI).c_str()));
else
token.push_back(atoi(s.substr(s.length()-i*INTERVAL_BI,INTERVAL_BI).c_str()));
DEBUG(cerr<<i<<","<<token[i]<<endl);
}
}
これでBigInt bi("83758647673487563");とすると正しく分割されないんです。
どうしてでしょうか?
0193デフォルトの名無しさんNGNG
>>180-184

暖かい言葉ありがとう。
今回のプログラムは結果的にまったく完成せずに幕を閉じる、
創る楽しさを再発掘できたよ
ガンガってみる
そしたらまた、そうのうち作り直してみる
0194デフォルトの名無しさんNGNG
>191
まず、同じことをC++ではなく、Cで書いた場合、
ちゃんと動くものを書けるか?
0195デフォルトの名無しさんNGNG
>>191
if((s.length()-i*INTERVAL_BI) < 0)
↓
if((s.length() < static_cast<size_t>(i)*INTERVAL_BI)
0196デフォルトの名無しさんNGNG
あるクラスAが属性としてクラスBを持っていて(非ポインタ)、
クラスAで(new等で)明示的にクラスBを生成しない場合、
クラスBのコンストラクタはどの時点で呼ばれるのでしょうか?
あるいは呼ばれないのでしょうか?
0197デフォルトの名無しさんNGNG
#inlucde <iostream>
class B {
 B() { std::cout << "B::B()" << std::endl; }
 ~B() { std::cout << "B::~B()" << std::endl; }
};
class A {
 A() { std::cout << "A::A()" << std::endl; }
 ~A() { std::cout << "A::~A()" << std::endl; }
 B b;
};
main() {
 A* a = new A;
 delete a;
}
こんな感じで試した方が数段早く理解できると思う。
0198デフォルトの名無しさんNGNG
クラスAの基底クラスのインスタンスをを初期化した後。
0199デフォルトの名無しさんNGNG
boostのビルド方法を教えてください。
環境は、Visual C++ 7.1 + STLport 4.6.2。
これでboost 1.31.0をビルド・インストールしようとしています。

以下のように一部書き換えたvsvars32.batを実行して、
------------------------------------------------------
@set STLPORT_PATH=C:\STLport-4.6.2
@set STLPORT_VERSION=4.6.2
@set INCLUDE=%MSVCDir%\INCLUDE\stlport;%MSVCDir%\ATLMFC\INCLUDE;
%MSVCDir%\INCLUDE;%MSVCDir%\PlatformSDK\include\prerelease;
%MSVCDir%\PlatformSDK\include;%FrameworkSDKDir%\include;%INCLUDE%
@set LIB=%MSVCDir%\ATLMFC\LIB;%MSVCDir%\LIB;
%MSVCDir%\PlatformSDK\lib\prerelease;%MSVCDir%\PlatformSDK\lib;
%FrameworkSDKDir%\lib;%LIB%
------------------------------------------------------

bjam "-sTOOLS=vc7.1-stlport"
"-sBUILD=debug release <runtime-link>static/dynamic
<threading>multi <stlport-version>4.6.2"
"--without-python"

とやると、regex以外はビルドに成功するのですが、
0200199NGNG
ライブラリファイルをインストール後、
http://www.kmonos.net/alang/boost/classes/posix_time.html
記載のコードが、LNK2019エラーとなって
ビルドできません。

date_timeのビルドでエラーは出ないものの、
どうも、time_from_string()など、
一部の関数がライブラリファイルに含まれていないようです。

どなたか、同じ環境で正常にビルドできた方、
ビルド方法を教えて頂けるとありがたいのですが。
0201191NGNG
>>195さん、
どうも、ありがとうございました。ソースコードにtoken[i-1]の-1を忘れている
のにも気づかず、話もできません…
それでもバグを修正してくれてありがとうございました。
0202199NGNG
>>199-200
すみません。
以下のスレで訊いた方がよいような気がしてきたので、
質問を移しました。

【C++】template 統合スレ -- Part3
http://pc5.2ch.net/test/read.cgi/tech/1066493064/l50
0203196NGNG
>>197,198
ありがとうございました。
B()→A()→~A()→~B()
なのでちょっとびっくりしていました。
0204デフォルトの名無しさんNGNG
>>203
それ仕様。そうでないといろいろ困る。
0205デフォルトの名無しさんNGNG
Aが作られた時にBのインスタンスがないと、
Bのプロパティを初期設定したい場合どこで呼べばいいのかわからなくなる。
同様に、Aが破棄される際にBが先に破棄されていると
Bに終了処理が必要な場合、以下同文ということだな。
0206デフォルトの名無しさんNGNG
その辺のタイミングはコンパイルの仕方変えれば何とかなるだろうけど、
でも、現行の仕様が一番シンプルで分かりやすい。
0207196NGNG
なんとなく A()→B()→~A()→~B() かと思っていました。
>>205
激しく納得です。感謝。
0208デフォルトの名無しさんNGNG
VC++で、実行したときにどの変数にどんな値が入っているのかリアルタイムで下方に表示する方法教えてください
0209デフォルトの名無しさんNGNG
スレッドが違います。
0210デフォルトの名無しさんNGNG
環境依存OKじゃなかったの?
0211デフォルトの名無しさんNGNG
環境依存というか環境そのものについてだから↓あたりが適当と思われ。
★初心者にVisual C++を教えるスレ★ Part11
http://pc5.2ch.net/test/read.cgi/tech/1077965179/l50
0212デフォルトの名無しさんNGNG
環境依存OKな『C/C++室』なわけだな。
IDEだのデバッガの使い方はさすがにスレ違いだ。
つか、専用スレで聞いたほうが早いし。
0213デフォルトの名無しさんNGNG
// Box.h Definition of the Box class
#ifndef BOX_H
#define BOX_H

class Box {
public:
// Constructor
Box(double lengthValue = 1.0, double widthValue = 1.0, double heightValue = 1.0);

// Function to calculate the volume of a box
double volume();

private:
double length;
double width;
double height;
};

#endif

これの5行目のクラス宣言の部分でエラーが発生しコンパイル出来ません。
ちなみに、環境はウインXP、ボーランドbcc55です。サンプルは下のサイトからDLしたものです。
http://www.apress.com/book/bookDisplay.html?bID=218

どこがおかしいのでしょうか???どなたかお教え下さい。
0214デフォルトの名無しさんNGNG
エラーぐらい張れ
0215デフォルトの名無しさんNGNG
いやだからエラーなんです、という返答を少なからず期待してしまう俺はだめぽ。
0216デフォルトの名無しさんNGNG
.cからインクルードしているなどの理由でcとしてコンパイルしてたりして。
0217デフォルトの名無しさんNGNG
>>214
エラーメッセージは以下の通りです。
Box.h 5: 宣言の構文エラー

>>216
Box.hでコンパイルしてます。
0218デフォルトの名無しさんNGNG
・・・・・・
0219デフォルトの名無しさんNGNG
こりゃだめだ
0220デフォルトの名無しさんNGNG
状況がよくわからないけど
ヘッダをコンパイルしても意味ない
対になるbox.cppを探してコンパイルしる
0221デフォルトの名無しさんNGNG
>>220
一緒にコンパイルしようとしてますが、最初のヘッダの時点で、上記の
メッセージが出てコンパイル出来ません。
ちなみにコンパイルの際の入力方法としては、例えば、sample12_04であれば
bcc32 Box.h Box.cpp prog12_04.cpp
って入力してますけど。このやり方がおかしいんでしょうか?
必ず、Box.h 5: 宣言の構文エラー ってメッセージが出て進みません。
どうかお教え下さい。
0222デフォルトの名無しさんNGNG
・・・おいおい・・・
0223デフォルトの名無しさんNGNG
bcc32 -e prog12_04.exe prog12_04.cpp Box.cpp
0224デフォルトの名無しさんNGNG
>>223
すいません、ありがとうございます。Box.hはどうするんですか?これは指定する必要無いんでしょうか?
0225デフォルトの名無しさんNGNG
どうもお騒がせしました。こういうファイルがいくつかに分かれてる場合に
どうやってコンパイルするのかが分からなかったもので。
要するに、bcc32 prog12_04.cpp Box.cpp
で、ヘッダ以外をコンパイルし、それから、prog12_04.exe で実行すれば
良かった訳ですね。納得しました、どうもすいませんでした。
0226デフォルトの名無しさんNGNG
>>224
ヘッダファイルはこんなクラスや関数がある、と示すもので
インクルードして使う。コンパイルする必要がない。
http://www.nifty.com/webapp/digitalword/word/007/00721.htm

分割コンパイル、プロトタイプ宣言、ヘッダファイル、
オブジェクトファイルなどをキーワードにして勉強しませう。
0227デフォルトの名無しさんNGNG
いやー
何割かの人間が通る道かな?これはw
0228デフォルトの名無しさんNGNG
俺、ヘッダはコンパイルしたことないぞ・・・。
0229デフォルトの名無しさんNGNG
質問です!
C++のコンパイルエラーの一覧表みたいなものって
あったりしますかね?
解説付だとうれしいんですけど。

ググってみてもMLの記事ばっかりひっかかってしまいます。
0230デフォルトの名無しさんNGNG
>>229
VC++ならMSDNに付いてますよ。
0231デフォルトの名無しさんNGNG
コンパイラのヘルプ見れ。VCなんかはMSDNに載ってる。
0232デフォルトの名無しさんNGNG
>>229
割れ厨ならば通報しまつよ
0233デフォルトの名無しさんNGNG
bcc には付いていたっけ?
gcc は? man じゃ出てこないよね。
0234デフォルトの名無しさんNGNG
http://page4.auctions.yahoo.co.jp/jp/auction/d47227135
0235デフォルトの名無しさんNGNG
Cで質問です。
Visual C++.net使って、「独習C」読み進めてます。

以下のような文で、数字を文字として取得した際に、
何故、コメントアウトした文が必要なのかわかりません。
この式を抜いてコンパイルすると、
「n(数)」といれたはずが、「nn」となるのはカクニンしましたが・・・。

(前略)
char num;
printf("数字を入力:");
num = getche();
printf("\n");

/* num = num - '0'; */

if(num>=0 && num<10) printf...
(後略)
0236デフォルトの名無しさんNGNG
数字という0〜9までの「文字」と、数値は異なるものなので変換が必要です。
0237デフォルトの名無しさんNGNG
>>235
x = 0 と x = '0' の違いは分かる?
前者は 0 という数値を、後者は 0 という文字コードを x に代入している。
printf("value = %d, character code = %d\n", 0, '0'); を実行して確認してみると良い。
後は↓の二つを読んでちょ。

ASCII 文字コード表
http://e-words.jp/p/r-ascii.html

「−'0'」の部分の働きがよくわかりません。
http://www.jtex.ac.jp/qa_p34.html#Q12
0238デフォルトの名無しさんNGNG
絶対値を計算する関数absoluteの作成を手伝ってください。
なお、abs等のあらかじめ用意されている算術関数は利用せずに作らないといけないです。
0239235NGNG
>>236-237
あ、わかりました!
英字でなら、以前にやったことがあるかも。。。

ASCIIコードで '5' - '0' だったら、
53 - 48 ってことですよね。

スッキリしました、ありがとうございます〜。
0240デフォルトの名無しさんNGNG
>>238
どこが分からないのか言ってくれないと手伝えないよん。
0241デフォルトの名無しさんNGNG
absを使わずに計算するってところがわからないんです
0242デフォルトの名無しさんNGNG
>>238
int absolute(int a) {
if(a<0)
return -a;
else
return a;
}
0243デフォルトの名無しさんNGNG
とりあえずintで

int absolute(int n) {
return n < 0 ? -n : n;
}
0244デフォルトの名無しさんNGNG
>>241
それは日本語が分からないと言う事か?
0245240NGNG
おいいいい宿題スレじゃないべ。まあsoccer見てくるけど・・・。
0246デフォルトの名無しさんNGNG
連休前のせいか、どのスレでも「宿題やってちょ」厨がわいてるな。
0247デフォルトの名無しさんNGNG
どうもお騒がせしましたm(__)m
0248デフォルトの名無しさんNGNG
error C2143: 構文エラー : ';' が '型' の前にありません。
ってなんてことないところで出るんですが、なぜなんでしょう?
問題の行をコピペしてほかの所に貼り付けても、エラー出ませんでしたので
どうも二次エラーじゃないかと思うんですがどうでしょうか?

二次エラーだとしたら、一般的にどの辺を見直してみるとよいでしょうか?
0249デフォルトの名無しさんNGNG
>>248
一概には言えないが、大抵はその直前の行が終了していない(';'がないなど)。
0250248NGNG
mian内で宣言した変数名と
引数に持っていった関数の変数名が同じだと、その後、main内に戻ってきたときにその変数の値は受け継がれるのですか?

int yakugime(int te[])
{
int flush = ch_flush(te);
printf("%d\n",flush);

int straight = ch_straight(te);
printf("%d\n", straight);

return 0 ;//実験のため0
}
とかくと、6行目にエラーが出て、試しに4行目を//消してやってみると
なぜかch_flush内で配列teをいじってそのまま、
ch_straightにもっていかれるのです

たぶんこの二つのエラーは何か関係があるんじゃないかと思うのですがどうでしょうか?
0251デフォルトの名無しさんNGNG
>>250
いや、全く関係ない。
変数の宣言はブロックの先頭で行ってみればいいんじゃない?
それと、関数の引数の配列はポインタと同じなので、関数側でいじってるなら、それが反映される。
もちろん、それは変数名とは何の関係もない。
0252デフォルトの名無しさんNGNG
なるほど!配列も関数側で反映されるんですか。通りでおかしかった訳ですね
迅速な対応ありがとうございました
0253デフォルトの名無しさんNGNG
宣言を先頭で行ってみたらできました。
0254デフォルトの名無しさんNGNG
BCCで作っています。
ポインタ配列を拡張して、その拡張した先にstrcpyで文字列をコピーさせたいのですが、
アプリケーションエラーが出てしまい、strcpyが実行出来ません。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(void) {
char **ppData;
int i;

if ((ppData = (char **)malloc(sizeof(char *))) == NULL) {
exit(1);
}
ppData[0] = "aaaaaaaa";

// 配列を拡張
if ((ppData = (char **)realloc(ppData, sizeof(char *) * 10)) == NULL) {
exit(1);
}

// ココで落ちる
strcpy(ppData[1], "bbbbbbbb");
strcpy(ppData[2], "cccccccc");
strcpy(ppData[3], "dddddddd");
strcpy(ppData[10], "kkkkkkkk");
free(ppData);

return 0;
}

どのようにすればstrcpyを行うことが出来るのでしょうか…?
0255デフォルトの名無しさんNGNG
>>254
strcpy(ppData[1], "bb..."); とあるが、ppData[1] はどこ指してると思う?
0256デフォルトの名無しさんNGNG
>>254
ポインタの配列の領域は確保しているが、文字列が入る領域を確保してない。
0257デフォルトの名無しさんNGNG
>>255さん、>>256さん
ご指摘ありがとうございます。

配列を拡張した後にcallocをすることで、
ちゃんとstrcpyを実行する事が出来ました。

ありがとうございました。
0258252NGNG
配列を引数に渡しても値が変動しない方法ってないでしょうか?
いろいろ考えたのですが、どうもよい方法が思いつきません

一回一回、初期化しなおすか、配列を使わないでやるぐらいしか・・・
0259デフォルトの名無しさんNGNG
>>258
受け取る側でコピーしてやればいいわけで。
0260デフォルトの名無しさんNGNG
>>258
配列はポインタとして関数に渡されるってのは基本だよ。ちゃんと覚えとかな。
無理やり値渡ししたかったら構造体にすると言う手もあるが。
書き換えを許さない場合、C++ならconst修飾して関数側で必要に応じコピーを
作るってのが普通。
pureCはどうするのか分からん(w
0261デフォルトの名無しさんNGNG
OSはWindowsXPHomeEdition コンパイラはbcc5.5を使っています。

boostを勉強してみようと思い、サンプルを探してコンパイルしてみようと思ったのですが
boost関連の.hppファイルと、rpcnsip.hファイルを同時にインクルードしようとすると、
rpcnsip.hの構文エラーがでてコンパイル出来ません。
どちらとも別々に使った場合はエラーが起こりません。
例えば
#include <rpcnsip>
#include <boost/config.hpp>

int main() {
return 0;
}
のようにするとエラ−が起こります。
どなたか解決方法を御存知ないですか?
0262デフォルトの名無しさんNGNG
>>261
エラーについて相談するときはエラーメッセージ貼れよ。
0263デフォルトの名無しさんNGNG
bccでboostか。
0264261NGNG
>>262
>>261にかいてあるコードをそのままコンパイルしたときのエラー(一部)です。
エラー E2303 c:\Borland\Bcc55\include\rpcnsip.h 30: 型名が必要
エラー E2139 c:\Borland\Bcc55\include\rpcnsip.h 30: 宣言に ; がない
エラー E2303 c:\Borland\Bcc55\include\rpcnsip.h 31: 型名が必要
エラー E2139 c:\Borland\Bcc55\include\rpcnsip.h 31: 宣言に ; がない
エラー E2303 c:\Borland\Bcc55\include\rpcnsip.h 32: 型名が必要
エラー E2139 c:\Borland\Bcc55\include\rpcnsip.h 32: 宣言に ; がない
エラー E2141 c:\Borland\Bcc55\include\rpcnsip.h 40: 宣言の構文エラー
エラー E2238 c:\Borland\Bcc55\include\rpcnsip.h 47: 'RPCNSAPI' の宣言が複数見つかった
エラー E2344 c:\Borland\Bcc55\include\rpcnsip.h 40: 一つ前の 'RPCNSAPI' の定義位置
エラー E2141 c:\Borland\Bcc55\include\rpcnsip.h 47: 宣言の構文エラー
エラー E2238 c:\Borland\Bcc55\include\rpcnsip.h 55: 'RPCNSAPI' の宣言が複数見つかった
エラー E2344 c:\Borland\Bcc55\include\rpcnsip.h 47: 一つ前の 'RPCNSAPI' の定義位置
エラー E2141 c:\Borland\Bcc55\include\rpcnsip.h 55: 宣言の構文エラー
エラー E2238 c:\Borland\Bcc55\include\rpcnsip.h 63: 'RPCNSAPI' の宣言が複数見つかった
エラー E2344 c:\Borland\Bcc55\include\rpcnsip.h 55: 一つ前の 'RPCNSAPI' の定義位置
エラー E2141 c:\Borland\Bcc55\include\rpcnsip.h 63: 宣言の構文エラー
0265デフォルトの名無しさんNGNG
>>261
そらboostのせいじゃなくてrpcnsip.hに必要なマクロが定義されないだけ。
0266デフォルトの名無しさんNGNG
>>265
では、どのように対処すればいいのでしょうか。
試していたところ、windows.hでも同様なエラーが発生しました。
rpcnsipやwindows.hと.hppファイルを同時にインクルードしなければ、
エラーは発生しないようなのですが…。
0267デフォルトの名無しさんNGNG
>>264
>>261にwindows.hを追加すれば、うちではエラーは出ないで正常にコンパイルできる。
やはり問題はboost以外にありそうな気がするが。
BCCの設定は間違いないのか?


あと、自分から情報は提示しようとせず、ソースすら晒さずに
「どのように対処すればいいのでしょうか」と聞かれても、
「知るかボケッ、自分で考えろ!」としか回答のしようがないのだがね。
0268デフォルトの名無しさんNGNG
C++標準ライブラリ チュートリアル&リファレンス等に
算術関数は浮動小数点に対して定義してあるので整数 x に対して用いる場合
std::sqrt( float(x) );
とすると良い、とあるのですがこのfloat(x)というのはどこで定義されていて、
どれほど可搬性があるのでしょうか。またstatic_cast<float>(x)とはどう違う
のでしょうか。
0269デフォルトの名無しさんNGNG
>>268
floatじゃなくてdoubleじゃないんかという話はさておき。

それはC++標準のキャストの1つ。
変換先が組み込み型であればstatic_castと同じ。
0270デフォルトの名無しさんNGNG
>>269
多謝。組み込み型なら同じなんですね。fortranみたいな表記でびっくりです。

ちなみにC++標準ライブラリ チュートリアル&リファレンス by Nicolai M. Josuttis
では float, double, long doubleにオーバーロードされているのでこれらの内
ならどれでもOKとして、サンプルではfloat(x)を使っていました。

Anjuta使っているのですが、Anjutaの型表示では確かにdoubleと表示されます。
0271デフォルトの名無しさんNGNG
そのまま解釈するとint→float→doubleに変換されそうだ…。
最適化してくれると思うけど。
0272デフォルトの名無しさんNGNG
>>271
だからオーバーロードされてるって言ってるだろ。
0273デフォルトの名無しさんNGNG
質問です。
あるクラスが異常にでかくなってきたので、
サブクラスを作って分割したいのです。
特殊な処理を行う機能を追加したら、そのサブルーチンが
相当な量になってしまっとるような状況なんですよ。
できればその処理だけ別のクラスを作ってやりたいの
ですけど、いい方法教えてください。
0274デフォルトの名無しさんNGNG
>>272
オーバーロードされているといっても、
たいていの実装のfloat版sqrtはfloat型の引数を
doubleにキャストしてdouble版sqrtを呼んでいるだけだから、
最適化が無ければint→float→doubleの2度手間になってしまう。
0275デフォルトの名無しさんNGNG
>>273
そのクラスの設計を最初からやり直す。
0276デフォルトの名無しさんNGNG
>>274
最適化を施しても精度をfloat相当まで落とす処理が無駄な手間になる。
0277デフォルトの名無しさんNGNG
>>273
それだけじゃ、誰も答えられんだろ。
といって、その膨大なクラスのソースコードを見せられても読む気しないし。
デザパタでも勉強してください。
0278デフォルトの名無しさんNGNG
>>273
書籍「リファクタリング」を読む。
0279デフォルトの名無しさんNGNG
>>274
そういう書込みが、doubleとfloatの速度が同等もしくはdoubleの方が速いという誤解を蔓延させている。
0280デフォルトの名無しさんNGNG
>>279
脊髄反射でレスしないで、ちゃんと元発言からの話の流れを把握してから書き込もうね。
だれも速度の話はしていないよ。>>268-272 >>274 >>276
0281デフォルトの名無しさんNGNG
>>279
そりゃ一概に言えないだろ…特定環境の話をしているのかね?
ちなみにうちのWindowsマシンの浮動小数演算コプロセッサは80bitバスで、
それ以下のbitの場合はすべてそれにキャストして演算されているようですが…。
あ、もしかして、短い分だけキャッシュに乗りやすくなるとか、
メモリのフェッチ時間が短くなるとか、そういう話かな?
それならほぼ正しいかも知れず…。
0282デフォルトの名無しさんNGNG
脊髄反射って?例えば射精とかか?
あー、あれは違ったか。
0283デフォルトの名無しさんNGNG
>>261
http://www.boost.org/more/borland_cpp.html
0284デフォルトの名無しさんNGNG
ん、>279って射精したの?
0285デフォルトの名無しさんNGNG
279じゃないけど射精しました。
0286デフォルトの名無しさんNGNG
C++が使える環境で、バイナリデータを取り扱うときにどんな型/クラスを使うと楽?
やっぱりchar配列?
0287デフォルトの名無しさんNGNG
じゃないの?
0288デフォルトの名無しさんNGNG
ビットマップみたいに大量のバイナリデータをぐるぐる回す場合は、int使ったほうがいい場合もある。
0289デフォルトの名無しさんNGNG
OSはWindows2k sp4 
環境はVC++6.0です

string型を格納するlistを含むclassを作ってコンパイルすると
エラーはでないんですがWarningが出てきます.
warning C4786: '?$reverse_bidirectional_iterator@Viterator@?$list@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@V?$allocator@V?$basic_string@DU?$char_traits@D@std@@V?$
allocator@D@2@@std@@@2@@std@@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@3@AAV43@PAV43@H' : 識別子が '255' 文字に切り捨てられました (browser 情報内)。

こんなのが何個も出てきます.
ソースはこんな感じです.

#include <list>
#include <string>
using namespace std;

class Base
{
list<string> lst;
list<string>::iterator p;
};

解決方法はありますか?
0290デフォルトの名無しさんNGNG
pragma warning disable 4786
0291デフォルトの名無しさんNGNG
warning 4786で検索したら出てきた.
スマソ
いままでlistとかstringで調べてた
>>290 thx!!
0292デフォルトの名無しさんNGNG
>>286
>>288
BMPデータで一ドットが32bitだったりする場合ね
24bitだと逆に遅く…
0293デフォルトの名無しさんNGNG
>>292
いや、場合によるだろ。
ピクセル単位の処理じゃないかもしれないし
次のピクセルのバイトはとっておくとかもできる。
0294デフォルトの名無しさんNGNG
「20L(リットル)以下は80円/L、20Lを超えた分については、
1割引になる」というプログラムを作成してみたのですが上手くいきません。
何処がおかしいのか教えていただけませんか?


#include <stdio.h>
main()
{
double fuel;
double rate;
double charge;
printf("給油量");scanf("%d",fuel); /*給油量の入力*/
printf("石油の単価");scanf("%d",rate);
if(fuel<=20){charge=fuel*rate;} /*給油量が20L以下の時*/
else{charge=(fuel-20)*rate*0.9+rate*20;} /*給油量が20Lを超える時*/
printf("料金%d",charge); /*料金を出力*/
}
0295デフォルトの名無しさんNGNG
>>294
scanf関数の使い方
0296デフォルトの名無しさんNGNG
printf("給油量");scanf("%d",&fuel); /*給油量の入力*/
printf("石油の単価");scanf("%d",&rate);

&をいれなおしてやってみましたがどうしても料金が0円
になってしまいます。
0297デフォルトの名無しさんNGNG
>>296
%dじゃなくて%lf
0298デフォルトの名無しさんNGNG
ああ、そうか・・
double型ですもんね^^;
解決しました、ありがとうv
0299デフォルトの名無しさんNGNG
// a.h
static int a = 1;

// b.h
#include "a.h"
static int a = 2;

aが再定義されていますというエラーがでるのですが、
staticにするとそのファイル内だけで有効になって、他のファイルで定義されていても被らないんではないんですか?
0300デフォルトの名無しさんNGNG
>>299
#includeは単純にファイルを挿入するだけで、それはプリプロセッサの仕事。
コンパイラはそんなことは知らない。
0301デフォルトの名無しさんNGNG
>>300
なるほど。ありがとうございます。
0302デフォルトの名無しさんNGNG
2つの値を保持するテンプレートを作って、SIZEやPOINTにキャストできるようにしたり
以下のように演算子を定義しました。(部分抜粋です)
friend UPair<T1, T2> operator +(const UPair<T1, T2> &up1, const UPair<T1, T2> &up2){
UPair<T1, T2> ret;
ret.m_t1 = up1.m_t1 + up2.m_t1;
ret.m_t2 = up1.m_t2 + up2.m_t2;
return ret;
};
friend UPair<T1, T2> operator -(const UPair<T1, T2> &up1, const UPair<T1, T2> &up2){
UPair<T1, T2> ret;
ret.m_t1 = up1.m_t1 - up2.m_t1;
ret.m_t2 = up1.m_t2 - up2.m_t2;
return ret;
};

コンパイルすると
fatal error C1001 : 内部コンパイラエラー が出てしまいます。
operator-の部分をコメントアウトすると無事通るのですが、何が悪いのでしょうか?
おしえてください。
0303デフォルトの名無しさんNGNG
すいませんVC++6.0です。
0304デフォルトの名無しさんNGNG
>>302
それを見る限りでは問題なし。
はて、ソースのほかの部分に問題があるのか、VCの問題なのか。
0305デフォルトの名無しさんNGNG
>>304
どうもです。

他の部分と言うと
メンバ変数とコンストラクタ、デストラクタ、
POINTとSIZEへのキャスト演算子ぐらいしかないです。

operator-の部分に何かあるらいと思い、
動作(差を取って返す)はそのままで"operator *"や"operator /"に変えたらコンパイルできました。
また、operator-であっても、第2引数をintやdoubleなど変えれば通ります。
駄目元でリビルドもしました。
なんか非常に特殊な状況のような気がしてきました...
0306デフォルトの名無しさんNGNG
>>305
VC7.1ではすんなり通りました。VC6.0固有の問題かと思われます。
0307デフォルトの名無しさんNGNG
部分特殊化をしてないかチェックしましょう。
VC6は部分特殊化はサポートしてないはず。
0308302NGNG
試しにやった、Win98+6.0Standardで通ったのでバージョン固有なのかと思い、
WinXP+6.0Enterpriseにsp6を導入したところ無事通りました。
お騒がせしました。

ところで部分特殊化とは何でしょうか?是非教えてください。
0309デフォルトの名無しさんNGNG
俺はVC6の場合はテンプレート/STLは信用しないので使わないようにしてる
0310デフォルトの名無しさんNGNG
>>308
こんなのかな、特殊化の中でもまだTとかの残っているもの
template <typename T>
struct Isvector{
    enum{value=0};
};
template <typename T,typename A>
struct Isvector<std::vector<T,A> >{
    enum{value=1};
};
template <int i,int j>
struct static_gcd{
    enum{value=static_gcd<j,i%j>::value};
}
template <int i>
struct static_gcd<i,0>{
    enum{value=i};
}
0311デフォルトの名無しさんNGNG
ふむふむ...
特殊化 ≒ テンプレートのオーバーロード
部分特殊化 ≒ ↑の型が任意である余地の残っている場合
...でなんとか理解できてるのでしょうか?
自信は無いです_| ̄|○
0312デフォルトの名無しさんNGNG
>311
テンプレートのオーバーロードという表現は分かってる人になら通じるし、
そういう見方も出来るのは分かるんだけど、テンプレートとオーバーロードは
本質的に異なるものなので、あんまりその表現はお勧め出来ない。
0313デフォルトの名無しさんNGNG
質問させてください。

C++なんですが、たとえば下のようなクラスを定義します

class test{
private:
int a:
int b;
public:
test(void){
a = 0;
b = 0;
}
test(int c,int d){
a = c;
b = d;
}
};

で、宣言の際に
test myclass(1,2);
としてconstructorに値が流れた場合、メモリはどのように確保されていくのですか?
constructorが呼ばれた段階でcとdが作られるのはわかるのですが、aとbが生成される
タイミングがわかりません。どなたか教えてください
0314デフォルトの名無しさんNGNG
>313
もし、コンストラクタが呼び出された後に、aとbが生成されるとしたら
コンストラクタの中で何が起こりますか?
0315デフォルトの名無しさんNGNG
>>313
int f
{
  test myclass(1,2);
}
このように書いたときは、
1.fのスタック上にaとbとを格納する領域が連続して確保される。
2.この領域へのポインタが引数の1, 2とともにtestのコンストラクタに渡される。
3.testのコンストラクタは、渡されたポインタを元にa, bに代入する。
0316デフォルトの名無しさんNGNG
つかコンパイラ依存じゃないの?
>>313の環境も聞かずにわかることなの?
0317デフォルトの名無しさんNGNG
C++についての質問です。
newを使って2次元配列を確保しました。
その中に値を入れたいのですが、
{{1,1},{1,1}}のように一回ですべての配列に値を入れる方法はありますか?
0318デフォルトの名無しさんNGNG
CとC++ではどちらの方が実行速度が速いコードになるんですか?
完全にコンパイラに依存することですか?
C++でクラスを使うと遅くなるって聞いたんですが、
本当なんですかね。
0319デフォルトの名無しさんNGNG
Cのenumについて教えてください。

enumはdefineと違ってプリプロセッサが処理するわけではないということのようですが、
では、実際にどんな風に処理されるのでしょうか?
例えば、

enum{ hoge, foo, bar};

と書いておいて、

int n;
n = bar;

とすれば、nは2になるわけですけれど、hoge、foo、barは変数ではないし、defineを使う場合のように、
プリプロセッサが具体的な数字に置き換えてしまうわけでもないわけですよね。
hoge、foo、barは変数でないけれど、それぞれをconst変数のようにメモリの一部に格納すれば
実現可能ですが、それもなんだか変な感じがします。

単に疑問に思っただけで、具体的に何か困っているわけではないのですが、
気になったので、識者の方々、ご存知でしたら教えてください。
#環境はgccでもVCでもbccでもなんでも良いです。

よろしくお願いします。
0320デフォルトの名無しさんNGNG
>>319
hoge, foo, barは「定数」。
コンパイラにとっては"bar"も"2"も似たような物だと言えば分かりやすいかな?
実際多くの環境でn=2;と書いた時と全く同じコードが生成されると思う。
0321デフォルトの名無しさんNGNG
Cとプリプロセッサは同時に出来たわけじゃないってことだーね
0322デフォルトの名無しさんNGNG
>>320
今、C言語の本の定数のところを読み返してみました。
なるほど、enumが定数表現の一種と思ったらすんなり理解できました。
本の最後の方にあるプリプロセッサのところを読むころには
最初の方に書いてあった定数のことが頭から抜けていた私です。

どうもありがとうございました。あーすっきりした。

>>321
えぇ?これは私へのレスですよね?
うーん、なんか難しすぎて意味が良くわかりません。
もすこし勉強してきます。
0323デフォルトの名無しさんNGNG
ANSI Cとただの昔のCの事か?
#include <stdio.h>
int
main(argc,argv)
int argc;
char *argv[]
{
printf("Hello");
}
0324デフォルトの名無しさんNGNG
>>317
無い。
0325デフォルトの名無しさんNGNG
カーソルキーとスペースキーの押下状態を調べる
コンソールプログラムなんですが、
http://venus.aez.jp/uploda/dat/upload6824.lzh

[←][↓][SPACE] や、[↓][→][SPACE] の同時押しを実行すると、
押されているにもかかわらず押されていないと判定されるキーが
出てきてしまいます。

Win9xでは問題なく動作していたのですが、XP に乗せ替えた途端に
このような状態になってしまい、どうしたものかと。皆さんの環境では
問題なく動作しますでしょうか。お手数でなければご報告よろしく
お願いします。

プログラムを終了するときはエスケープキーを押してください。
0326デフォルトの名無しさんNGNG
#include <stdio.h>
main()
{
int im;
im=0;
while(im<11){
printf(" HELLO ");
im = im+1;
}
}

このプログラムを実行する際に「HELLO」が表示されたりされなかったり
して不安定なんですがなぜでしょうか?
環境のせいだと思うんですが・・・
自分はXPをつかっていてエディタはCPad、コンパイラはLSI C-86
です。
0327デフォルトの名無しさんNGNG
>>326
printf(" HELLO \n");
0328デフォルトの名無しさんNGNG
>>327
だめでした;;
本来なら表示されているはずのところに何も表示されません、
行間はちゃんととられてるのでプログラム自体は正常に動いている
ようですが・・・
0329デフォルトの名無しさんNGNG
コンパイルし直すと違うの?それともコンパイルし直さなくてもそう?
0330326NGNG
しばらくしたら自然に治りました^^v、特に設定変えたわけでもないのに
わけわかりません・・・^^;
0331デフォルトの名無しさんNGNG
>>328
漏れんとこじゃ表示できたんだけどなぁ。
printfで表示できない環境なんて聞いたことはないけど、
絶対ないとは言い切れないから、それかもね。
0332326NGNG
>>329
ほんとに突発的になるんですよ・・・、
文字の表示に関する設定のどこかだと思うんですが・・・
0333デフォルトの名無しさんNGNG
>>326

あんまり意味ないとは思うけどprintfのあとに
fflush(stdout);
とかつけてみたら?
0334デフォルトの名無しさんNGNG
>>326

えと、326ではりつけてるプログラムが実は説明用のプログラムで
本当はもっと複雑なプログラムで問題が起こっているなんて事は
ないですよね。

もっと複雑なプログラムでprintfでデバッグなんかしてて、
プログラムを実行すると途中で落ちちゃうんだけど、
どのprintfも実行されてないなぁ…おかしい!
なんてことはないですよね。

もし、「実は正にそうですた」ならば上で書いたfflushは有効かもしれません。
printfで出力したものは、実はバッファにためられてあとでまとめて出力されます。
プログラムの正常終了時にはちゃんと吐き出されますが
異常終了時には表示されないこともあります。
fflushをつかえば、その時点で出力されます。

なんてえらそうに書いちゃったけど、もし「そんなの知っていますよ」だったらごめん。
0335デフォルトの名無しさんNGNG
WindowsNT/2000上の CPad for LSI C-86 で、コンパイルはできるが、実行結果が表示されない
きときと - CPad - Q&A
http://hp.vector.co.jp/authors/VA017148/pages/cpadqanda.html#lsiconnt
0336デフォルトの名無しさんNGNG
質問です。Cをかんばってるんですが・・・
#include <stdio.h>
int token[] = {387892,37428737,37468763};

void main(void){
int i;
char[1024] buf;
for(i=0;i <(sizeof(token)/sizeof(int));i++)
sprintf(buf,"%d%s",token[i],buf);
printf("%s\n",buf);
}
tokenを逆順に繋げていって文字列にしたいんですがうまくいきません。どうしてでしょうか?
0337デフォルトの名無しさんNGNG
>>336
char[1024] buf; ←
0338336NGNG
すみません。char buf[1024] = "";を間違えてかいていました。
なぜがコピーできなかったので自分でかいてミスしていました。
それにしてもどうしてでしょうか?
0339デフォルトの名無しさんNGNG
>>338
最終的にbufの中はどうなってほしいんだ?
0340339NGNG
3746876337428737387892
こうか?
0341デフォルトの名無しさんNGNG
領域が重なる場合にstrcpyやmemcpyを使ってはいけないのと一緒。
0342デフォルトの名無しさんNGNG
なんでintで文字作ってるの?
0343デフォルトの名無しさんNGNG
#include <stdio.h>
int token[] = {387892,37428737,37468763};

void main(void){
int i;
char buf[1024];
for(i=0;i <(sizeof(token)/sizeof(int));i++)
sprintf(&buf[i],"%d\0",token[(sizeof(token)/sizeof(int))-(i+1)]);
printf("%s\n",buf);
}
0344336NGNG
>>340さん
そういう事なんですが・・・
>>343さん
どうもそのソースコードでもうまくいかないんです。
33387892となってしまいます;
ちなみに私の環境はLinuxコンパイラはgccです。本当に済みません;
0345326NGNG
>>334-335
それぞれの追加してみたところなんとか安定動作するようになりました^^
fflushっていうのは初耳でしたが、次からは付けてみようと思いますv
ありがとうございました♪
0346デフォルトの名無しさんNGNG
引数に座標がある関数、TextOut、SetPixelなどはx、yの順番ですが、
一般の二次元配列がhoge[y][x]とy、xの順番である以上、
同じようにy、xの順番にしたほうがいいと思うのですが、
なぜ逆になっているのでしょうか。
0347デフォルトの名無しさんNGNG
>>346
世間一般では、(x, y)というようにxを先行させるのが常識だねぇ。
二次元配列とは意味が違う。
0348デフォルトの名無しさんNGNG
他スレから誘導されてきました。宜しくお願いします。
if(!x)という式は
xが0の時にif文が実行され、
xが0でないときは実行されないと解釈して宜しいでしょうか?
0349デフォルトの名無しさんNGNG
>>348
>他スレから誘導されてきました。宜しくお願いします。
誘導されたとは言え、向こうで書かれたことを頓着してないわけね。
>if(!x)という式は
それは式ではない。
>xが0の時にif文が実行され、
>xが0でないときは実行されないと解釈して宜しいでしょうか?
質問の意味が、下の例の場合にどっちが実行されるかと言う意味ならば、
xが0ならば 1のブロックが実行され、そうでないなら2のブロックが実行される。
if (!x) {
 /* 1 */
} else {
 /* 2 */
}
0350デフォルトの名無しさんNGNG
つーか試してみればわかるじゃん
0351デフォルトの名無しさんNGNG
while文でのループの範囲ってどこにあたるところですか?
0352デフォルトの名無しさんNGNG
while(expr)/*ここから*/{

}/*ここまで*///だと思う
0353デフォルトの名無しさんNGNG
よそで質問したのですがレス貰えなかったので、ことわり入れて移動してきました。

Microsoft Visual C++ Toolkit 2003がDL出来る様になったので、PSDKなど
揃えBCC5.51でコンパイル出来なかったDXSDK8.1のサンプルのコンパイルに挑ん
でみました。が、その殆どがReleaseビルドではwarning吐きながらもコンパイル
できるのですがDebugビルドではリンカーエラーでEXEファイル作ってくれません。
ネットで検索したところ、Libファイルの取り込み忘れ等あるのですが、サンプル
付属のMAKEファイルをNMAKEで処理しているので、どうしていいのか解りません。
解る人おられましたら教えてください。
以下エラーです。

Microsoft(R) Program Maintenance Utility Version 7.10.3077
Copyright (C) Microsoft Corporation. All rights reserved.

Warning: cannot find "donuts3d.dep"
link.exe @C:\TEMP\nm5D.tmp
LINK : warning LNK4224: /PDBTYPE is no longer supported; ignored
d3dfont.obj : error LNK2019: unresolved external symbol __ftol2 referenced in fu
nction "public: long __thiscall CD3DFont::InitDeviceObjects(struct IDirect3DDevi
ce8 *)" (?InitDeviceObjects@CD3DFont@@QAEJPAUIDirect3DDevice8@@@Z)
donuts.obj : error LNK2019: unresolved external symbol __ftol2 referenced in fun
ction "protected: void __thiscall CMyApplication::ConstructMenus(void)" (?Constr
uctMenus@CMyApplication@@IAEXXZ)
.\Debug\donuts3d.exe : fatal error LNK1120: 1 unresolved externals
NMAKE : fatal error U1077: 'link.exe' : リターン コード '0x460'
Stop.

よろしくお願いします。
0354325NGNG
すみません、前回のがうまくダウンロードできなかったかも
しれません。今度はバイナリだけです。多少変更しました。
http://www.uploda.net/anonymous/etc2/upload23193.lzh

たとえば、[←][↓]を同時に押した状態のまま、[スペース]を
押したとき、画面の "スペース" の横に○印が表示
されますでしょうか?
0355デフォルトの名無しさんNGNG
>>354
d3dx.libのリンクし忘れ
0356325NGNG
>>355
DirectXは使っていなくて、GetAsyncKeyState() API でキーの状態を
チェックしています。>>355さんの環境でも、[←][↓]を押したまま
[SPACE]キーを押しても、スペースキーが押されていないような反応を
示しました?
0357デフォルトの名無しさんNGNG
>>356
>>355は>>353へのレスだと思われ
0358デフォルトの名無しさんNGNG
っとと、すまん>>353な。

あと、キーボードの同時押しは組み合わせによって認識されないキーがあったはずだけど。
0359325NGNG
>>357
どうりでかみ合っていないなと思いましたw
0360325NGNG
>>358
>キーボードの同時押しは組み合わせによって認識されないキーがあったはずだけど

やっぱりそういうのがあるんですか…。
これらのキーを同時に処理しなければならないので困ったもんです。
こちらももう少し調べてみます。ほかにも何か情報をお持ちの方が
いらっしゃいましたらお願いします。
0361デフォルトの名無しさんNGNG
やねうらおのBM98の記事でその辺詳しく解説されてたと思うけど
キーボードを変えるしかない。
0362353NGNG
>>355さんありがとう
MAKEファイルの記述はこうなっています。

CPP=cl.exe
CPP_PROJ=/nologo /MLd /W3 /Gm /GX /Zi /Od /I "..\..\common\include" /D "WIN32"
/D "_DEBUG" /D "_WINDOWS" /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /c
LINK32=link.exe
LINK32_FLAGS=d3dx8dt.lib d3d8.lib d3dxof.lib dinput.lib dxguid.lib winspool.lib oleaut32.lib
uuid.lib dxerr8.lib ole32.lib winmm.lib kernel32.lib user32.lib gdi32.lib comdlg32.lib
advapi32.lib shell32.lib /nologo /subsystem:windows /incremental:yes /pdb:"$(OUTDIR)\dmboids.pdb"
/debug /machine:I386 /out:"$(OUTDIR)\dmboids.exe" /pdbtype:sept

d3dx.libをd3dx8dt.libの前に追加しますと、

d3dx8dt.lib(d3dxmath.obj) : error LNK2005: _D3DXColorAdjustContrast@12 already d
efined in d3dx.lib(d3dumath.obj)
↑同様ERRORが山ほど出る
d3dfont.obj : error LNK2019: unresolved external symbol __ftol2 referenced in fu
nction "public: long __thiscall CD3DFont::InitDeviceObjects(struct IDirect3DDevi
ce8 *)" (?InitDeviceObjects@CD3DFont@@QAEJPAUIDirect3DDevice8@@@Z)
music.obj : error LNK2001: unresolved external symbol __ftol2
.\Debug\dmboids.exe : fatal error LNK1120: 1 unresolved externals
NMAKE : fatal error U1077: 'link.exe' : リターン コード '0x460'
Stop.
と違うエラー出る様になり、d3dx8dt.libより後に追加しますと、最初のエラー
と同じです。
DirectXサンプルの他に、ポリゴン扱うサンプルも試してみたのですが、
error LNK2019: unresolved external symbol __ftol2
このエラーで失敗します。
symbol __ftol2はlibc.libだと思うのですがよく分かりません。
コンパイラオプションに/QIfistを追加するとビルドできるのですが・・・・・・
0363デフォルトの名無しさんNGNG
>>362
Debug版ランタイムって確か入ってないと思ったけど…。
0364353NGNG
>>363さんありがとう。
DXSDKインストールする時にDebug版で入れました。
libc.libはNODEBUG、DEBUG版はlibcd.libで、無ければコンパイル時に
CAN NOT OPEN FILEになります。(コンパイラオプション/MLdで自動読み込み
なのでMAKEファイルに記述してもしなくてもよい)
LIBPATH:通ってますしDirectXのファイル不足は無いと思います。
が、libcd.libにsymbol __ftol2があるかどうかと言う事なら、私には解りません。
DXSDKサンプルではない、他のポリゴン扱うサンプルでのReleaseビルドでも
LNK2001: unresolved external symbol __ftol2
が出て先へ進めない現状です・・・・・・
0365353NGNG
d3dfont.obj : error LNK2019: unresolved external symbol __ftol2 referenced in fu
nction "public: long __thiscall CD3DFont::InitDeviceObjects(struct IDirect3DDevi
ce8 *)" (?InitDeviceObjects@CD3DFont@@QAEJPAUIDirect3DDevice8@@@Z)

これってsymbol __ftol2 が見つからないってエラーでは無く、
public: long __thiscall CD3DFontが見つからないって事でしょうか?(^^;
0366デフォルトの名無しさんNGNG
あるのならVC6.0とかでコンパイルしてみたら?
なんか、VCTK2003は標準ランタイムが足りないんじゃないかって思えてきた。
0367353NGNG
>>366さんどうも。
おっしゃる通りVCTK2003だけでは全然足りません。
これにPSDK+DDK+サービスパック等で不足補いました。
見かけ上ファイルは揃いましたが、バージョン違いによるライバラリ等の整合性
が取れないのかもしれません。
ですが、DXSDKサンプルはReleaseでならビルド出きるわけでなんとも。
0368デフォルトの名無しさんNGNG
>>367
まあSDKとか足りてないのは当然なんだけど。
LINK : warning LNK4224: /PDBTYPE is no longer supported; ignored
とかあることだし、デバッグのサポートが無効になっていて
標準Cランタイムもデバッグ版は付属してないとか言うオチじゃないの?
0369デフォルトの名無しさんNGNG
>>368さんどうも。
Visual C++ Toolkit 2003付属コンパイラ(cl.exe)は、一部サポート無効とか
の廉価版では無く、制限の無い、一番上の物らしいです。
オプション/pdbtype:はVC6にはあった様ですがVC7からは変更になった様で、
デバッグサポートが無効というわけではないようです。
標準Cランタイムも全て揃っているのか私にはわかりません。
手掛かりは__ftol2とコンパイラオプション/QIfistでしょうか。
0370デフォルトの名無しさんNGNG
全画面表示で開くウィンドウに何らかの文字を表示して、ESCキーを押すと
閉じるものを作りたいのですがどうすればいいのでしょうか
Cです。よろしくお願いします
0371デフォルトの名無しさんNGNG
ただしその場合、質問者は必ず、環境を書きましょう。
0372デフォルトの名無しさんNGNG
DirectX SDKってマイクロソフトの何所にあるのですか?
言われてもわからないのでリンク張ってくださるとありがたいです
0373デフォルトの名無しさんNGNG
>>372
自分で探せ。探せないのなら、DirectXなんか使えない。
0374デフォルトの名無しさんNGNG
>言われてもわからないので
プ
0375370NGNG
OSはMeでLSI C-86試食版をつかっています
お願いします
0376デフォルトの名無しさんNGNG
>>375
諦めろ。
0377デフォルトの名無しさんNGNG
>>375
OpenGLでGLUTってことでいいのかな?

void displayfunc(void)
{ /* 何らかの文字を表示 */ }

void keyboardfunc(unsigned char key, int x, int y)
{ if (key == 033) exit(0); }
...
int main(int argc, char *argv[])
{
  glutInit(&argc, argv);
  glutInitWindowPosition(0, 0);
  glutInitWindowSize(glutGet(GLUT_SCREEN_WIDTH), glutGet(GLUT_SCREEN_HEIGHT));
  ...
  glutCreateWindow("hoge");
  glutKeyboardFunc(keyboardfunc);
  glutDisplayFunc(displayfunc);
  ...
  return 0;
}
0378デフォルトの名無しさんNGNG
LSIC-86は16bitコードしか生成できないのでは?
0379デフォルトの名無しさんNGNG
お世話になります。
C++でコンソールアプリを作成しています。
プログラム実行時の設定を外部ファイルに持たせようとしていますが
ファイル構造や読み取り方などの定石はあるのでしょうか?

今設計しているファイル構造は以下のようなものなのですが
aaa=111
bbb=222
文法チェック、必須項目チェック、範囲チェックなど
結構手間がかかってしまいます。
0380デフォルトの名無しさんNGNG
>379
winな環境なら API も充実してるし、iniファイル使えよ
0381デフォルトの名無しさんNGNG
>>379
もし私と同じプロジェクトに参加している別会社の人なら、
その辺りはライブラリ化する予定がありますので半月ほどお待ちください。w
0382デフォルトの名無しさんNGNG
>>381
お願いしちゃっていいですか?
半月ですか?時間かかりすぎです。
1日でできませんか?
すでに火が出ているのはご存知でしょう?w
0383381NGNG
>>382
あ、プロジェクト違いだね。
火が出ているも何も、未だ仕様が確定してねぇもん。
0384デフォルトの名無しさんNGNG
お尋ねします。
Watcom C/C++ 11jというコンパイラを手に入れました。
これでWindows2000、XP上でI/Oポートをいじれるexe,dll等は作成出来るのでしょうか
差し迫っての問題ではないのですが、やはりVisual C++でしか開発できないのでしょうか
0385デフォルトの名無しさんNGNG
http://www.vector.co.jp/soft/win95/prog/se097101.html
こういうの有ったし、できるんじゃない?
0386デフォルトの名無しさんNGNG
タダで最強!フリーC/C++コンパイラ
http://pc5.2ch.net/test/read.cgi/tech/1035882599/
0387デフォルトの名無しさんNGNG
>>385
それ、NT系の2000/XPじゃ使えない様な気がする。

>>384
exeやdllだけでI/Oポートに直接アクセスすることはOSとして不可能。
Watcomだからっていう問題ではない。
フリーのドライバが有るのでそれ使え。
0388384NGNG
レス付けていただいた方々、ありがとうございます。
I/Oポートに直接アクセスするのはドライバ開発になるのですね。
0389デフォルトの名無しさんNGNG
int n;
cin >> n;

while( n <= 3 ) { cin >> n; }

説明するまでもないですが、入力した整数が3以下ならば
入力し直すというだけのプログラムです。もちろんnに適当な
整数を入力すれば期待通りに動きます。

ところでnの値を入力する際に、例えば5.4とすると
小数点以下は切り捨ててn=5として扱われるわけですが、
上記のプログラムにおいて例えばn=1.5と入力すると無限ループになってしまいます。
「n=1.5と入力したらn=1となる、よってwhileの条件はtrueとなる」と、ここまでは
いいのですが、何故whileの中の cin >> n を無視してしまうのかがわかりません。

どうしてこうなってしまうのでしょうか?

なお Borland C++ を使用しています。
0390デフォルトの名無しさんNGNG
>>389
nはintなので、cin >> n とやる時、1.5と入力するとストリームバッファ
に ".5" が取り残されてしまう。すると次のcin >> nは必ず失敗して
しまい永久ループになる。(nの値が変化しない)
従ってcinのストリームの状態を常に調べる必要がある。failbitが
立ったりして(cin)が0になったら、whileをbreakするなどの処置が
必要。
0391370NGNG
レスしてくれた方ありがとうございました。

GLUTっていうのをもってない場合はインストールしなきゃいけませんね
それだったらDirectXを入手する方がいいでしょうか?
っていうか[ファイル]メニューの[新規作成]なんてどこにあるんだ
さっぱり分からん(つД`)
0392デフォルトの名無しさんNGNG
例えばこんな具合。

#include <iostream>
int main()
{
 int n;

 std::cin >> n;
 while (n <= 3) {
  if (!(std::cin >> n)) {
   std::cout << "An error has occured in operator >>" << std::endl;
   break;
  }
 }
}
0393デフォルトの名無しさんNGNG
std::cin.exceptions( std::ios::badbit | std::ios::failbit );
0394デフォルトの名無しさんNGNG
>>389
こんなのとか。
#include <iostream>
#include <sstream>
int main(){
    using namespace std;
    string buf;
    int n=0;
    while(1){
        cout << "4以上の整数を入力してください:";
        getline(cin,buf);
        istringstream(buf) >> n;
        if(n >= 4){
            break;
        }
        n=0;
    }
    cout << "入力された数字は"<<n<<"です\n";
    return 0;
}
0395389NGNG
レスしてくださった方々、どうもありがとうございます。
非常に勉強になりました。
0396デフォルトの名無しさんNGNG
これはdo〜whileの出番かもしれない。
0397デフォルトの名無しさんNGNG
>>394
言ってみればC++でcinはCで言うところのscanf()、getline()+stringstrem
はCで言えばfgets()+sscaf()みたいなイメージだな。中身はもちろん全く
違うが。
>>393の例外は気に入った。
0398デフォルトの名無しさんNGNG
>>394
 付けすぎw
0399デフォルトの名無しさんNGNG
Cでnamespaceとかclassのprivateみたいに、
関数のローカル化ができるものがあるなら教えてください。
0400デフォルトの名無しさんNGNG
static
0401399NGNG
>>400
具体的にお願いします。

Cで長編物を作っていて管理に困ってC++を始めたのですが、
難しくて挫折してCで同じようなことが出来ないかなと思い質問しました。
2chのスレ数でいうと、c:cpp=2:1とCの方が多いのですが、
プログラマーの人はCで長編物を作る場合、
管理でどういう所に気をつけるのですか。
0402デフォルトの名無しさんNGNG
あとに続く語りに強烈な説得力を与える
ナイスな一行目だな
0403デフォルトの名無しさんNGNG
>>401
具体的もなにもstaticについて調べれば分かることだが。少なくともC++の経験があればな。

static int func(void){;}とすると、このfunc関数は内部リンケージを持ち、他のファイルからは呼び出せなくなる。
ゆえに同じものを複数のファイルに書いても衝突しなくなる。
0404デフォルトの名無しさんNGNG
C++の一部が分かっているのなら、それだけを使えばいいような・・・
無理してC++のあらゆる機能を使うこともないと思う。
0405399NGNG
ありがとうございます。

>>402
(^^)

>>403
できました。publicは普通の関数、privateはstaticを付ける
みたいな感じでいいのですか。

>>404
ローベルさんのページhttp://www1.kcn.ne.jp/~robe/で
勉強したのですが、基本的なあらゆる部分でCと違う感じがします。
0406403NGNG
intなのに整数をreturnしてねぇ・・・・
0407デフォルトの名無しさんNGNG
長編、ねぇ。
本の1,2冊くらいは読んどけ。
0408デフォルトの名無しさんNGNG
403は親切だーね、
こんな失礼な奴に。
0409399NGNG
すいません。出直してきます。
0410河豚 ◆8VRySYATiY NGNG
TurboCなんですが、BGIをプログラム内に組み込む方法を
どなたか、ご教授下さいませんか?
0411デフォルトの名無しさんNGNG
>>401
>具体的にお願いします。
ワロタ
0412デフォルトの名無しさんNGNG
C++でメンバ関数内でstaticで変数を宣言した場合、
その変数はそのクラスの型の変数すべてで共有なのか
それとも個別に用意されるのか教えてください。
0413デフォルトの名無しさんNGNG
共有だよ
0414デフォルトの名無しさんNGNG
static宣言したらメモリ上の固定位置に配置されるんだってば。
それがわかってたら>>412のような疑問は湧いてこない。
0415デフォルトの名無しさんNGNG
クラス内での static inline と staticって等価?
0416デフォルトの名無しさんNGNG
>>414
インスタンスを定義したらだね。

>>415
違う。
0417415NGNG
>>416
具体的にお願いします。
ひとところに関数を定義するなら、inlineが無効のような気がするのです。
0418デフォルトの名無しさんNGNG
> >>414
> インスタンスを定義したらだね。
クラスのインスタンスのことじゃないよね?
0419デフォルトの名無しさんNGNG
>>417
> ひとところに関数を定義するなら、inlineが無効のような気がするのです。

クラス定義内に関数の定義を書いた場合はinlineとみなされるので、
違いが無いように見えるかもしれない。

もしくは、最適化をかけていなければインライン展開されないので、
違いが無いように見えるのかもしれない。
0420デフォルトの名無しさんNGNG
>>415
static inline int x;
とは書けんぞ。
0421デフォルトの名無しさんNGNG
関数内のstatic変数の話と
クラスのstaticメソッドの話が混ざってるぞ。
0422デフォルトの名無しさんNGNG
>>421
混じってるのはお前の頭の中だけ。
0423デフォルトの名無しさんNGNG
プ
0424353NGNG
DXSDKサンプルがLINK2019エラーでコンパイル出来ないと騒いでいたモンです。

あれやこれやとやったところ、使っていたlibcd.libに__ftol2が入っていなかった
というなんともおそまつな話。(だって知らんもんよぉ
それと、ネットうろついててVC6のライブラリ群見つけたので、それでコンパイル
してみたところ__ftol2入ってないlibcd.libでコンパイル出来ました。
VC6の(当時の?)ヘッダでは__ftolになるみたいです。
助言下さったかたありがとう御座いました。
0425デフォルトの名無しさんNGNG
C++ でsize_tの扱いというのはどうなっているのでしょうか?
STLの解説書によると<cstdref>で「サイズの単位に使われる符号無しの型」
とありますが、#include <cstdref> としなくてもコンパイルが通ります(g++)

またsize_tはどの程度使用が推奨されるものなのでしょうか。
for( size_t i=0 ; i<vec.size() ; i++) ではなく、やはりループごとに
for( std::vector<vector<string> >::size_type i=0 ; i<vec.size() ; i++)
と書くべき? (typedef を使わなければ)
0426デフォルトの名無しさんNGNG
そこまでやらんでも大丈夫だと思うが、正確にはそうなるのかね。
size_t って unsigned int の typedef だし
0427デフォルトの名無しさんNGNG
int とは決まってないんじゃない?
0428デフォルトの名無しさんNGNG
そうか、intは漏れの環境での話か・・・VCのSTRING.H
0429デフォルトの名無しさんNGNG
>>427
具体的にお願いします。
0430デフォルトの名無しさんNGNG
>>429
大きさを表すのに適切な符号無し整数なら、別にunsigned intでなくてもいい。たとえばunsigned long intでもいい。
0431デフォルトの名無しさんNGNG
>>425
cstdrefじゃなくてcstddefな予感。
0432425NGNG
>>431
仰せのとおり、cstddrefです。
/usr/include/string.hではsize_tを使うために#include <stddref.h>
とやっていました。(C用ですが)

結局>>430氏の言うあたりで結論なんですね。Thanks.
0433デフォルトの名無しさんNGNG
だからrはいらないと(ry
0434デフォルトの名無しさんNGNG
c++の質問です。
a%b
でaやbを負の数にした場合どういった風に定義されているのでしょうか?
0435デフォルトの名無しさんNGNG
Cの質問ですが、
if (a % 100 > 0)
a += 100 - (a % 100);
例えばこのように書いたときに、
"%":不正な左オペランドです。
とでてしまうのですがどのようにかえるべきでしょうか。
%を同じように使ってもでないときもあるのです。
0436デフォルトの名無しさんNGNG
>>434
implementation-defined

Programming languages --- C++ (FINAL DRAFT)
http://www.kuzbass.ru/docs/isocpp/expr.html
5.6 の 4 を参照。
0437デフォルトの名無しさんNGNG
>>434
C++では確か処理系定義。
0438437NGNG
かぶったスマソ。
0439デフォルトの名無しさんNGNG
>>435
aの型は整数型だろうな?
0440434NGNG
>>436
ありがとうございます。けど英語わからないです・・・・
どういうことなのでしょうか?ほんとに教えて厨ですけど説明していただけるとうれしいです
0441デフォルトの名無しさんNGNG
>>440
"C FAQ" "処理系定義" でググれ。
0442412NGNG
答えて下さった方ありがとうございます。
0443デフォルトの名無しさんNGNG
>>432
C++でのsize_tはstdの中にあるんで、std::size_tなどとしなければならないよ。
0444デフォルトの名無しさんNGNG
>440
規格の英語なんて大した英語じゃないぞ。
この程度の英語が読めないようじゃ、この先も苦労する。
まずは辞書引きながらででも読んでみて、その解釈が正しいのかどうかを
問うべきじゃないのか?

…と釘を刺しつつ
>441
それだとヒットしなさげ
>440
ここを参照しる!
ttp://seclan.dll.jp/c99d/c99d05.htm#dt19990607
なお、C++ では 14882:2003 においても処理系定義のままである。
0445デフォルトの名無しさんNGNG
今回のはポインタも示されてるからいいけど、
いくら規格の英語がたいした事無いとはいえ
量に圧倒されるのが、日ごろ英語に触れてない日本人なわけで。
斜め読みも出来ないから、目的の情報を拾いにくい。

0446デフォルトの名無しさんNGNG
規格は英語が基本だからなぁ…
まあガンガレ>>434
0447434NGNG
みなさんホントにありが�dです。
大学でプログラミングの勉強に困ったらまた来ます。そのときはどうぞよろしくお願いします。

英語もこれから勉強しようと思います!でわ!
0448デフォルトの名無しさんNGNG
windowsのビルドナンバーのリストなんてありませんか?
windows2000sp3のバージョンが知りたいんです。
VCで取得するところはうまくいったんですけど、肝心の比較数値がわかりません。
ぐぐったら簡単に見つかるだろうとタカをくくってたら意外とみつからなくて…
自分でインストールして調べるしか無いかな…
もしわかったらおねがいすます!
0449デフォルトの名無しさんNGNG
>>448
SPがついていようがなかろうが、2195
0450デフォルトの名無しさんNGNG
>449
レスありがとうございます。
マ、マジですか?
もしかして判別不可能ですか?
0451デフォルトの名無しさんNGNG
C++の標準ライブラリの中で、
指数計算するpowみたいな関数と、
ランダムな数値を得る関数ってありますか?
0452デフォルトの名無しさんNGNG
>>450
OSVERSIONINFOEXのwServicePackMajor/Minorをみればいい
0453デフォルトの名無しさんNGNG
>>451
何をしたいのかいまいち理解できないのですが、powとかrandとかでは
いけない理由はなんでしょうか?
0454デフォルトの名無しさんNGNG
>>453
すいません。最近C++の勉強を始めたんですが、
Cの時に使ってた、mathみたいなライブラリはC++で使ったらいけないのかな、と思いまして。
全然使ってもいいんでしょうか?
0455デフォルトの名無しさんNGNG
"全然"の使い方が間違っているが、Cライブラリを使っても問題ない
0456デフォルトの名無しさんNGNG
>452
そんなんあったんですか!
アリガ�d!
0457デフォルトの名無しさんNGNG
全然は肯定にも用いられる副詞。
0458デフォルトの名無しさんNGNG
うそ!まじ?
0459デフォルトの名無しさんNGNG
役不足とかで得意げになってるアホが
よく知りもしないのに指摘して恥をかく好例。
0460デフォルトの名無しさんNGNG
>458
全然まじですよ?
0461デフォルトの名無しさんNGNG
1 (あとに打消しの語や否定的な表現を伴って)まるで。少しも。
2 残りなく。すっかり。
3 (俗な言い方)非常に。とても。
[大辞泉]


で、肯定?
0462デフォルトの名無しさんNGNG
2と3
0463デフォルトの名無しさんNGNG
残りなく使ってもいいんでしょうか?
すっかり使ってもいいんでしょうか?
非常に使ってもいいんでしょうか?
とても使ってもいいんでしょうか?


...ありえな〜い
0464デフォルトの名無しさんNGNG
言語はナマモノ。
0465デフォルトの名無しさんNGNG
>>463
はい、低脳

次。
0466デフォルトの名無しさんNGNG
Cをやろうと思いますが、今日Cを知ったような初心者にも読めるCに関する雑誌ってありますか?
(または本をお願いします)
0467デフォルトの名無しさんNGNG
>>455
ありがとうー。
言葉には気をつけます。スマソ
0468デフォルトの名無しさんNGNG
独壇場 ← どくせんじょう で変換できない。
0469デフォルトの名無しさんNGNG
>>466
http://www.google.co.jp/search?q=C%E8%A8%80%E8%AA%9E%E5%85%A5%E9%96%80&ie=UTF-8&oe=UTF-8&hl=ja&lr=lang_ja
0470デフォルトの名無しさんNGNG
>>457
さらしあげ
0471デフォルトの名無しさんNGNG
>470
全然OK
0472デフォルトの名無しさんNGNG
>>463
ありえないが、流行語みたいなもん。
好んで使ってるジャリタレが消えれば消えるでしょ。
0473デフォルトの名無しさんNGNG
>>472
ありえない
0474デフォルトの名無しさんNGNG
         _ ,,, _  __               〃 ヽ`_7i⌒'⌒ii‐ー,   ヽ
        ノ-―-`、ヽ`ヽ-.、         i./ ,./-‐` """´'ー 、!   `ヽ、
      _,,/  , _---、`ヽ\ヽヽ、       ノ./, - ' ´  ̄ ̄`ヽ_ \  ヽ!
    , ‐'´ r-.    ̄ヽ、  \'、ヾ、\   ー'´イ/      _,. ィ,.、 `ヽ、ヽ i l
.  /    .l トヘ     ヽ.  ヽ ', ヽ   ,ク´   __,. - '/'´  ヽ  ヾヽl !
  / /   /l '、 \ ヽ、 \.  ヽ   ヽー'´7i ,  ,-'-`!/´ ヽ''ニ-`、   ',、〈
 l / /  /'´ヾヽ、_ ,\ ヽ_,. -‐、 ', ヽ、 ヽ//./ / __      __  i、  l ヾ
 リl // /  _,,.\`く'  `´<ヽ、 \ ヽ \ ーヽ.,.イ ', '´`ヽ    r '' ヾ_,!l  !l .!
 !l l l / l 、/"`ヾヽ\ ,' ‐''ヾー-、.\ ヽヾーi、l _l =! (゚;)     (゚;) l= ! _/  !
  l V./ゝ !=!  (゚;)   ` (゚;)  l=/_7ー、=,ヽ`!.ir、.', ' ,_,.   i   、_ ,、`./'r、i  !
  ヽll 'ヽ!!  , --  l   -- 、 `/r,ヽ  ヽ!  !ヽ'_,.!    __    i_ ) /  !
   ヽヘ、!l,!   , - 、 __,. -.、   ,i.l) ノ       !. ヽ.ヘ.    !'    ヽ  ノ、')´   .!
    _ゝlヘ  !'´     .i  /、リ)      ,'   `ヽ、 ヽ _ ノ / ./    i
  `>'=ノ , `ヽヽ      l,.ィ_、_\_    i ,.. - 、,-、.`_iー--‐.´レ' /,.へ、 _ ',
 〃   /,ヽ、r'こl` ー-‐ ',l´'Yヽヽ `ヾ´   l/   '´ /´  !  / ,// l    ヽ!
 l   / !.  ( ` ー=-´‐  ) ! '、   !  /    _l_. ! / // ./_,,L    i

        七_    七_  l l  二  ナ ゝ        i  ヽ |! |!
      (乂 )    (乂 )  ノ /し  cト   ̄ ̄ ̄   ヽ   ・ ・
0475デフォルトの名無しさんNGNG
>>455
「全然」を肯定に用いた例が芥川龍之介の文章の中に
存在するらしい(未確認)。

>>468
独擅場(どくせんじょう)は手偏。もともと独壇場(どくだん
じょう)は独擅場(どくせんじょう)の誤読である。
0476デフォルトの名無しさんNGNG
>>475
別に夏目漱石も森鴎外も普通につかっとるが。
とりあえず大辞林は漱石の文例を収録してた。
>以下大辞林から引用
ぜんぜん 【全然】
(2)あますところなく。ことごとく。全く。
「一体生徒が―悪るいです/坊っちゃん(漱石)」「母は―同意して/何処へ(白鳥)」
>引用終わり

高島センセも『お言葉ですが』でこのネタを扱ってたことがありましたな。
もちろん、「全然は肯定でも使う」って話。
0477デフォルトの名無しさんNGNG
あますところなく使ってもいいんでしょうか?
ことごとく使ってもいいんでしょうか?
全く使ってもいいんでしょうか?


...やっぱりありえな〜い
0478デフォルトの名無しさんNGNG
最近C++を始めたばかりの初心者です。

いま、クラスのメンバ関数を作っているのですが、メンバ関数の作り方で悩んでいます。

戻り値でエラーコードを戻し、引数に参照型の変数を持つやり方はめんどくさいと思いました。
戻り値でコピーを渡しつつエラーを判定する何か良い方法はありませんでしょうか?

0479デフォルトの名無しさんNGNG
エラーフラグでも持ったクラスのコピーを返せばいいんとちゃうの?
0480デフォルトの名無しさんNGNG
>>474 久々に好ましいAAをみた。ありがとう。
0481デフォルトの名無しさんNGNG
>>479
 お返事ありがとうございます。
 その方法は思いつきませんでした。ありがとうございます。

 しかし、intなどを戻す場合は新しいクラスを作らなければならないのでしょうか?
 それもちょっとめんどくさいような気がしました。
 なにかないでしょうか・・・。すみません。
0482デフォルトの名無しさんNGNG
>>481
intの全ての範囲が必要なら無理。範囲外の値をエラーとする。
負の値がエラーを表すのはよくある。
0483デフォルトの名無しさんNGNG
>>481
あるいは例外をスローすろ。
0484デフォルトの名無しさんNGNG
>>478
なぜに例外を使わない?
0485デフォルトの名無しさんNGNG
>>482
 お返事ありがとうございます。
 やはりそのやり方が一番簡単だと思います。
 しかし、int現在はマイナス値を返す可能性があるので使えないかもです。
 intではないデフォルトのクラス自体を返すときも難しそうです。

>>483
 お返事ありがとうございます。
 例外ですか…。まだ勉強中です。

この中では例外が一番良いのかもしれませんね。精進いたします。
ありがとうございました。
0486デフォルトの名無しさんNGNG
エラー格納メンバ変数を持て
メンバ関数は戻る時にエラー格納メンバ変数を書き換える
0487デフォルトの名無しさんNGNG
倉薫のC言語入門シリーズ
http://www.amazon.co.jp/exec/obidos/ASIN/488135843X/
http://www.amazon.co.jp/exec/obidos/ASIN/4881358448/

といっしょに、「珠玉のプログラミング」か「プログラミング作法」を買おうかと思っているのですが、初心者には早いですか?
0488デフォルトの名無しさんNGNG
>>484
 すみません。まだ一度も例外を使ったプログラムを書いたことが無いのです。
 いかにも難しそうなので後回しにしていましたが…使うしかないのかも。
 
0489デフォルトの名無しさんNGNG
別に勝手もよかろう
>「珠玉のプログラミング」か「プログラミング作法」
理解できれば一人前だ
0490デフォルトの名無しさんNGNG
>>486
 アイディアありがとうございます。
 それはいいですね。
 しかし、この機会を例外を使うチャンスと考えて、変更箇所は多いですが一度例外を使ってみます。
 失敗したら、そのアイディアを使いたいと思います。
0491デフォルトの名無しさんNGNG
>>489
理解できればということは、結構難しいのですか?
倉本は、かなり初心者向けのようで、間にクッション挟まないといけないかも。
0492デフォルトの名無しさんNGNG
>>490
グローバルなエラー変数を使うという方法もある。
errnoのように。あまり薦められないが。
0493デフォルトの名無しさんNGNG
難しいとは思わないが経験を積んでないと深い意味がくみ取れないかな
0494デフォルトの名無しさんNGNG
>>492
 errnoですか。聞いたことはあるのですが一度も使ったことがないのでよくわからないです。
 勉強します。ありがとうございました。
0495デフォルトの名無しさんNGNG
ユーザからcinに入力された数だけvectorを宣言・初期化しようとして、つまずいています。
初期化に使う以上はconstでなければいけないと思うのですが、constだと初期化の時しか
値が設定できないので、入力の受付ができません。
別に入力を受け付けてからその値でconstなら問題ないのですが、この値は複数の外部関数
が参照するため、大域変数として置きたいとも考えています。

何か解決方法はありませんか?
0496デフォルトの名無しさんNGNG
>>495
vectorのテンプレート引数は何?
「cinに入力された数」に対応するにはvectorインスタンスの数?それとも一つのvectorの要素数?
「初期化に使う」って、何の初期化に何を使うことの話?「constでなければいけない」のは何?
0497デフォルトの名無しさんNGNG
そりゃ、constにしたら初期化以外のプログラム中でデータ入力できないわな。
0498デフォルトの名無しさんNGNG
std::cin >> という形では const 変数への代入は無理(解決策はいくつもあるが)。
そもそも配列と違って vector (の要素数は)定数でなくともかまわない。
ただ vector の要素数は可変だから
最初に要素数を指定する変数をグローバルで使いまわすのはおすすめできない。
メンバ関数 resize() や size() で vector 内部の要素数にアクセスしたほうがいい。
0499デフォルトの名無しさんNGNG
typedef std::vector<hoge> hoge_array;
const int n=5;//これをcinから取得したい
hoge_array arrays[n];

ってなことを考えてるような気がするんだが・・・
これだと配列をnewで確保するか、std::vector<hoge_array>を使えってのが答になる。
0500デフォルトの名無しさんNGNG
>495
ひょっとして宿題スレで最短経路を聞いてた人?
向こうでも軽く答えたけど、vector はそもそも動的配列だから、
要素数を指定するのに const 性は必要ない。
つか、(思いつくままに書いた)漏れの書き方が悪いんで、
グローバルにおかないように書き直した方がいいね。
0501デフォルトの名無しさんNGNG
えー、ファイルオープンに関してなんですが
オープンするときに、ファイル名に動的に数字を置くことって出来ますか?
たとえば「test_01.txt」というファイルを作成してオープンする場合だったら

ofstream file( "test_01.txt" );

とするのではなく

int n;
cin>>n;

ofstream file( なんらかの処理 );

という感じで、ファイル名をいじりたいのですが。
よろしくおねがいします。
0502デフォルトの名無しさんNGNG
Cならsprintf()使うんだが、C++よー知らん
0503デフォルトの名無しさんNGNG
>>502
stringstream とか。個人的には sprintf 使ったほうが楽だと思うけど。
0504デフォルトの名無しさんNGNG
そこで boost::format ですよ。

ファイル数がすくなくて、ソースの寿命も短いんだったら
name[6] = '0' + ( i / 10 );
name[7] = '0' + ( i % 10 );
とかいう力技もありかな。
0505デフォルトの名無しさんNGNG
CString::FormatとゆーのはVC++か?
0506デフォルトの名無しさんNGNG
MFCだな。
0507デフォルトの名無しさんNGNG
C/C++使ってるのならsprintfを使えば問題なし
C++オンリーに拘る理由は余り無いよ、逆のケースならあるけど
0508デフォルトの名無しさんNGNG
strcpyではなくstrncpyを使え といったような、
よりセキュアなプログラムを組むために、いろいろ教えてください。
BOFのと、修正ポイントとか
0509デフォルトの名無しさんNGNG
sprintfなんて使うな、snprintf使え。
scanf使わないように徹底しててもsprintfなんて使ったら片手落ちもいいところだ。
0510デフォルトの名無しさんNGNG
>>508
strncpy() は

1) 末尾が '\0' 終端されない可能性がある
2) あまったバッファは放置するのではなく、必ず '\0' で埋められる

ので、単に strcpy() を置き換えるのに使うのはダメでしょ。*BSD から strlcpy() 移植して
使うべし。
0511デフォルトの名無しさんNGNG
>>510
その用途ならsprintf()で充分じゃん。
0512デフォルトの名無しさんNGNG
>>511
せめて snprintf() に
0513マイク ◆yrBrqfF1Ew NGNG
>>508
最低限コードセクション以外を実行不可としてマップする

BOFってなんだ?
0514デフォルトの名無しさんNGNG
>>513
バッファオーバーフロー
0515マイク ◆yrBrqfF1Ew NGNG
overflowは一つの単語だからBOが正しいだろ。
0516デフォルトの名無しさんNGNG
>>512
高々一つの文字列をコピーするならsprintf(dest, "%.*s", len, src)で充分。
0517デフォルトの名無しさんNGNG
>>516
分かりづらいのが問題。
0518デフォルトの名無しさんNGNG
>>515
バッファオーバーフローといえば、「NOP」という言葉が連想されるけど
その論理なら NO になってしまう罠w
0519デフォルトの名無しさんNGNG
>>517
あと printf() 系は str* 系関数に比べると重いし、async thread safe では
ないので使える場所に制約がある。普段はあまり問題にならんけど。
0520デフォルトの名無しさんNGNG
>>519
str*もスレッドセーフである保証は無い
printf系ももちろんそう、FILE*に適応する場合のみ顕著化する可能性がある
スレッドセーフで問題になる代表例は、strtok
0521デフォルトの名無しさんNGNG
>>520
printf() はともかく snprintf() はふつー thread safe になってると思うぞ。
たとえば Solaris 9 だと、snprintf() と同時に setlocale() を呼び出さない
限りは MT-Safe と規定されてる。

http://docs.sun.com/db/doc/817-0692/6mgfnkuql?q=sprintf&a=view

str*() 系が Async-Signal-Safe っつーのは私の勘違いだった。
0522デフォルトの名無しさんNGNG
C++で正規表現を使いたくてboostをインストールしたいのですが
日本語のインストールドキュメントありませんか?
0523デフォルトの名無しさんNGNG
>>522
参照スレ
【C++】template 統合スレ -- Part4
http://pc5.2ch.net/test/read.cgi/tech/1083550483/
0524デフォルトの名無しさんNGNG
ファイルの一行に複数個のデータがあって、
データの個数はファイル読み込みまでわからないような場合、
どのようにコードを書けばいいか教えてください。

具体的にしたいことは、M×N行列のデータを書き込んだ、
以下のようなフォーマットのファイルを読み込みたい、ってことです。

1: M N // マトリクスの行・列数
2: ○ ○ … ○ // N個のデータ を H[0][0] 〜 H[0][N-1] へ
:
M+1: ○ ○ … ○ // ↑ 上記をM行繰り返し

可変引数とかを使ったことないもので・・・
あまり環境依存はないかもしれないですが、
いちおうコンパイラは gcc です。
0525デフォルトの名無しさんNGNG
>>524
各データ長が同じなら、行頭nバイトを固定で確保してそこにデータ数をいれとくとか
読み込んだ1行のバイト数をデータ長で割るとか
0526524NGNG
>>525
> >>524
> 各データ長が同じなら、行頭nバイトを固定で確保してそこにデータ数をいれとくとか
> 読み込んだ1行のバイト数をデータ長で割るとか

すいません、データ型は double or float を想定していて、
データ長は不定です。
なおデータの区切りはスペースを想定してます。
0527デフォルトの名無しさんNGNG
>>526
1.ファイルの最初に全ての行の行毎のデータ数を書き込む。
2.行データの終わりを示す数字を決めて、それを書き込む。(最初のスペースまでとかね)
3.値データをなにも考えずスペースに挟んで一気に書き込む。
0528527NGNG
何か微妙に矛盾した場所があるけど、まぁ眠いからいいや
0529デフォルトの名無しさんNGNG
>>526
データ本体にスペースと同じコードがあったらやばいくないか?
抽出方法は知らんが
0530デフォルトの名無しさんNGNG
gentoo linux を使ってますが、C を gcc でコンパイルするとき、
何も include しなくてもコンパイルできるのはなぜですか?
main()
{
printf("Hello, World\n");
}
0531デフォルトの名無しさんNGNG
>>530
Cだから。
いちおう聞いておくけど、コンパイルできるのがおかしいと思う理由は?
0532デフォルトの名無しさんNGNG
#include <stdio.h>
が、どのような意味なのか、教えてくださいまし。
0533デフォルトの名無しさんNGNG
意味というか、機能だな。
プリプロセッサに指定したファイルをインクルードするように指示する。
0534デフォルトの名無しさんNGNG
>530
うちのGentooでは通らんが?

test.cpp: In function `int main()':
test.cpp:3: error: `printf' undeclared (first use this function)
test.cpp:3: error: (Each undeclared identifier is reported only once for each
 function it appears in.)
0535デフォルトの名無しさんNGNG
下記のコードが何をしているのかどなたか知りませんか
_wsetexit(_WINEXITNOPERSIST);

もしかしたら普通に自作関数なのかもしれませんが・・・

参考までにコンパイルエラーメッセージ
: warning C4013: 関数 '_wsetexit' は定義されていません。int 型の値を返す外部関数と見なします。
: error C2065: '_WINEXITNOPERSIST' : 定義されていない識別子です。
0536デフォルトの名無しさんNGNG
>>534
なんでC++にしてるの?
0537大学1年(国立)NGNG
C言語 大学の勉強の合間にやってます。(歴20時間
初心者には何がお勧めですか?
プログラマーはシステム考えるほうならいいけど、作成のほうだと40代になると使い物にならなくかると聞いたのですが どうなんでしょうか?
まだ簡単な計算しかできません。

いつかは世界大学プログラミングコンテストやハッキングコンテストに出てみたいです。
0538デフォルトの名無しさんNGNG
C言語のソフトどこで配布してる?
0539デフォルトの名無しさんNGNG
linuxのターミナルに、printfを使って文字列を出力させると
画面がどんどんスクロールして、次々に文字列が表示されますが、
画面をスクロールしないで、定位置に文字を表示させるにはどうしたら良いですか。

例えば、linuxは起動時にディスクのチェックをすることがありますね。
このチェックの進み具合が画面の右に%表示されますが、
これは数字が書き換えられても同じ場所に表示されています。
これと同じ事がしたいです。

よろしくお願いします。
0540デフォルトの名無しさんNGNG
curses
0541デフォルトの名無しさんNGNG
curses
ちょっとマンドクサイガ
0542デフォルトの名無しさんNGNG
改行しなけりゃいいだけ。

for (i = 0; i < 100; i++) {fprintf(stderr, "%3d%% completed.\r"); sleep(1);}
0543デフォルトの名無しさんNGNG
>>531
オレは530じゃないけど、printfの定義はどこにあるの?
0544デフォルトの名無しさんNGNG
聞きたいんだけど、
int *func()
っていう関数で
int data[10];
return data;
とすると、問題のあるポインタ変換って出るんだけど、
dataは、&data[0]と同じ意味だよね?
こういう時どうしたらいいの?
いちいちmallocするの?
0545デフォルトの名無しさんNGNG
質問は基本的にageでよろしこ
0546デフォルトの名無しさんNGNG
 
        / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ \
       / ''''''     ''''''             ヽ
      |                       |
      | (●),   、(●)            |
      |    ,,ノ(、_, )ヽ、,,             |  
      |    `-=ニ=- '              | 
       !     `ニニ´               .! 
      |                     |
      .\ ______________ /  

0547546NGNG
うわスマン!
激しく誤爆した
0548544NGNG
>>545
ごめんなさい。

どなたかおしえてくだせー。
0549デフォルトの名無しさんNGNG
>>544 好きなのを選べ
1 いちいち malloc する
2 int data -> static int data にする
3 ワーニングは無視する。ただし戻り値は使わないこと
0550デフォルトの名無しさんNGNG
>>549
わかりました。
でも教えてください。
int data[10]と宣言した場合、そのブロック中で
dataと書くことと、&data[0]と書くことは同じじゃないんですか?

0551デフォルトの名無しさんNGNG
>>544 は根本的な問題(バグ)に気づいてないわけで。
関数内に書いた
int data[10];
は、関数抜けたら無効になるわけだが。
で、いちいちmallocするって、大丈夫か? ちゃんとfreeもするのか?
普通はstaticだろ。
0552デフォルトの名無しさんNGNG
>>550
>dataと書くことと、&data[0]と書くことは同じじゃないんですか?

そんなことは今のお前さんにはどうでも良いことだ。
0553544NGNG
そうか!わかったぞ!
staticはなんかやなんで、その関数の引数から渡せばいいですよね。
0554デフォルトの名無しさんNGNG
そんな方法は面白くもなんともないぞ。
考え直せ。
0555デフォルトの名無しさんNGNG
>>530

この場合、インクルードするということは、printfのプロトタイプ宣言を
そのファイルにとりこむことが主な目的になるわけですよね。
でも関数はそのプロトタイプ宣言がなくても、その実体があればいいのです。
だって、実体があればリンクできるからね。
つまり、あなたのプログラムをコンパイルしたときに、gccはprintfの実体を
みつけることが出来たので、エラーを出さずにコンパイルを完了することが
出来たわけです。

じゃあなんで、stdio.hをインクルードするのかというと、
関数のプロトタイプ宣言があるとその関数の引数チェックが出来るんですね。
もし、間違った型の引数を与えてたりすれば、gccはそこでエラーを出してくれます。
だから、インクルードした方が確実なのです。

ということを最近知りました。
嘘言ってたら、だれか指摘して!
0556544NGNG
いまいちわかってないんで聞いていいですか?

配列がポインタに読みかえられるのは関数の実引数のときでいいんですか?
今回だと、ただの配列だからポインタには変換できんと。
0557デフォルトの名無しさんNGNG
>>556
今回問題になっているのは、
func()内にあるdata[10]はfuncから戻ったときにはすでに破棄されているから
funcの戻り値は使いようが無いってこと。
data[10]破棄されないようにするにはstaticにするか動的に領域を確保するかせよと。
個人的には int *func() のインタフェース自体を変更すると思うけど。

配列名がポインタに読み替えられるのは一部の例外を除き常に。
0558デフォルトの名無しさんNGNG
>>566
はぁ?
だから、今回のは、配列だのポインタだのとは 全く関係ないのだが。
0559544NGNG
やっとわかりました。
普通の自動変数と同じような扱いってことですよね。
ブロック抜けたら消滅するっていうことで。
なんか配列とポインタがごっちゃになってました。
出直してきます
0560デフォルトの名無しさんNGNG
>>599
>普通の自動変数と同じような扱いってことですよね。

同じような扱い?
「扱い」じゃなくって、普通の自動変数そのものだぜ。
っていうか、「普通の」って言葉も変だがな。
0561544NGNG
>>560
そうっすね。
つまり自動変数だと!
「普通の」っていうのは、オレが配列とポインタの関係をあさっての方向で認識していたからで。
配列はあくまで配列なんだと、ここにきてわかりますた。
0562デフォルトの名無しさんNGNG
文字列の末端にスペースをつける方法を教えて下さい

strcat(str[], )の右側に何か入れればできますか?
0563sageNGNG
strcat(str[], " ");
0564デフォルトの名無しさんNGNG
>>563
答えるならstr[]も直してやれよ。
0565デフォルトの名無しさんNGNG
スマヌ、ボンヤリシテタ。
0566デフォルトの名無しさんNGNG
>>562
それだけじゃあなぁ・・・
C++でstring使ってるならシンプルな解答で済むんだが。
Cだと、もうちっと前提がわからんとな。
strに一文字追加できる領域があるんなら strcat(str, " "); でも良いけど。
0567デフォルトの名無しさんNGNG
http://homepage1.nifty.com/kaneko/water3.htm 水粒子サンプルプログラム3D版
http://homepage1.nifty.com/kaneko/nfight.htm 物理演算とIKベースの格闘ゲーム(になる予定)
http://homepage1.nifty.com/kaneko/missile.htm ミサイルデモプログラム

逮捕された
winny製作者が過去に作っていたフリーソフト

漏れプログラムとかしたことないから分からんけど
これってすごいの?それともこれくらい作れて普通?
物理とかの知識も要りそうなんだけど
0568デフォルトの名無しさんNGNG
>>567
プログラムとかしたことない奴がなんでこの板にいるの?
0569デフォルトの名無しさんNGNG
NekoFightの人だったんか・・・
0570デフォルトの名無しさんNGNG
か猫でし
0571デフォルトの名無しさんNGNG
>>570
泣いた
0572デフォルトの名無しさんNGNG
あのう、すいません
配列についてなんですが、
1bitだけ使う方法はありませんか?
cでお願いします。
0573デフォルトの名無しさんNGNG
ビットフィールド
0574デフォルトの名無しさんNGNG
別の関数作って、その関数に渡した値を増やして返すようにしたんですけど
コンパイルして実行してみても値がまったく変わってないようなんです
いろいろ試してみたんですけど、どうしても値が増えないようで
どうすればいいんでしょうか?
0575デフォルトの名無しさんNGNG
すいません
書き忘れましたがBCC++5.5です
0576デフォルトの名無しさんNGNG
↓はい!ここでエスパーさん、>574に答えてあげて!!
0577デフォルトの名無しさんNGNG
>>574
int hoge(int x)
{
    return ++x; //お前、ここでreturn x++;って書いていただろ
}
こういうこと?
0578デフォルトの名無しさんNGNG
>>574
ソース晒せ。
素人がどこで勘違いしているかなぞ、ソース見な誰にもわからん。
0579デフォルトの名無しさんNGNG
#include<iostream.h>
#include <cstdlib.h>
#include <ctime.h>


class r{
public:
int a(int point),b(int point),c(int point),d(int point),e(int point),f(int point),g(int point),h(int point);
};
int r::a(int point){
int aa;
cout<<"\n\n日本の首都は?\n\n";
cout<<"1.東京\n";
cout<<"2.京都\n";
cout<<"3.秋葉原\n\n";
cout<<"回答を入力してください:"<<endl;
cin>>aa;
if(aa!=2){return ++point;}else{return point;}
};

int r::b(int point){
int bb;
cout<<"\n\n日本の首相は誰?\n\n";
cout<<"1.小泉\n";
cout<<"2.巨泉\n";
cout<<"3.正日\n\n";
cout<<"回答を入力してください:"<<endl;
cin>>bb;
if(bb==1){return ++point;}else{return point;}
};
0580574NGNG

int r::c(int point){
int cc;
cout<<"\n\nアメリカの大統領は?\n\n";
cout<<"1.ブッシュ\n";
cout<<"2.低脳\n";
cout<<"3.クリントン\n\n";
cout<<"回答を入力してください:"<<endl;
cin>>cc;
if(cc!=3){return ++point;}else{return point;}
};

main(){
srand((unsigned)time(NULL));
int point=0;
int q;
int i;
r question;
for(i=0;i<3;i++){
q=rand()%3;
cout<<point<<q<<endl;
switch(q){
case 0:question.a(point);break;
case 1:question.b(point);break;
default :question.c(point);break;
}
}
cout<<"あなたの点数は"<<point<<"/3点です。"<<endl;
return 0;
}
0581デフォルトの名無しさんNGNG
こんな感じで作ってました
乱数と関数の使い方覚えようと思って作ってました
0582572NGNG
>>573さんありがとうございました
ビットフィールドで検索したら
1bitだけ使う方法が出てきました。
これから勉強してきます。
0583デフォルトの名無しさんNGNG
>>579-580
つっこみがいのあるプログラムだな(w
関数は間違いなく値を(条件に合えば)増やして返しているが、
返された値を無視してるじゃないか。
0584デフォルトの名無しさんNGNG
おかげさまでやっと理解できました
関数呼び出しただけでmainのほうの値も変わってると勘違いしてたみたいです。
0585デフォルトの名無しさんNGNG
>>579-580
コンパイルしてやってみた
入力形式を例示してけろ

よくわかんねーよ
0586デフォルトの名無しさんNGNG
本当は、マークじゃなくてスーツ、two,threeじゃなくてデュース、トレイ・・・が正しいけど

struct Card1{
int num
int mark;
} mycard1;
初期化
for(int i=1;i<=4;i++){ //マーク
for(int j=1;j<=13;j++) {
mycard1.num = j; mycard1.mark = num;
}}

上を下のようにしたら初期化はどうなりますか?

enum Num {Ace, Two, ... , King};
enum Mark {Hearts, .... };
struct Card2{
enum Num num;
enum Mark mark;
} mycard2;
0587デフォルトの名無しさんNGNG
>>586
一体そのループで何をしたいのか見当もつかないが、
列挙型変数に整数値を代入したいという趣旨であれば、

Cならそのまま代入できるんじゃなかったと思ったが良く分からん。

C++だと、直接代入しても多分警告が出るだけでコンパイルはできるはずだが、
正式には mycard2.num = Num(j); みたいにする。
0588デフォルトの名無しさんNGNG
多分 mycard1[52] とかだと思うんだが
0589デフォルトの名無しさんNGNG
多分トランプをつくりたいんだと思われ
0590デフォルトの名無しさんNGNG
多分 mycard2[52] (ry
0591デフォルトの名無しさんNGNG
だれもこっちは突っ込まんのか?

mycard1.mark = num;
0592539NGNG
>>540-542

どうもありがとうございました。
御礼のレスが遅れてすいません。

#ADSLがぶちぶち切れるようになってしまって、
#なかなかネットにつなげない。
0593デフォルトの名無しさんNGNG
for(yy=100; yy>=0; yy--){
putchar(str[yy]);
}

上の条件式で

警告:条件が常に真

と出てしまって困っています。
なぜなんでしょうか?

0594デフォルトの名無しさんNGNG
>>593
gcc、bcc32、cl
どれつかっても警告出ないよ。
0595デフォルトの名無しさんNGNG
あ、もしかして yy が unsigned なのでは?
0596デフォルトの名無しさんNGNG
>>595
そうですけど・・・
unsigned int yy;
だとなにかいけないんでしょうか?
ちなみにコンパイラはbcc32です。
0597デフォルトの名無しさんNGNG
>>596
unsigned int がとれる範囲を考えてみれば分かるが、
0より小さい値には絶対にならない。
0598596NGNG
わかった!わかりました
yyが0になってから1引くと
(2^32)-1になるってことですね

もし、どうしても上の条件で書きたければ
for(yy=101; yy>0; yy--){
putchar(str[yy-1]);
}
ということなんですね

ほんとうにありがとうございました。
0599デフォルトの名無しさんNGNG
質問です。
クラスの静的変数を初期化するために、アプリケーション開始時に一度だけ実行したいコードはどこへ書けばいいんでしょうか?
やはりmain関数から明示的に呼び出す必要があるのでしょうか?
クラスの実装部分に書いてなんらかの宣言をすれば自動的に一度だけ実行されるようコンパイルされるような方法が欲しいのですが…
0600デフォルトの名無しさんNGNG
>>599
その静的変数をクラスにまとめて、コンストラクタで初期化するようにする。
0601デフォルトの名無しさんNGNG
初心者的質問ですいませんが、私が使っているBorland C++ builderの開発環境で次の分を入力したのですが、
#include<stdio.h>

int main(void)
{
int n1,n2,D;

puts("二つの整数を入力してください。");
printf("整数1;");scanf("%d",&n1);
printf("整数2;");scanf("%d",&n2);

if(n1>n2)
D=n1-n2;
printf("二つの整数の差は%dです。",D);
else
D=n2-n1;
printf("二つの整数の差は%dです。",D);
return(0);
}

else 文のところでエラーが出てしまいます。どこがおかしいのでしょうか?
0602デフォルトの名無しさんNGNG
>>main関数から明示的に呼び出す必要があるのでしょうか?
ない

>>クラスの実装部分に書いてなんらかの宣言をすれば自動的に
>>一度だけ実行されるようコンパイルされるような方法が欲しいのですが…

class A {
static int nData; // 宣言
}

int A::nData = 3; // 定義

クラスの静的変数は、C++がmainの実行前(というか、そのクラスが
最初にインスタンシングされる前)に初期化する規格になっている。
(グローバルの静的変数はmainの前)
0603602NGNG
>>599
間違えた。

× そのクラスが最初にインスタンシングされる前
○ その静的変数が最初に使用される前
0604デフォルトの名無しさんNGNG
>>601
if(n1>n2) {
 D=n1-n2;
 printf("二つの整数の差は%dです。",D);
} else [
 D=n2-n1;
 printf("二つの整数の差は%dです。",D);
 return(0);
}
0605デフォルトの名無しさんNGNG
>>604
Typo なのかネタなのかはっきりしろよ。

> } else [
     ^^^^
0606デフォルトの名無しさんNGNG
601です。
即答ありがとうございました。
コンパイルできました。
なぜ if文で{ や}が必要なのかよくわかりません。
なくてもコンパイルできるときがあったのですが.....。
0607599NGNG
お答えありがとうございます。
>>600
それだとmainから明示的に呼び出すのと同じじゃないでしょうか?
>>602
配列の要素を定数あるいは一定の数列で初期化したいのです。
たとえば
static int anArray[100];
をforループで初期化するとか…

まぁ、クラスごとに初期化用の静的メソド書いて
Class1::Initialize();
Class2::Initialize();
   …
とかってmain関数に延々と書けば済むことなんですけど・・・
0608デフォルトの名無しさんNGNG
>>605
最近、shiftキーの調子が悪い・・・

>>606
君が読み間違ってる。
中括弧がいらないのは制御文の中身が短文の場合のみ。
0609デフォルトの名無しさんNGNG
>>606
コンパイラの立場になってみる。
}がなくて、どこまでがifの範囲とわかる?

{ }がないと、直後の1文だけを範囲とみなすしかないじゃん。
endifとかでもないかぎり
0610デフォルトの名無しさんNGNG
606です。
貴重な情報ありがとうございました。
これからいろいろとif文について詳しく学びたいと思います。
0611600NGNG
>>607
class Class1
{
 struct Initialized
 {
  Initialized();
  int anArray[100];
 };
 static Initialized s;
public:
 // ...
};

Class1::Initialized Class1::s;

Class1::Initialized::Initialized()
{
 // 好きにしる。
}
0612599NGNG
>>611
目鱗です。
ありがとうございました!
0613デフォルトの名無しさんNGNG
また、初心者の質問です。
条件演算子を使った文を書いているのですが、minに代入された値が利用できないとありコンパイルできません。どこがいけなかったのでしょうか?
#include<stdio.h>

int main(void)
{
int n1,n2,n3,min;
puts("三つの整数を入力してください。");
printf("整数1:");scanf("%d",&n1);
printf("整数2:");scanf("%d",&n2);
printf("整数3:");scanf("%d",&n3);

min=n1;
min = (n1<n2) ? n1 : n2;
min = (n2<n3) ? n2 : n3;
printf("三つの整数の最小値は%dです。",min);

}

0614デフォルトの名無しさんNGNG
初心者よ、エラーメッセージを貼れ。
0615デフォルトの名無しさんNGNG
すいませんでした。
エラーメッセージは
警告 W8004 条件演算子を利用した三つの整数値の最小.cpp 12: 'min' に代入した値は使われていない(関数 main() )
でした。
0616デフォルトの名無しさんNGNG
>611
どうでもいいけど、struct Initializedってすげー違和感あるな
0617デフォルトの名無しさんNGNG
速攻でこさえてくれたからね
0618デフォルトの名無しさんNGNG
>>613
minに代入された値は利用されていない、ではないのか?

min = n1;
と代入しているが、次の行で、
min = (n1<n2) ? n1 : n2;
さらに、
min = (n2<n3) ? n2 : n3;
と代入しているので、上の行でminに代入された値はどこからも利用されてないよ、
というメッセージ。

ついでに言うと、このアルゴリズムは間違っている。
0619デフォルトの名無しさんNGNG
613です。
アルゴリズムの間違いを訂正してこう作りました。
#include<stdio.h>

int main(void)
{
int n1,n2,n3,min;
puts("三つの整数を入力してください。");
printf("整数1:");scanf("%d",&n1);
printf("整数2:");scanf("%d",&n2);
printf("整数3:");scanf("%d",&n3);

(n1<n2) ? min=n1 :min=n2;
(n2<n3) ? min=n2 :min=n3;
printf("三つの整数の最小値は%dです。",min);

}
11行目からエラーが出る始末です。もう泣きたくなります。
0620デフォルトの名無しさんNGNG
>>619
演算子について勉強し直せ。めちゃくちゃ。
ついでに、考え方を書いてみるので、その通りに作ってみな。

まず、二つの数を比較し、小さい方を覚えておく。
残りの一つと、先に比較した数を比較する。
0621デフォルトの名無しさんNGNG
>>619
なんでこうなっちゃうんだろう。不思議だなぁ。
0622デフォルトの名無しさんNGNG
>>621
まぁ、昔のチミも今のチミからみたらそんなもんじゃろ?
0623デフォルトの名無しさんNGNG
>>622
今もあまり変わって無くてな
0624デフォルトの名無しさんNGNG
こっちまでくるなよ。おまえら
0625デフォルトの名無しさんNGNG
>>613
「代入された値は利用されていない」はあくまで警告で、
それでコンパイル不能にはならない。
コンパイルできない原因は他にある。

あと、最小値を求めるアルゴリズムを考えるなら、
3数に限定しないで、配列とループを使った
アルゴリズムを考えたほうが勉強になるぞ。
つか、そのほうがたぶん簡単にかけるし。
0626デフォルトの名無しさんNGNG
619です。
問題解決できました。ありがとうございました。
こうするんですね。
#include<stdio.h>

int main(void)
{
int n1,n2,n3,min;
puts("三つの整数を入力してください。");
printf("整数1:");scanf("%d",&n1);
printf("整数2:");scanf("%d",&n2);
printf("整数3:");scanf("%d",&n3);


(n1>n2)?min=n2:n1;
(min>n3)?min=n3:n1;
printf("三つの整数の最小値は%dです。",min);

}
アドバイスありがとうございます。
0627デフォルトの名無しさんNGNG
ん?
0628デフォルトの名無しさんNGNG
625>>
本当にそのとうりです。
でも課題だったので仕方なく条件演算を使ってみました。
0629デフォルトの名無しさんNGNG
それ、 3,2,1って入力してみ。
0630デフォルトの名無しさんNGNG
違った、1,2,3だった。入れてみ。
0631デフォルトの名無しさんNGNG
とんでもねーなw

0632デフォルトの名無しさんNGNG
>>626
>(n1>n2)?min=n2:n1;
>(min>n3)?min=n3:n1;
min = (n1 > n2)? n2: n1;
min = (min > n3)? n3: n1;
ね。
(なんでmin <= n3のときにn1を代入するんだろう)
0633デフォルトの名無しさんNGNG
>>632
min = (n1 < n2) ? n1 : n2;
min = (min < n3) ? min : n3;

だと思うんだが・・・。
0634デフォルトの名無しさんNGNG
本当にそうでした....。
答えありがとうございます。
1,2,3、と入力して3が最小とは....。
代入に不安があったのであれこれやってみたのが間違いでした。
こんな問題に答えてくださってありがとうございます。
0635デフォルトの名無しさんNGNG
この>>613に始まる一連の流れを読んでいると、
プログラム習得のポイントが言語仕様よりも
アルゴリズムにあるということを強く感じた。
0636デフォルトの名無しさんNGNG
>>611
同じ翻訳単位の中に置くことを前提できれば、
anArrayはinitializedのメンバにする必要は無いと思うけど。
どんなもんだろ?
0637600NGNG
>>636
初期化対象をメンバの外に出すのは、引数のかわりにグローバル変数を使うようで嫌なもんだな。
0638デフォルトの名無しさんNGNG
>>637
回答Thx.
うーん、そうか。
自分はinitializeがClass1の中で定義されてるなら
anArrayの所属は気にしたことが無かったよ。
まぁ、確かに嫌なもんだといわれると気持ち悪く感じてくるな(w
0639デフォルトの名無しさんNGNG
俺は将来C/C++をマスターして情報処理試験を合格してやる!!
0640デフォルトの名無しさんNGNG
をい、C++はでねぇぞ。
0641デフォルトの名無しさんNGNG
初歩的な質問ですみません。
配列の動作を確認しようとa[0]からa[4]まで0-4とカウントするように書いてみたのですが
実行してみると a[3] だけ 29637605 になってしまいしました。
ためしに桁数を変えてみると0-2までむちゃくちゃな答えになってしまいました
どこが悪いのでしょうか?

#include <stdio.h>

int main()
{
int a[5];
int tmp;

for (tmp = 0; tmp < 5; tmp++)
{
a[tmp] = tmp;
tmp++;
}

for (tmp = 0; tmp < 5; tmp++)
printf("a[%d] = %d\n" , tmp , a[tmp]);

return 0;
}
0642デフォルトの名無しさんNGNG
>>641
自己レスすみません。
とんでもない間違いをしていました。
そもそもtmp++が二度実行されていますね。
もう少し落ち着いてから書き込むべきでした。
失礼しました。
0643デフォルトの名無しさんNGNG
for (tmp = 0; tmp < 5; tmp++)
{
a[tmp] = tmp;
tmp++; /*この文不要*/
}
0644643NGNG
ort
0645643NGNG
dateの値として0x48494445をいれたんです。
期待していたのはHIDEと表示されることなんですが、
妊DE
と表示されてしまいます。
なぜなんでしょうか?

int date_out(unsigned int date)
{
    char date_o[4];
    int j;
    for(j=0;j<=3;j++){
        date_o[j]=date%0x100;
        date=date>>4;
    }

    for(j=3;j>=0;j--){
        putchar(date_o[j]);
    }
return 0;
}
0646デフォルトの名無しさんNGNG
>    date=date>>4;
これでわ。
0647643NGNG
date=date/0x10;
にしてみましたがだめです。
0648643NGNG
すいません
date=date/0x100;
で意図したとおりに動きました。

質問なのですが、
date=date/0x100;
と、
date=date>>4;
は同じ意味ではないのですか?
0649デフォルトの名無しさんNGNG
>>648
charは何ビット?
0650643NGNG
わかりました
>>8
ということですね
ありがとうございました
0651650NGNG
少し疑問に思ったので下にあるプログラムを実行してみたのですが、

<<:>>の処理にかかった時間: 3.250000秒
*:/の処理にかかった時間: 28.765000秒

と、あきらかな違いがありました。
コンピューターにとっては<<>> */は同じ作業ではないようなのですが、
なぜなんでしょうか?
0652651の続きNGNG
#include <stdio.h>
#include <time.h>

int main(void)
{
clock_t start, end;
unsigned int i,t;

t = 1;
start = clock();
for(i = 0;i<0xffffffff;i++){
t=t<<31;
t=t>>31;
}
end = clock();
printf("<<:>>の処理にかかった時間: %f秒\n", (double)(end - start) / CLOCKS_PER_SEC);

t = 1;/*一応念のため*/
start = clock();
for(i = 0;i<0xffffffff;i++){
t=t*0x80000000;
t=t/0x80000000;
}
end = clock();
printf("*:/の処理にかかった時間: %f秒\n", (double)(end - start) / CLOCKS_PER_SEC);
return 0;
}
0653デフォルトの名無しさんNGNG
>>651
結果が同じでも、同じ処理ではない。
疑問に思ったらアセンブラで出力させてみ。
0654651NGNG
http://www.geocities.co.jp/SiliconValley-Oakland/8878/lab12/lab12.html
のサイトでアセンブラで出力させる方法はわかりました。
そんでもって.asmファイルもでてきたのですが、
ファイルの読み方がわかりません。
どこかよいサイトを紹介していただけませんか?
0655デフォルトの名無しさんNGNG
シフトの方が実際にコンピュータが行なっている処理に近い。
だから効率の良いコードか生成される。
t*0x80000000からは、t*0x12345678と大して変わらない効率のコードしか生成されない。
#コンパイラの最適化によってもっとマシなコードを吐かせる事は可能かもしれないが
0656デフォルトの名無しさんNGNG
>>654
載せたら解説くらいしないでもないよ。
0657651NGNG
http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/readres.cgi?bo=lounge&vi=1083458467&res=4&fi=no
に出力された.asmを貼っています
0658656NGNG
>>657
シフトの方は最適化で消えてなくなっている。
乗算除算の方は31ビット左シフト、31ビット右シフトに最適化されている。
そりゃぁ、速度差が出る訳だね。
一応擬似コードを書いておくと、
// シフト
eax = 0;
if (eax >= 0xffffffff) {
goto @3;
}
@2:
++eax;
if (eax < 0xffffffff) {
goto @2;
}
// 乗算除算
eax = 0;
if (eax >= 0xffffffff) {
goto @7;
}
@6:
edx = ebx;
edx = -edx;
edx <<= 31;
ebx = edx;
ebx >>= 31;
++eax;
if (eax < 0xffffffff) {
goto @6;
}
0659デフォルトの名無しさんNGNG
バッファオーバーフローっていうのはどういう仕組なんですか?
よく分からないので、危険だとおもわれるソースを張って見ます。
それを攻撃するようなプログラムを作って、どういう仕組か説明してもらえませんか・

-=-=-=-=-=-脆弱なプログラム-=-=-=-=-=-
#include <stdio.h>

int input(int day){
int d;
scanf("%d",&d);
printf("day - dは%d",day - d);
return d;
}

int main()
{
input();
return 0;
}
0660デフォルトの名無しさんNGNG
>>659
うーん、そのコードから脆弱なプログラムはできないな。
0661デフォルトの名無しさんNGNG
>>659
この手の質問には回答してええもんかいな? (w
0662デフォルトの名無しさんNGNG
>>659
とりあえずそのプログラムを実行し、"echo"という入力でも与えてみて。
0663デフォルトの名無しさんNGNG
g++使っているのですが、ushortってどこで定義されているのでしょうか?
おそらくunsigned short の再定義だと思うのですが、STLの解説書にも
StroustrupのC++にも載っていません。
そのわりに -ansi -pedantic つけても警告出ずに通ってしまいます。
ぐぐるとVC++では定義されているようでMSのページがヒットします。
0664デフォルトの名無しさんNGNG
>>663
typedef unsigned short ushort g++
で検索してみ。
0665デフォルトの名無しさんNGNG
types.h:typedef unsigned short ushort; /* System V compatibility */
0666ダミアソNGNG
 
0667デフォルトの名無しさんNGNG
>>662
それじゃ、なんの意味もねーじゃんよ
しったかぶってんなよ
0668デフォルトの名無しさんNGNG
>667
>660 ヨメ
0669デフォルトの名無しさんNGNG
int main(void){
long double nf=88;
printf("nf=%lf x=%d\n",nf,15+37);
return 0;
}
nfの値は意図した通り88が表示されるのですが、
xの値は52を表示してくれません。
何故でしょうか???
0670デフォルトの名無しさんNGNG
>>669 うちのコンパイラの結果↓
nf=88.000000 x=52
0671デフォルトの名無しさんNGNG
nf=%lfをLfにしたら直りました。
0672599NGNG
ちょっと亀ですが事後報告です。
静的メンバの初期化の件ですが、>>611を参考にして以下のようにしました
ヘッダ部
class Ini;
class aClass {
 static int anArray[××];
 static .........
 static void staticInit(){ 初期化コード;}
 friend Ini;
};
実装部
class Ini{
 public:
 Ini(){aClass::staticInit();}
};
static Ini ini;

クラス自身のコンストラクタみたいな機能があればこんな事しなくて済むのに・・・
0673599NGNG
というか、こんなコトしなきゃいけない漏れの設計が間違ってるんだなきっと_| ̄|○
イチから考え直します…
0674デフォルトの名無しさんNGNG
>>672
>>611みたいに IniはaClassの中で定義しちゃったほうが安全だし、
static IniもaClassのメンバにすべき。
aClassのスコープ外からIniが見えたら不味いでしょ。

あと、IniをaClassのfriendにするならstaticInit()自体Iniに持たせてもいいような気がする。
この辺は好みの問題だけど。
0675デフォルトの名無しさんNGNG
>>672
なんでわざわざ劣化させるんだ?
0676デフォルトの名無しさんNGNG
構造体の定義の仕方で教えてください。
あるライブラリのヘッダファイルを見ていたら、
下記の様に構造体の宣言がありました。
deviceを定義している宣言なのに、
宣言内部にdeviceが出てきます。

どういう事なのでしょうか?
どなたかアドバイスをお願いします。

struct device {

struct device *next, *prev;
char filename[PATH_MAX + 1];

}
0677デフォルトの名無しさんNGNG
>676
典型的(古典的)なリンクリストの宣言。
>struct device *next, *prev;
はポインタであり、device構造体のサイズに関係なく、
サイズが固定である為問題ない。
0678デフォルトの名無しさんNGNG
struct hoge{
struct hoge *nexthoge;
・・・

つまり、hogemaxは???型のポインタ。
0679デフォルトの名無しさんNGNG
訂正hogemax→nexthoge
0680デフォルトの名無しさんNGNG
>677

10回位読んでなんと無く分かりました。
後は「リンクリスト」で調べて見ます。
ありがとうございました。

>678

???型のポインタとは、環境によって構造体へのポインタの型が
変わるので???と記述したということしょでうか?
intだったりlongだったりするということでか?
0681デフォルトの名無しさんNGNG
>>680
ごめんなさい。
君の言う通り、???はstruct hogeで・・・
0682デフォルトの名無しさんNGNG
すいません、デバックでプログラムの処理回数をカウントするにはどうしらいいのでしょうか?
0683デフォルトの名無しさんNGNG
>681

ありがとうございました。
0684デフォルトの名無しさんNGNG
>682
#include <iostream>
#include <fstream>
#define COUNT_FILE "count.hoge"
int read_count() {
 int count = 0;
 std::ifstream ifs(COUNT_FILE);
 if (!ifs.fail())
  ifs >> count;
 return count;
}
void write_count(int count) {
 std::ofstream ofs(COUNT_FILE);
 if (!ofs.fail())
  ofs << count();
}
int main() {
 write_count(++read_count());
 return 0;
}
0685デフォルトの名無しさんNGNG
訂正
×  ofs << count();
○  ofs << count;
0686デフォルトの名無しさんNGNG
>>676
自己参照構造体で調べれば良い。
0687デフォルトの名無しさんNGNG
>684
ありがとうございました
0688わーNGNG
すみませんが。画像を90度回転させるプログラム教えてください。。。
Visual C++です!
0689デフォルトの名無しさんNGNG
>>688
スレ違い。
VisualC++スレへどうぞ。リンクは>>2を参照。
0690デフォルトの名無しさんNGNG
>>688
というか、言語に依存する以前の問題じゃん。
ようはなーんにも知らないし知る気もないんだろ。
宿題スレにいくか、氏ね。
0691599NGNG
>>675
まさに好みの問題です、すいませんm(__)m
0692デフォルトの名無しさんNGNG
ミリ秒単位でsleepしたいんですが、どのヘッダー内のどの関数を使えば良いでしょうか?
コンパイラはgcc2.9です。
0693デフォルトの名無しさんNGNG
部内全員が使用できるようなグローバルな関数や文字列を集めて
libとか作ってるひといませんか?
common.hとcommon.cppみたいなのを作って配ろうと思ったんですけど
libのほうが良いみたいな意見もあって悩んでいます。

0694デフォルトの名無しさんNGNG
>>693
あー、確か、前居た会社では使ってたな。
std.lib(スタンダードの意)だったはず。
何がはいってたか忘れた(;´▽`A``其の頃は駆け出しだったもんで・・・
0695デフォルトの名無しさんNGNG
ライブラリの中に変数の実体をいれといて、includeファイルで公開すればすむんじゃないの?
0696デフォルトの名無しさんNGNG
>>692
環境によりけり。

>>693
ライブラリの更新をちゃんと通知できる環境でないなら、
ソースのまま配布の方が安全。
但し、勝手にソースを変更する奴に注意。
0697692NGNG
>>695,696
ありがとうございます。参考にします。

ついでに、チームで開発するのに参考になるようなサイトとか書籍ってありますか?
エラー処理とかログを吐く処理とか新人さんにふって、
これも共通のLIBみたいなものにしようと思うのですが。
0698デフォルトの名無しさんNGNG
下記のような使い方に対する解決法を、教えていただきたいのですが...

class A
{
 B b;
};

class B
{
 friend A;
};
0699デフォルトの名無しさんNGNG
設計を見直す
0700デフォルトの名無しさんNGNG
>>697
新人に共通処理は書かせない方が身のため。
結局書かせた本人が全部書き直す羽目になりかねない。

共通処理が綺麗にできているプロジェクトを見ると、大抵巧くいっている。
逆に共通処理に癖があるプロジェクトは大抵火の車になる。
0701697NGNG
>>700
よく考えたら、仰るとおりですね。
いままで共通処理がいまいち(外注さんがつくった)だったので、新プロジェクトでは
基本的な部品から見直そうと思ってるのですが、参考になるものがなく
苦戦してます。
0702デフォルトの名無しさんNGNG
>>698

class A;
class B
{
 friend A;
};

class A
{
 B b;
};
0703698NGNG
>>702
それぞれ別ヘッダだと、エラーになってしまうのですが、
そういう場合はどうすればいいのでしょうか?

自分としては、親ウィンドウ(classA)、子ウィンドウ(classB)として、
メニュー等は親ウィンドウ、描画等は子ウィンドウでそれぞれ管理したいのですが、
こういった場合、classBは自メンバーに対する外部用のアクセスメソッドを
必要な分だけ用意すべきなのでしょうか?
(メンバーをpublicにするというのは除いて)
0704デフォルトの名無しさんNGNG
>>703
>それぞれ別ヘッダだと、エラーになってしまうのですが、
それは多分ヘッダファイルが適切にインクルードされていないから。

>こういった場合、classBは自メンバーに対する外部用のアクセスメソッドを
>必要な分だけ用意すべきなのでしょうか?
外部からアクセスする必要があるものは当然そうする。
しかし、描画処理がclassBの中で完結するようにできれば、外部からのアクセスは
ごく限られたものになるはず。
0705698NGNG
>>704
ありがとうございます。

最初は「適切にインクルード」の意味が理解できなかったのですが、
お互いが相手側のヘッダファイルをインクルードしていたのを、
片方だけにするとうまくいきました。
0706デフォルトの名無しさんNGNG
質問です。
基底クラスから継承したクラスを使ってて
途中で基底クラスを切り離したくなった時はどうすれば良いのでしょうか?
0707デフォルトの名無しさんNGNG
>>706
全部書き直す。
ってか、基底クラスを切り離したくなるってこと自体、クラス設計がむちゃくちゃってこと。
一から全部作り直したほうがよい。
0708デフォルトの名無しさんNGNG
>>706
「基底クラスを切り離す」とはどのような操作のこと?
自分言葉で表現されては誰も理解できない。
きちんとプログラミングの用語を使って明確に質問しなさい。
0709デフォルトの名無しさんNGNG
>>708
そもそも切り離す機能がC++に備わってない以上
そういう操作のプログラミング用語は存在しないでしょ。

>>706
設計に問題が有ると思われるが、どうしても という事なら
使用してるクラスに切り離したいクラスのインスタンスを渡すようにすればどうだろうか?
これだったら出来なくも無さそうだし
0710デフォルトの名無しさんNGNG
見えないようにする、のはできるけどねえ。。。
0711デフォルトの名無しさんNGNG
どうすればみえなくなるの?
0712デフォルトの名無しさんNGNG
>>706
俺なりに解釈してみた・・・
インターフェイスだけ継承して、実装するのはコンポジション化した別クラスとする。
やりたいことによっては、どちらのクラス、あるいは両方とも継承は使わない。
(まあ、直接使いたいクラスはポリモフィズムとかの関係で継承はするだろうが)
class A{// このクラスのインターフェイスを使いたい
 virtual void Func();
}

class B : A{// とりあえず派生
 A * m_pA;// Aから派生したクラスのインスタンスを指している。
 C * m_pC;// Aから派生していないクラスのインスタンスを指す。

 void Func(){// で、こんな感じに
  if( m_pA != NULL )
    m_pA->Func();
  else
    m_pC->Function();// 派生していないのでAにとらわれない処理
 }
}
0713デフォルトの名無しさんNGNG
プログラミングをC言語で始めてまだ間もないのですが、いつごろになったら画像を扱えるぐらいになるのかという漠然とした疑問がありますが、
率直に聞くと、画像を扱うのは難しいでしょうか?画像ってのは写真とかじゃなくて、座標を用意して、
何か物体を座標上を動かしたりするようなもののことです。
シューティングの原型のようなイメージです
0714デフォルトの名無しさんNGNG
>>713
一時間もかからない。
GLUTによる「手抜き」OpenGL入門
http://www.center.wakayama-u.ac.jp/~tokoi/opengl/libglut.html
0715デフォルトの名無しさんNGNG
>>713
>座標を用意して、何か物体を座標上を動かしたりする

それは環境依存と思われるので、
標準 C の勉強だけではいつまでたっても扱えないでしょう。
0716デフォルトの名無しさんNGNG
というか、private継承にするだけで>>706の要求は満たせるような気がする。
0717デフォルトの名無しさんNGNG
>>713
入口に立つのは簡単だけど、極めるのは大変と。
まぁ、なんでもそうだな。
0718デフォルトの名無しさんNGNG
というか、>>706が実際のところ何を要求しているのかさっぱり判らんのだけど。
んなもん、質問の趣旨を推測して回答してもどうにもならんと思うのだが。

何をしたいのか具体的に書け。>>706
0719デフォルトの名無しさんNGNG
ttp://www.media-tech.co.jp/detail/la_c3.htm

これは
買おうと思うんですが、 ぶっちゃけお勧めですか?
0720デフォルトの名無しさんNGNG
>719
そのページ見てみたけど
> そこで本書では処理手順をPAD(問題分析図)で図式表現して掲載した。
> このPADを参照してプログラム作成に挑戦してほしい。
この一文で、地雷っぽい印象を受けた。
0721デフォルトの名無しさんNGNG
田中 10
武田 20
梅吉 30

こう書かれたテキストファイルを読み込み、

最高値は 梅吉君 30です
最低値は 田中君 10です
平均値は       20です

と出力したいのですが、ifのところで、名前と数値を一緒に扱うにはどうしたらいいのでしょうか?
0722デフォルトの名無しさんNGNG
>>ifのところで、名前と数値を一緒に扱う
ここらへんをもっと詳しく。具体的のどういう扱いがしたいのか。
0723デフォルトの名無しさんNGNG
>>722
while(scanf("%s %f",name,&x)!=EOF)
if(m<=x)
{
m=x;
}

m=xのとき、xが誰か?を調べたいのです。
0724デフォルトの名無しさんNGNG
>>723
何とかなるかもしれません。
もうちょっと頑張ってみます。
0725デフォルトの名無しさんNGNG
比較するなら
if (strcmp(name,"梅吉") == 0)

コピーしたいなら
strcpy(m_name, name);
0726デフォルトの名無しさんNGNG
構造体を使えばいいんでないの?
0727デフォルトの名無しさんNGNG
>723
struct ScoreInfo
{
char name[256];
int score;
};

struct ScoreInfo score_info[32];

こんな感じの構造体を用意して score_info[] に点数を読み込む。
最高点・最低点をとったデータが score_info[] の何番目にあるかを
調べて、その番号 (仮に i としよう) を使って

printf("最高点は %sくん %d です\n", score_info[i].name, score_info[i].score);

とでも。

C++ なれてれば配列ではなく vector 使うとか、最大・最低点を探すのに
STL アルゴリズム使うとか工夫はいろいろあるが、まぁ大枠は変わらん。
0728デフォルトの名無しさんNGNG
>>725-727
構造体ですか・・・
ちょっと調べてみます。
皆さんの書き込みも参考にします。
どうもありがとうございました。
0729デフォルトの名無しさんNGNG
>>719>>720
>回数指定反復
>後判定反復
>無限ループ
ダメだこりゃ。
0730デフォルトの名無しさんNGNG
>728 だまされるな!
int max,min;
char maxName[256],minName[256];
とかするだけだ

while(scanf("%s %f",name,&x)!=EOF)
if(max<=x)
{
max=x;
strcpy(maxName, name);
}
0731デフォルトの名無しさんNGNG
これからVC++を始めようと思うのですが、良い入門書ってあるでしょうか…。
10年くらい前にアセンブラいじってたのですが、
object思考とかWindowsの波に乗り遅れてしまい、一から出直しです _| ̄|○
0732デフォルトの名無しさんNGNG
>731
どの本がいいとは言い切れないが
”Visual C++”じゃなく、標準C/C++について解説してる本を買いましょう。
あと、Win32についてはリファレンス以外はどれも似たようなもんだと思う。
猫でも〜なページと、MSDNでも読んどけば問題ないんじゃないと。
Windowsのコアな実装について深く知りたいなら、Advanced Windowsを推しとくよ。
0733デフォルトの名無しさんNGNG
a.h
#ifndef GUARD_A_H
#define GUARD_A_H

#include "b.h"
class A;
class A{
public:
B test(void);
};
#endif

b.h
#ifndef GUARD_B_H
#define GUARD_B_H

#include "a.h"
class B;
class B{
public:
A test(void);
};
#endif

このようなファイルをコンパイルしたいんですが
識別名を宣言するのに型が指定されていないとエラーが出ます。
どうすればコンパイル出来ますか?
0734デフォルトの名無しさんNGNG
>>733
コンパイルしてどーするんだ?
なぞなぞやってるんじゃないんだから、ちゃんと動くプログラム書こうぜ。
設計からやり直せ。
0735デフォルトの名無しさんNGNG
いや、決して謎々やってるわけではなくて
色々やってみて多分問題はここだろうと思ったので質問しました
設計からやり直せというのは
やはりこんなコードとおりませんか?
0736デフォルトの名無しさんNGNG
>733
前方宣言が逆になってるだけ

class B;
class A { public: B test(); };
0737デフォルトの名無しさんNGNG
>>736
前方宣言の意味を勘違いしていました。
ありがとうございます。
0738デフォルトの名無しさんNGNG
>>730
strcpyって言うの使う以外は、自分の書いたのと同じプログラムでした。
strcpy使えばいいのか・・・どうもありがとう。試してみます。
0739デフォルトの名無しさんNGNG
演習問題集、お勧めの教えてください
0740デフォルトの名無しさんNGNG
質問です。
while (scanf("%d",&dat)!=EOF)
は^Zを入力すれば止まるというのは理解できるのですが、

while (scanf("%d",&dat)!=-9999)
としても意味がない、というのが何故なのかわかりません

^Zは-1を返すと書いてあったのですが
while (scanf("%d",&dat)!=-1)
もダメなんでしょうか?
0741デフォルトの名無しさんNGNG
>>740
scanfは、変換前にエラーが発生した場合にEOFを返すというだけ。
それ以外の場合は変換した項目の数を返す。
0742デフォルトの名無しさんNGNG
お答えありがとうございました。
0743デフォルトの名無しさんNGNG
>732
ありがとうございました。頑張ります。
0744デフォルトの名無しさんNGNG
printf("[%d;%dH",y,x);を使っても
そっくりそのままこれが表示されるんですが、どうしたらよいでしょうか
0745デフォルトの名無しさんNGNG
(゚Д゚)ハァ?
0746デフォルトの名無しさんNGNG
まえから思ってるんだけど、趣味がプログラミングって人っているじゃん
あれってなに?マゾですか?って話よ
0747デフォルトの名無しさんNGNG
>趣味がプログラミング
趣味が小説書き
趣味が作曲
趣味が工作

...別に問題ない
0748デフォルトの名無しさんNGNG
>>746
趣味と仕事は別物だが?
0749デフォルトの名無しさんNGNG
プログラミングにしろ小説にしろ作曲にしろ工作にしろ、何か物を作るという点で共通している

なにかを創造するのは人間だけの特権だ。オナニーが趣味だなんて言ってる奴はサルだな
0750デフォルトの名無しさんNGNG
趣味がマゾって人もいるだろうな。
仕事がマゾの人もいるし。
0751デフォルトの名無しさんNGNG
漏れは一応プログラマだが、同僚で趣味がプログラミングって
奴そういないよ。会社で散々やってるのになにが悲しくて家で・・・
0752デフォルトの名無しさんNGNG
n*nの行列の2つの行列をかけあわせるプログラムをつくり、これを用いてA^2^mを計算するプログラムをつくれ
0753デフォルトの名無しさんNGNG
そろそろ>>744に教えてやれよ
0754デフォルトの名無しさんNGNG
一般的の趣味がプログラミングなんて椰子は
秋葉系ブサキモヲタです
0755デフォルトの名無しさんNGNG
趣味のプログラムは動けばよかったから楽しかった。
仕事のプログラムは動かす以外の作業が多くて大変だった。
そして今は辞めたくても辞められなくなった…。

職業プログラマーになる奴は、Cより日本語を学んでくれ…。
コメントは判るように書いてくれ。仕様書はちゃんと読んでくれ…。

0756デフォルトの名無しさんNGNG
>>744
エスケープシーケンスが使いたいのなら、頭に \x1b が必要。
たとえばカーソルをy行x桁めに移動したいなら、 "\x1b[y;xH"
ただし、Windowsであればエスケープシーケンスが使えるのは9x系のみ
NT系である2000やXPぢゃ使えない。
0757デフォルトの名無しさんNGNG
というかクライアント様になる奴は、仕様を決めてくれよ。
多少の仕様変更は受け付けますから…お願いですから。
0758デフォルトの名無しさんNGNG
プログラマな仕事してたけど辞めてプログラマでなくなったら(仕事でパソコンは使ってるが)
日曜プログラマに目覚めちまった漏れ。

動きゃいい「だけ」のプログラム書けばいいから結構楽しいよ?
前の仕事のせいか、大学ノートに柱になる関数の仕様やらコンポーネントダイアグラム
みたいなプログラム設計を鉛筆で殴り書きしたりするのも、なぜか楽しい

1バイト入魂!(゚∀゚)
0759デフォルトの名無しさんNGNG
>>749
サルの趣味がオ○ニーねぇ。そんなサルいたっけねぇ。ボノボ?
0760デフォルトの名無しさんNGNG
趣味がFlash作りならプログラマも報われる
0761デフォルトの名無しさんNGNG
仕事がindowsプログラマだから、日曜日はUnixとか、その逆とか。
組み込み系の業務やってる人が、webプログラミングするとか。
ありじゃなない?
0762デフォルトの名無しさんNGNG
デザイン性にとぼしい環境でしかPGしなくて、
余暇ではそのデザイン性のなさでPGする気が失せるのが大半だろう
0763デフォルトの名無しさんNGNG
仕事ではWindowsのGUIやらMotifでGUIやらその他非GUIアプリを書いている私、
それに反するものとしてちょっとした(プログラミングのための)ツールや
PDAのアプリを書くのが半ば趣味だったり。
#仕様書がちがちの仕事なんて趣味じゃやりたくなくってね。

とは言え鼬害だねぇ、この話題。
0764デフォルトの名無しさんNGNG
ビジネスアプリが全部POP体で表示されてたら職場は変わるのかな
0765デフォルトの名無しさんNGNG
((std::string)(tbl->cmd)).length()
ってやっても大丈夫ですか?
0766デフォルトの名無しさんNGNG
↑訂正
((std::string)("dir")).length()
0767デフォルトの名無しさんNGNG
>765
tbl->cmd の型と値によるが。tbl->cmd == NULL だったりしたら確実にアウト。

あと char* とか char[] に対して文字列長をとりたいなら、わざわざ std::string
の一時オブジェクトを作らずとも strlen() 呼べば?
0768デフォルトの名無しさんNGNG
試せばいいじゃん
プリミティブなchar[4]がクラス化するのは無理って叱られるんでないのかな
0769767NGNG
そうそう、一時オブジェクト作りたいなら std::string("dir").length() ね。

0770765NGNG
レスありがとうございます。一応VCでは正常に動きます。
char *とstringを頻繁に交換しているので、なるべくstringに統一したかったのですが、
stringとstring.hのように重複するようなライブラリ使うと太ったりとかはありませんか?
VCでやってるのですがgccで動かないとかなると痛いので、標準的な使い方が知りたいです。
0771デフォルトの名無しさんNGNG
>770
> stringとstring.hのように重複するようなライブラリ使うと太ったりとかはありませんか?
太るって、何がどうなることを指してるんだ?
0772765NGNG
分かりにくくてすいません。
std::string + strlenといったようにコードのサイズが大きくなるという意味で使いました。
要するにstd::stringの中でstrlen等を呼び出してるのだろうか?ということに読み替えて下さい。
0773デフォルトの名無しさんNGNG
>772
> std::string + strlenといったようにコードのサイズが大きくなるという意味で使いました。
それを気にするほどの環境なのか? 組み込みとか制御系はともかく、Windows や

UNIX 環境なら標準 C, C++ ライブラリはダイナミックリンク (DLL, *.so) の形で提供
されているから、最終的な実行ファイルのサイズはほとんど変わらんし、実行時に
命令キャッシュのヒット率に多少の影響が出る可能性はあるが、ほとんど誤差だ。

そもそも実行ファイルサイズを数十バイト単位で気にする必要があるなら、STL
使わんでしょ。l
0774デフォルトの名無しさんNGNG
>>721-730
構造体を使わないとすると、名前の検知はどういう風にすればいいでしょうか?
0775デフォルトの名無しさんNGNG
>>774そのレス範囲内に答えが出とる
0776デフォルトの名無しさんNGNG
>>774

すいません。勘違いしてました。スルーしてください。
0777デフォルトの名無しさんNGNG
>>730
scanfだと、田中 幸雄 のように間にスペースが入っている名前を正確に検知できませんよね?
スペース入りの場合はどうすればいいのでしょうか?
0778デフォルトの名無しさんNGNG
入れさせなければいい
ホームページだって姓と名は分かれてるでしょ
0779デフォルトの名無しさんNGNG
>>777
空白以外のものをセパレータに使うのなら、姓名の間に空白を入れることはできるようになる。
#勿論scanf()を使用する条件で、だ。
0780デフォルトの名無しさんNGNG
C言語でバイオリズムのグラフを描くことになりました。
見本になりそうなソースをぐぐって探したのですが、JAVAのソースはあってもCのソースは見つけられませんでした。
参考になるソースをご存知の方いませんか?
0781デフォルトの名無しさんNGNG
そのJAVAのソースってのに使われている関数の仕様が分かれば十分では?
0782デフォルトの名無しさんNGNG
>>777
char str[256];
scanf("%[abcdefghijklmnopqrstrvwxyz ]", str);
ってすると'a'〜'z'と' 'から成る文字列をstrに格納できる。
0783デフォルトの名無しさんNGNG
>>780
だから環境書けって。
もしかしてグラフって
  *   *
 * *  * *
*  * *  *
*   *    *
こんな風に標準出力に吐かせる?
0784デフォルトの名無しさんNGNG
バイオリズムってサインカーブとは違うの?
0785デフォルトの名無しさんNGNG
>>778
>>779
>>782
すでにデータが入力してあるテキストファイルを使うので、
スペースを入れさせないことはできません。

これだけ作ったのですが、うまく出てこないし、>>782を使ってもエラーが出てきて・・・
http://ccfa.info/cgi-bin/up/src/up1845.txt
0786デフォルトの名無しさんNGNG
>>782
こんなこと出来たんだ
scanfすげー
0787デフォルトの名無しさんNGNG
正規表現できたら神だな
0788デフォルトの名無しさんNGNG
Cマガ2004年6月号の添付プログラムを弄って
跳ね返る処理をつけようと思いつきました。
で、弄っているのですが、上手くいきません。

どうも、描画関連で躓いているようですが、
そもそも、私自身がCマガのプログラム自体理解できていないので
どうしようもありません。助けてくれませんか?


ソースはここ
http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/lounge/file/1060403548_64/bound.c
0789デフォルトの名無しさんNGNG
int x, y;
bool a,b,c;

a = !(x & y);
b = c ? a : !a;

上記変換式(xor)を1行で書くとすると
b = c ? !(x & y) : !(!(x & y));

と書くしかないのでしょうか(a = (x & y); は 警告 が出てしまいます)?
0790788NGNG
むしろ、sqrtの値がおかしいような木がしてきました
0791デフォルトの名無しさんNGNG
>>789
1行にする意味があるの?
0792デフォルトの名無しさんNGNG
>>785
とりあえずfgets()使ってやってみた。
ttp://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/readres.cgi?bo=lounge&vi=1064150088&res=68
0793デフォルトの名無しさんNGNG
>>789
なんでintをboolに代入してんだ?
何がしたいのかよく分からんが A xor B を1行で書くなら
A ^ B
でいいだろ。
0794780NGNG
環境はWindowsXP、MicrosoftVisualC++です。
人の名前は数人分をあらかじめソースの中に入れておき、その中から選択して年と月を入力すると
その月から2か月分のサインカーブが表示するようにしたいのです。
0795デフォルトの名無しさんNGNG
>>788
thetaはラジアンなのかディグリーなのか?
実数を(int)にキャストする際は、切り捨てられる範囲の値が重要でないかをチェック。
単に描画関数に渡すためだけのキャストなら、計算用の変数は実数で持っておいて渡す時にキャスト。
0796793NGNG
よくみたら!(int)だからboolなのか。
0797デフォルトの名無しさんNGNG
>>792
ありがとうございます。
半分理解できませんが、本とネットと睨めっこして翻訳してみます。
0798788NGNG
>>795
bound関数以外はCマガの中の人のものなので・・・。
θはラジアン…と思っていましたが、
main関数とか処理を見てみるとラジアンに変換しているし、
勘違いが原因なのかもしれませんね。
ウィンドウ処理は良く分からないので、ぐぐって調べてみますが
処理を変更したら上手くいくかもしれないので 試してます
0799デフォルトの名無しさんNGNG
>>786
>782の場合、普通は"%[a-z ]"と書く。
ついでに言えば、空白以外の文字列と言う意味で"%[^ ]"とか
csvの読み込みでカラム数が決め打ちで良ければ"%[^,],%[^,]"なども使える。
#但し、後者の例では','の連続や'"'で囲うフォーマットには対応できないので注意。
0800デフォルトの名無しさんNGNG
>>785

1行読み込んで
数値の直前の空白文字をstrrchr()で探して、その前後で名前と数値に分けろ
0801デフォルトの名無しさんNGNG
>>785 まずwhile()はどこからどこまでを繰り返すのか分かれ
0802782NGNG
>>799
"%[a-z ]"って実装依存じゃないの?

以下、ISO/IEC 9899:1999 §7.19.6.2より抜粋

If a - character is in the scanlist and is not the first, nor the
second where the first character is a ^, nor the last character, the behavior is
implementation-defined.
0803799NGNG
>>802
あー、そういえばそうだった。多くの処理系で当たり前のように実装されているから失念していた。
失敬。
0804デフォルトの名無しさんNGNG
>>785
どうしてもscanf使わなきゃいけないの?
0805デフォルトの名無しさんNGNG
スペースは読み捨て
エンターは次の構造体へ移る
数字は数値に読み込んでそれ以外は名前に読み込んで
スペースを終了条件にする
0806デフォルトの名無しさんNGNG
char c;
while(1){
c=getc(fp)
if(feof(fp))
break;
if(!(c==' ')){
if(!(c=='\n')){
if(digitCheck(c)){
d_str[d_count]=c;
d_count++;
}
else{
n_str[n_count]=c;
n_count++;
}
}
else{
strcpy(structure[s_count].name,n_str);
strcpy(structure[s_count].value,d_str);
s_count++;
memset(0,d_str,sizeof(d_str));
d_count=0;
memset(0,n_str,sizeof(n_str));
n_count=0;
}
}
}
こんな感じ?
0807デフォルトの名無しさんNGNG
ごめん状態遷移にしないと駄目だったね
0808デフォルトの名無しさんNGNG
if(digitCheck(c)){
}
else{
}
この中で更にgetc()してスペースで抜ければいいと思われ
0809デフォルトの名無しさんNGNG
だっせーなー
もまえら >800 とか >792 とか読めよ
0810デフォルトの名無しさんNGNG
スマソ
ヘタレが出過ぎた真似した
0811792NGNG
>>785
>>792のソースは
・一行が256文字以上だとダメ
・ctype.hインクルードし忘れた
から気をつけましょう。
0812デフォルトの名無しさんNGNG
C言語なら俺に聞け! Part 80
http://pc5.2ch.net/test/read.cgi/tech/1084749585/
で解決しなかったのでこっちで聞きます。

MinGWで、Cしか使えません。
gmpが使えなくて困ってます。
ttp://www.mit.msn.to/devel/mingw-gmp.html
ここでできるようですが、わかりません。
MSYS のインストールで、MinGWにmake.exeがないと言われます。
GMP のインストールでも
$make
でmakefileがないと言われます。

別にMinGWに拘りません。gmp使うにはどうしたらいいでしょう?
あるいは、大きな数を扱うにはどうしたらいいでしょう?
DESとRASを作りたいです。
0813デフォルトの名無しさんNGNG
>>812
>MSYS のインストールで、MinGWにmake.exeがないと言われます。
これは正常。
0814デフォルトの名無しさんNGNG
>>812
ここより適切なスレがあるよ

cygwin + mingwn + gcc 相談室
http://pc5.2ch.net/test/read.cgi/tech/1058134693/
0815812NGNG
>>813>>814
どうもです。そっちのスレ行ってきます。
0816デフォルトの名無しさんNGNG
BCCの5.5でレジストリをいじるプログラムを書こうとしてるんですけど実際に実行してレジストリエディタでみると無効な値と出てきてこまってます。
ソースは、
省略
DWORD set;
set=0x00000000
RegSetValueEx(
hKey,
"TEST",
NULL,
REG_DWORD,
(LPBYTE)&set,
10
);
省略
見たいな感じなんですけど
Googleで調べてDWORDにも注意したんですけどだめでした
0817デフォルトの名無しさんNGNG
>>816
10 → sizeof(set)
でないか?
0818デフォルトの名無しさんNGNG
>>785
を利用して数値だけを出すのを作ってみましたが、固まります。
何が悪いのやら・・・
http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/readres.cgi?bo=lounge&vi=1060403548&res=65

>>801
while()
{/*ここから*/
}/*ここまで*/

ですよね?
0819デフォルトの名無しさんNGNG
>818 固まるってなによ?

>printf("合計%7d点\n平均は%5lf点\n",sum,sum/i);
書式指定と変数があってない
0820デフォルトの名無しさんNGNG
>>818
初心者のためのポイント学習C言語
http://www9.plala.or.jp/sgwr-t/
0821デフォルトの名無しさんNGNG
>>819
>>820
解決しました。お騒がせしました
0822デフォルトの名無しさんNGNG
WindowsXPでborland使ってる初心者です。
sinカーブのグラフを書きたいのですが、ネットでソースを見つけたところ下のようなものを見つけました。

#include <stdio.h>
#include <string.h>
#include <math.h>

void main(void)
{
char p[21];
int ts,tc;
double rd,n;
rd=3.14159/180;
printf(" -1 0 1\n");
printf(" I....+....I....+....I\n");
for(n=0;n<=360;n=n+15){
strcpy(p," I ");
ts=(int)(10+10*sin(n*rd));
tc=(int)(10+10*cos(n*rd));
if(ts==tc)
p[ts]='+';
else{
p[ts]='*';p[tc]='o';
}
printf("%5.0f %s\n",n,p);
}
}
これをコンパイルしてみたのですが、テキストを使った擬似的なものしか表示できません。
普通のグラフのような滑らかな曲線を表示させるためにはどのような方法があるのでしょうか?
0823デフォルトの名無しさんNGNG
GUIなライブラリを使用する。
0824デフォルトの名無しさんNGNG
>>822
使っているのはBorland C++ BuilderなのかBorland C++ Compilerなのか?
Builderなら専用スレで聞いたほうが早い。
CompilerならWinAPIでWindowsに描画させることを考えるか、
いっそBuilderなりVCなり買うかどっちか。
0825デフォルトの名無しさんNGNG
>>822
マルチは死ね
http://pc5.2ch.net/test/read.cgi/tech/1084749585/701
0826デフォルトの名無しさんNGNG
Cの入門書をある程度こなせるようになってきたので、次なるステップに進もうと思うのですが、
C++かCオンリーのSDKかMFCかどうすればよいのでしょうか。
参考にしてる本やサイトで、つぎなるステップがまちまちだったりするので、是非このスレの
住人に意見を聞きたいです
0827デフォルトの名無しさんNGNG
>>826
C++がやりたかったらC++に行く。
C++いらねと思ったら別の道に行く。
念のために言うとC++はCとはまったく別の言語と思っといたほうがいい。
「Cがある程度わかるからC++も何とかなるだろう」とは思わないこと。

個人的な趣味でプログラミングをするなら、正直C++は必要ない。
それよかjavaとかC#とかにした方が、多分、幸せになれる。
0828デフォルトの名無しさんNGNG
>827
適当なこと言い過ぎ。

まず、CとC++は全く別な言語ではない。
Cで習得した内容はC++でも役に立つ。
が、根本的な部分で考え方の転換が必要になる部分があったりする。

あと、今は個人的な趣味でプログラムすることがある人にこそ、C++じゃないかな。
テンプレートなどを使い出せば、かなりディープな世界が待ってるし。
もちろん、Java/C#などでも問題ないけどね。

仕事でしかプログラム作らない/作りたくないという人はJavaにした方がいい。
その方が効率もいいし、仕事も多い。
C#はWeb関連で案件もぽつぽつ出てきてるようだが、まだまだ少数。

で、>826の質問への答えだけど、
あなたの実力がどれくらいか全く分からないので、どのサイトや書籍が最適とは言えない。
が、まずは今知ってるCでサンプルではなく、自分で考えて設計して何かを作ってみるべきだろうね。
そうやって得た土台が無いと、どの言語に移っても身についていかないよ。

個人的にはCで自分の作りたいプログラムが組めるようになってるなら、
Win32環境であれば、C++&WTLをお勧めする。
後はC++やりながら、Java/C#をかじっていけば、大して苦も無く覚えられるよ。
0829デフォルトの名無しさんNGNG
>828
> Win32環境であれば、C++&WTLをお勧めする。
どうでも良いが WTL って VC++ についてくる ATL ないと使えなかった
ような気がするんだが。気のせい?
0830デフォルトの名無しさんNGNG
WTLはATLがないとOTL
0831デフォルトの名無しさんNGNG
ていうか、この手の(>>826)次何やればいい厨にはちょっとうんざり。
技術本読むためにプログラム覚えてるんじゃないだろ。
プログラムで何がしたいかがあるから本読んでるんじゃないの?

スポーツでも車でも「次はどの本読めばいいですか」なんてこんな質問無いだろ?
0832デフォルトの名無しさんNGNG
現在BCB6でインターフェースを試行錯誤してるのですが、
HeaderControlを用いてエクスプローラのようなリスト表示ができません。
どのパーツをどういう構成で仕上げればよいのか、教えてください。
0833デフォルトの名無しさんNGNG
>>832
スレ違い。専用スレへどうぞ。
リンク先は>>2を参照
0834デフォルトの名無しさんNGNG
gccで使えるpragmaって丼なのがあるんでしょうか?
解説しているサイトなどあれば教えてください
0835デフォルトの名無しさんNGNG
>>834
http://gcc.gnu.org/onlinedocs/
0836デフォルトの名無しさんNGNG
>831 マヂレスすると、手段と目的をごっちゃにしてるんだよ
覚えるのが目的であって、実際に活用する事は思いつきもしない
0837デフォルトの名無しさんNGNG
>>836
その辺が趣味の趣味たる所以だが、
正直、C/C++なんぞ覚えないでもVBとかHSPとか使って
手軽に楽しんだほうが良さそうな気がするけど。
0838デフォルトの名無しさんNGNG
C言語の質問です。

初歩的な質問でスマソ。
mallocで動的に確保したint配列にスペース区切りの数値入力を求める方法ってどうやるべき?

0839デフォルトの名無しさんNGNG
>>831
作りたいものが無いのに続く奴なんて居ないと思うけど。
それと共に自分のレベルを上げていきたいと思うのは当然だろ?
0840デフォルトの名無しさんNGNG
>>826 が何か目標があるのかどうかは別として
少し知恵がついてから目標決めても悪くないと思うけど。
初めはなんか作ってみたいってのでも良いでしょ。

あと、実際にC++を使うかどうかは別にしても
C++を勉強しておくことは無駄にはならないという気がする。
例えば、Cでプログラム組むときにグローバル変数を使う事に対して
自然に躊躇できるようになるとか、やたらに巨大な関数を
書かないようになるとかそういう副作用が期待できるような。
あと、オブジェクト指向言語を1つ知っておくと、他のオブジェクト指向言語に
入るときも割とすんなりいけるのでいいかも。
0841デフォルトの名無しさんNGNG
>>838
激しく意味不明なんだが、数値入力はファイルから?標準入力?
どっちにしても、mallocでメモリ確保したポインタなら、普通の配列と同じように使える。
ただCはインデックス漏れのチェックしないから、気をつけれ。
たとえば標準入力から読むなら
scanf("%d ", &h[i]);
みたいのをループでまわすか、普通に%d %d %d ....ってやってもいんでないか?
まあ普通はfgetsやってからsscanfやると思うけど、ちょっと作ってるだけならこれだけでおk。
0842デフォルトの名無しさんNGNG
>>838
宿題は宿題スレへ。
自分でも理解できないことを書いているのがミエミエ。

>数値入力を求める
日本語として破綻してます。
0843デフォルトの名無しさんNGNG
http://kerochan.no-ip.com/vcsdk/letsprog/subchap/chap10-1.htm

に書いてある「リソース スクリプト」ってのが私のVC++には存在しないのですが・・・
どうしたらよいでしょうか。
0844デフォルトの名無しさんNGNG
マニュアル嫁
0845デフォルトの名無しさんNGNG
趣味でってw
家でまでもやりたくないだろ普通
オタクですか?
0846デフォルトの名無しさんNGNG
プログラマーでもない限り、家以外でプログラミングしてるほうがキチガイ。
電車の中でハンドアセンブルでもしていろと?
0847デフォルトの名無しさんNGNG
>>846
はぁ?
0848デフォルトの名無しさんNGNG
>831
>技術本読むためにプログラム覚えてるんじゃないだろ。
>プログラムで何がしたいかがあるから本読んでるんじゃないの?

>836
>覚えるのが目的であって、実際に活用する事は思いつきもしない

>837
その辺が趣味の趣味たる所以だが、

↑
↓

>845
>家でまでもやりたくないだろ普通

↑
↓

>846
>電車の中でハンドアセンブルでもしていろと?



... >847 にはげどう(w
0849デフォルトの名無しさんNGNG
Cを勉強し始めて2ヶ月の初心者です
質問させてください

ビット処理の勉強の優先度って高いのでしょうか低いのでしょうか?

なにと比べてとかそのへんの基準の設定もお任せします

私のあふぉな頭では難しくて爆発(ry

よろしくお願いします(´・ェ・`)

0850849NGNG
すみません
説明不足でした

ビット処理の勉強というのは

ビット演算(論理和、論理積、左右シフト
ビットフィールド・・・
フラグのオン/オフ?!
符号拡張(??)

などなどです

0851デフォルトの名無しさんNGNG
勉強は必須。そんだけw
0852デフォルトの名無しさんNGNG
>>849
851の言う通りだと思う。

ビット処理がすぐにでも必要(理解したい)と思うのなら優先度は高いはず。

0853デフォルトの名無しさんNGNG
そういうのがあるって覚えておけば
必要になったときに使うと思う
0854デフォルトの名無しさんNGNG
ってか、そんなに面倒なものか?
一日あれば覚えられるやん。
0855デフォルトの名無しさんNGNG
>>853
禿げ堂

>>854
まぁ、そうだけど最初の頃はそのへんが泥臭い感じでとっつき難いのも分からんでもないじゃん。

>>849
俺が思いあたるビット操作がどうしても必要な場合って、例えば、CPUのポートたたくときとか
人のソースいじるときでビット操作が出てきちゃったときとかそんな感じだ。
後から覚えても良いと思うけど。
0856デフォルトの名無しさんNGNG
ビット演算は普通に使うでしょ。
0857デフォルトの名無しさんNGNG
つい先日、新人君がMFCでチェックボタンの真理値を数個分intに詰め込もうとしやがった。
それで私にビット操作の方法を聞きに来たわけだが、当然設計しなおしさせた。
0858デフォルトの名無しさんNGNG
>>857
ファミコン時代の再来だな。
0859デフォルトの名無しさんNGNG
VC6のMFCポトペタでアーカイバ作りたいのですが、ワークシート(プロジェクト?)
というのでしょうか? ウィザードで何を選べばいいのでしょうか?
0860デフォルトの名無しさんNGNG
>>859
好きなの選べ。
0861デフォルトの名無しさんNGNG
>>859
スレ違い。VCスレへどうぞ。→>>2
0862デフォルトの名無しさんNGNG
>>837
個人的な事で申し訳ないが
正直VBよりCやC++の方が色んな面で簡単だと思う。
ぶっちゃけVBはアイコンペタペタ、手書きコード少量のイメージがあるが
実際にはVBは無駄にコード多いよ、、
0863デフォルトの名無しさんNGNG
【初心者歓迎】C/C++室 Ver.6【環境依存OK】
0864849NGNG
>>851〜>>856さん

私には>>855さんの言うとおり、どうもとっつきにくいので
後回しにしますー(苦笑

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


0865デフォルトの名無しさんNGNG
C言語で

char *p;

としたときにpの内容は不定値になるのでしょうか?
それとも、この時点で静的領域の適当なアドレスが入っているのでしょうか?
どちらが正しいのかわからなかったので教えてください。
0866デフォルトの名無しさんNGNG
宣言場所によるが。

ローカルだったら不定だね。
0867デフォルトの名無しさんNGNG
ビット演算は存在を知ったときからエラーフラグとして使いまくったなぁ
こんな管理しやすい方法は他に無いだろってヨダレだらだらでしたよ
0868デフォルトの名無しさんNGNG
aってクラスとbってクラスがあります

a.h---------------------------
#include "b.h"

class a{
b hoge;
}
---------------------------

b.h-------------------------
#include "a.h"

class b{

}
---------------------------

ってやるとエラーがでるんですけど、これはどうしてですか?
0869デフォルトの名無しさんNGNG
無限に互いを呼び出し続けるから。
#ifndefあたりで回避できたかもしれない
0870デフォルトの名無しさんNGNG
>>868
FAQだなぁ(苦笑

インクルードは、指定したファイルの内容をその位置に挿入する、
つまり、ファイルの内容をまるまるコピー&ペーストするのと同じ。
a.hとb.hが互いに相手をインクルードしたら無限ループに陥るでしょ。

>>868のサンプルだとそもそも、b.hにa.hをインクルードする必要が無いわけだが、
もし、class bでもclass aを必要とするならこうする。
たぶん、まともな入門書なら書いてあるはずだが。

a.h---------------------------
class b; //先行宣言
class a {
 b* hoge;
};

acpp---------------------------
#include "a.h"


b.h-------------------------
class a; //先行宣言
class b {
 a* hogetta;
};

bcpp-------------------------
#include "a.h"
0871デフォルトの名無しさんNGNG
>869
回避できませんでした。
抜本的解決法とかありますか?
0872デフォルトの名無しさんNGNG
>870
どうもありがとうございます。
で、実はb.hでは

int fuga(a&);
ってな関数を使いたいんですけど、これで試してもうまくいかないんです。。
0873デフォルトの名無しさんNGNG
>>872
質問するときはそれを最初に書かんといかんぞ。次からは気をつけるべし。

で、a::hogeは、きちんとb*型に直してあるのか?
0874デフォルトの名無しさんNGNG
>873
すいません。今度から気をつけます。

で、だめでした。
error C2061: 構文エラー : 識別子 'a' がシンタックスエラーを起こしました。
といわれます。
0875873NGNG
たびたびすいません。
できました。

acpp---------------------------
#include "a.h"

ここを勘違いしてました。
0876デフォルトの名無しさんNGNG
>>875
いや、スマソ、オレがタイポしてら。
当然、a.cpp b.cpp ともに a.h b.hの両方をインクルードすると。

あと、class bが b::fugaの引数としてしかclass aを参照しないなら、
a::hogeはb型のままでヲケなはず。
0877デフォルトの名無しさんNGNG
ttp://www.mit.msn.to/prime/prime6.html
ここのページにおいてある

ttp://www.mit.msn.to/prime/prime3_2-3-5-7.c
を実行すると

999962000357=999983*999979
において
素数と判定されてしまいます。
なぜなのでしょうか?
0878デフォルトの名無しさんNGNG
バグだろ、どうして判定されているのかを知りたければトレース汁
0879デフォルトの名無しさんNGNG
デバッガ持ってないのです。
gccでおすすめのデバッガありますか?
0880デフォルトの名無しさんNGNG
あの、すいません
unsigned int t=0xffffffff;のとき
x=t>>32;
としてx=0にしたいのですが
x=0xffffffffになってしまい困っています。
何か言い解決方法はありませんか?
c言語 コンパイラはbccです。
0881デフォルトの名無しさんNGNG
あと、bitシフトを使いたいんです。
0882デフォルトの名無しさんNGNG
あとってかまんまビットシフトじゃん
0883デフォルトの名無しさんNGNG
シフト演算子は処理系依存だったかね…。

>>880
2回にわけれ。
0884デフォルトの名無しさんNGNG
左オペランドの型のビット数を超えるシフトは未定義です。
unsigned intが32bitであれば32以上のシフトはできない。
x=t>>16>>16;
のように分ければうまくいく。
0885デフォルトの名無しさんNGNG
ひとつ勉強になった
0886デフォルトの名無しさんNGNG
アセンブリコードみてもちゃんとシフト命令
走ってるのにね。
やはり処理系依存(Intelの場合はCPUで未定義)なのね。。。
0887デフォルトの名無しさんNGNG
>>886 Intelの場合はCPUで未定義
はぁ?
0888888NGNG
 
0889デフォルトの名無しさんNGNG
>>883さん>>884さん
ありがとうございます。
二回に分けることでうまくいきました。
0890デフォルトの名無しさんNGNG
vのnビット右シフトは v >> (n % 32) になる処理系が多いみたいだね。
0891デフォルトの名無しさんNGNG
>>884
細かいことだが、文章が矛盾している。
「左オペランドの型のビット数を『超える』シフトは未定義」ならば、「unsigned
intが32bitであれば32『を超える』シフト」が未定義なのであって、32のシフトは
振る舞いが定義されているはずである。では、どちらが正しいか。
規格には、"greater than or equal to"と表現されている。よって日本語では
「左オペランドの型のビット数『以上の』シフトは未定義」とすべきである。
よって32以上のシフトは未定義である。従って、32のシフトは未定義である。
0892デフォルトの名無しさんNGNG
>>891
細かい事だが、矛盾の使い方が間違ってる
この場合はただの誤りである。
0893デフォルトの名無しさんNGNG
>>892
>>884 は、「左オペランドの型のビット数を超えるシフトは未定義」の発言に
よって32のシフトによる振る舞いの定義の存在を肯定している。しかしながら、
「32以上のシフトはできない」の発言によって32のシフトによる振る舞いの
定義の存在は否定されている。これは一貫性を欠く発言であると考えた。
「矛盾」とは、「物事の道理が一貫していないこと」である。よってこの場合、
私は矛盾という言葉が適当と考えた。
にも拘らず私の「矛盾」の用法が誤っているのであれば、恥ずかしながら、
なぜ間違っているのか、後学のためにご教示を賜りたい。
0894デフォルトの名無しさんNGNG
ああすまん、890へのレスだと思ってた。
0895デフォルトの名無しさんNGNG
ttp://kerochan.no-ip.com/vcsdk/letsprog/chap11.htm

のメニューバー自体にIDを付けたいのですが、どうやったらできるのでしょうか?
0896デフォルトの名無しさんNGNG
MAINMENU MENU DISCARDABLE

MAINMENUを好きに書き換える。
VC6のIDEを使っているのなら、ツリービューから変更したいメニューを選択してF2
0897デフォルトの名無しさんNGNG
>>895
すでにMENUというmenuIDがついているように見えるが。
0898デフォルトの名無しさんNGNG
>>891
すまん、指摘のとおり、超えるは誤りで以上が正しい。
つか、そんな鬼の首をとったようにつっこまんでもいいじゃない。
0899デフォルトの名無しさんNGNG
>>898
まぁ、32がどうなるかってのが問題だったからねぇ。
プログラマはそのくらいは意識してなきゃダメでしょ。
0900こんな説明まで必要になるしさ。NGNG
いや意識も必要だし、指摘も大いに結構だと思うが。
わざわざ7行も費やする話か ?

> 左オペランドの型のビット数<del>を超える</del><ins>以上の</ins>シフトは未定義です。
> の間違いだろ ?

で、済む話だと思うが。
0901899≠891NGNG
>>900
それにも同意。
0902デフォルトの名無しさんNGNG
リソースエディタで、

「!ほかのエディタで開く」になってしまって開くことができなくなったのですが、どうやったら解除できるのでしょうか?
0903デフォルトの名無しさんNGNG
すれ違い
0904デフォルトの名無しさんNGNG
>>902
ここはあくまで”C/C++室”なんで、ツールの使い方が判らないってのは守備範囲外。
そのツールのスレを探して聞いてくれ。この辺を見る>>2
0905デフォルトの名無しさんNGNG
猫でも〜のSDKイントロダクションで
指示通りコピペしたのですが、
myProg.hbrBackground =GetStockObject(WHITE_BRUSH);
ってとこで、 error C2440: '=' : 'HGDIOBJ' から 'HBRUSH' に変換できません。

ってでます。
0906デフォルトの名無しさんNGNG
>>905
(HBRUSH)GetStockObject(WHITE_BRUSH);
とキャストしてやればいい。
GetStockObject()はブラシ、ペンといったいろんな種類の
オブジェクトのハンドルを返す汎用関数だから、返り値も
HGDIOBJと汎用型になっている。
0907デフォルトの名無しさんNGNG
>>905
猫でもわかるのに・・・
君C/C++辞めたほうがいいよ
0908デフォルトの名無しさんNGNG
C言語で次のようにコマンドライン引数をmain関数で受ける場合について質問があります
#include <stdio.h>

int main(int argc, char *argv[ ])
{
char *p[2];

printf("%p: &p\n",&p);
printf("%p: p\n",p);
printf("%p: &argv\n", &argv);
printf("%p: argv\n", argv);
return 0;
}
/*実行結果
0012FF78: &p
0012FF78: p
0012FF8C: &argv
00430E50: argv
*/
pがアドレス演算子をはずしても同じアドレスを表示したのは
pは配列の名前なのでその配列の先頭アドレスをさしているからですよね?
しかし、main関数で受け取った文字列へのポインタの配列argvはアドレス演算子をはずすと同じアドレスを表示しなくなりました。
格納されている領域をアドレスから推測するとどうやらargvはポインタの配列ではなく、文字列自体をさしているようです。
この違いはどこから来るのでしょうか?
0909デフォルトの名無しさんNGNG
関数の仮引数宣言における('T p[])は(T *p)と等価
0910908NGNG
>>909
レスありがとうございます
そういえばそうでした。思い出しました。

そこで追加質問です。
#include<stdio.h>
#include<stdlib.h>
int n;
int main(int argc, char *argv[ ])
{
   int a;
   char *p = (char *)malloc(8);

   printf("%p: コード領域\n",main);
   printf("%p: スタック領域\n", &a);
   printf("%p: ヒープ領域\n", p);
   printf("%p: データ領域\n",&n);
   printf("%p: argv\n",argv);
   return 0;
}
/*実行結果
00401005: コード領域
0012FF7C: スタック領域
00431DE0: ヒープ領域
004237A4: データ領域
00420F9C: 静的領域
00430E50: argv
*/
これからするとコマンドライン引数はどの領域でもないような気がしますが
どこの領域に確保されているのでしょうか?
0911908NGNG
上の実行結果で静的領域は間違えです
気にしないでください
0912デフォルトの名無しさんNGNG
>>910
どこかに。
割と見る実装ではヒープに確保してるけど。
0913908NGNG
質問文に、また訂正箇所発見しました
malloc関数でとったメモリは16バイトです
#include<stdio.h>
#include<stdlib.h>
int n;
int main(int argc, char *argv[ ])
{
   int a;
   char *p = (char *)malloc(16);

   printf("%p: コード領域\n",main);
   printf("%p: スタック領域\n", &a);
   printf("%p: ヒープ領域\n", p);
   printf("%p: データ領域\n",&n);
   printf("%p: argv\n",argv);
   return 0;
}
/*実行結果
00401005: コード領域
0012FF7C: スタック領域
00431DE0: ヒープ領域
004237A4: データ領域
00430E50: argv
*/

>>912
レスありがとうございます
ヒープ領域ですか。
だとしたらmalloc関数で確保した場所と4000Byteも離れてるのはなぜでしょうか?
0914デフォルトの名無しさんNGNG
本当の初心者です…。
本を読みながら独学を始めました。

先に結論を。

winMEで使えるフリーのコンパイラをご存じありませんでしょうか?


GCCというのは本で知り、
会社で使っているXPでは、使っているのですが、
その会社を辞めようと思って、Cの勉強を始めたので、
なかなか会社ではやりにくくて…。

家のPCはMEで、そのPCを買い替えられないくらい薄給なもので…。
その本では、GCCを使う際、
「XPで動くことを想定しています」
となっていて、MEでのことを書いていないもので。

「MEで使えるかやってみればいいじゃん」
は、今(会社にいる)思いつきました…。

すみません。よろしくお願いいたします。
0915デフォルトの名無しさんNGNG
>>914
タダで最強!フリーC/C++コンパイラ
http://pc5.2ch.net/test/read.cgi/tech/1035882599/l50


つか、聞く前にやってみろよ、ホントに。
0916デフォルトの名無しさんNGNG
>>913
なんかけんか腰だな
0917相談NGNG
サーバ側のファイル更新日付を取得したいのですが
サンプルコードがハングルでよくわかりません

助けてください
ttp://www.serious-code.net/moin.cgi/FileTime
0918デフォルトの名無しさんNGNG
>>900
アプリケーション側の管理する領域ではない、とは思いつかないのか?
0919918NGNG
アンカーは910の間違いorz
0920デフォルトの名無しさんNGNG
switch (pid = fork()) {
case 0:
・・・
_exit(1);
case -1:
perror(NULL);
exit(1);
default:
waitpid(pid, &status, 0);
if (!WIFEXITED(status) || WEXITSTATUS(status) != 0) {
fprintf(stderr, "pwd failed\n");
exit(1);
}
break;
}

このプログラムを改造して子プロセスから親プロセスに0以外のstatusを
送りたいのですがどうすればいいですか?
exitのあたりをいくらいじくっても無理なのですが・・・
0921デフォルトの名無しさんNGNG
>>910
環境変数かなんかと一緒のアドレス空間だった気がするが
なにぶん MS-DOS3.3B 使ってた当時のことだし記憶違いだとアレだなぁ
いやつまり OS や CPU によって違っても当然じゃないの? という。
OS もコンパイラもコンパイルオプションも書かないでどういうつもり? という。
>>912 の「割と見る実装」の意味は分かってる? という。
仮に DOS でも Tiny, Small, Large で違うだろうし、という。
素人に毛が生えた程度の俺はそんな風に思う。
0922914NGNG
>>915
ありがとうございます。


>つか、聞く前にやってみろよ、ホントに。

この言葉も含めて、本当にありがとうございます。
頑張って勉強・実践します。
0923デフォルトの名無しさんNGNG
>>921
キモい
0924デフォルトの名無しさんNGNG
すいませんすごい初心者なんですが
5個整数入力して最小値と最大値求める
のって変数最低いくつでできますか?(配列までいってません)
0925デフォルトの名無しさんNGNG
3つ。
int i, max, min;
0926デフォルトの名無しさんNGNG
4つか。ユーザ入力を受け取る変数が必要だ。
0927デフォルトの名無しさんNGNG
>>925-926
サンクスです
たすかりました
0928デフォルトの名無しさんNGNG
>>926
ループにしなければよい。
0929デフォルトの名無しさんNGNG
>>913

ヒープから確保する時って、頭の方から順番に取っていくもんでは*ない*んじゃなかったっけ?
空いてそうなところをえいって見当つけてとってくるんでしょ。
だとしたら、たかだか4kBくらい離れてても別におかしく無い気もする。

俺の言っていることがおかしいってことはあるかもしれんけどさ。
0930913NGNG
>>929
そういうことなんですね
納得しました

その辺はOSが管理しているのでC言語だけじゃわからないってことですよね

プログラムを作っている環境は
WindowsXP Home
MS-VC++6.0
です。
MS-VC++6.0を使っててコンパイラを聞かれたらなんて答えればいいのでしょうか?
0931デフォルトの名無しさんNGNG
VC++6.0と答えればいいのでは?
0932デフォルトの名無しさんNGNG
>>930
「割れ物です」と答えとけ。
0933913NGNG
>>931
そう答えればよかったんですね

>>932
お金を出してお店で買いました
あなたと一緒にしないでください
0934デフォルトの名無しさんNGNG
ネタにマジレス(略
0935デフォルトの名無しさんNGNG
ってか、まぁ、おまえ人間関係で失敗することが多いだろう、と
むしろ失敗してることすら意識しないか。
0936デフォルトの名無しさんNGNG
printfって標準出力に出力する、通常はモニターであるって
どの本にも書いてありますが、モニター以外のデバイスにも
printfで出力出来るんですか?というか、モニター以外を標準出力に
出来るんですか?
0937936NGNG
済みません、
解決しました
0938デフォルトの名無しさんNGNG
猫でも分かる〜と独習C買ってきたんだが、猫ではint main()、独習ではint main(void)
って書いてある。どっちが正しいの?
0939デフォルトの名無しさんNGNG
ユーザーがmainを呼ぶ事はほぼ無いから、どっちでも良い。
0940デフォルトの名無しさんNGNG
int main()
void main()
int main(int argc, char** argv)
int main(int argc, char* argv[])
全部いっしょ
返り血がintなのが正しいらしいが。。。
0941デフォルトの名無しさんNGNG
女児の返り血
0942デフォルトの名無しさんNGNG
>938
どっちも正しい。「正しさ」の度合いで判断するならint main(void)のが若干ベターかな。
0943デフォルトの名無しさんNGNG
度合いってなんだよw
>>940の最後の例でないのなら、どれでも好き好き。
ただし、戻り値voidは難癖つけられることが多いから気をつけよ
0944デフォルトの名無しさんNGNG
>943
すまねぇ、これってどういう意味?
>940の最後の例でないのなら、どれでも好き好き。
0945デフォルトの名無しさんNGNG
>>944

>940のうち、上から2番目は戻り値を取らないので規約違反。
3番目と4番目は等価。1番目はコマンドラインを解析しないなら問題なし。
0946デフォルトの名無しさんNGNG
void main()
て書い酷い目にあう処理系なんてあんの?正直どうでもいい気がするんだが。
0947デフォルトの名無しさんNGNG
もーあきた
0948デフォルトの名無しさんNGNG
void main()で火を吹くような処理系があるはずもないが(もしあったら
損害賠償請求できるわな)、規約なんだからまずいってのも確か。
というわけで main()ってのがシンプルで良いや。
※引数はお好きに
0949デフォルトの名無しさんNGNG
火を噴くわけじゃないけど、0以外の終了ステータスだといちいち警告出すOS(シェルの仕業?)もある。
#あ〜、一応解説しておくと、voidでも実際にはたまたまなんかの値が終了ステータスと見做されるのね。
0950究極の初心者NGNG
2ちゃん板を見て、さらにググって環境設定を調べてみて分からなかったので質問させてください。
LSI C-86試食版3.30cを使ってCの勉強をしようと思ったのですが、上手く動作しないんです・・・
環境はXP 手順は
・lisc-86のBINフォルダの中にあるLCCファイルの拡張子をTXTに変更して中身を変更。
 (Xc:\LSIC86\BIN -Lc:\LSIC86\LIB -Ic:\LSIC86\INCLUDE)
 もちろんLSIC86ディレクトリは作成してます。
・コンパネからシステムー詳細設定タグー環境変数ーシステム環境変数(S)ーPathに;c:\LSIC86\BINを追加
 さらに同じシステム環境変数(S)に新規で変数TZ 値JST-9 を登録

そして簡単なソースを書いて実行しようとするんですが、ソースのあるディレクトリからlcc TEST.cを実行しても
「KKCFUNCが組み込まれました」
「マイクロソフトかな漢字変換 バージョン2.51」
と表示されるだけでEXEが作成されません・・・

まだ調べたりないと思うのですが、環境設定はどこも同じ説明でそれ以上の事が書いてなかったんです。
おそらくそんな初歩でひっかかる人が自分以外にいないんですね(鬱死)

板違いな質問でしたらすみません。
もっと精進して勉強しますんで、慈悲の手を差し伸べてください_| ̄|○
0951デフォルトの名無しさんNGNG
>>950
_lccファイルの拡張子をTXTに変更してはいけない。拡張子はいらない。
0952デフォルトの名無しさんNGNG
×初心者
○ネタ師
0953デフォルトの名無しさんNGNG
まー、普通は「究極」なんて単語は使わんよな
0954950NGNG
>>951
レスありがとうございます。
でも中身を変更した後、ちゃんと拡張子は消したんです(汗)


>>952
ネタじゃないです^^;
ネタと思われるほど、こんな所で躓く人はいないんですね・・・(滝汗)
0955デフォルトの名無しさんNGNG
>>954
究極の初心者なら、せめて初心者になってから出直しておいで。
初心者って自称するだけでも心象良くないのに。

あと、LSIC86を使うのには理由があるの?
0956デフォルトの名無しさんNGNG
>>954
わかった。command.comを手動で実行しないと正常に動作しない。
0957950NGNG
>>955
>出直しておいで
すみません^^; 精進しますm(__)m

後LSIC86を使うのは、やさしいCの本を買った時にそれが紹介されていたからです。

>>956
command.com を手動で実行するにはどうしたらいいのでしょう?(汗)
0958デフォルトの名無しさんNGNG
>>957
LSIC86でないといけない理由はないようなので、
さっさと削除してbcc5.5.1をインストールしてください。
LSIC86は利用できるメモリ量とか制限けっこうあります。

command.comはコマンドラインか、ファイル名を指定して実行から
command
を実行すればよろし。
0959デフォルトの名無しさんNGNG
>>957
4. いよいよコンパイルの実行です。「lcc hello.c」と入力してEnterキーを押します。
すると,「lld @link.i」と表示されてプロンプトが表示されます。
XPでは,1回目にKKCFUNCが起動されて画面がクリアされることがあります。
2回目以降はすぐにコンパイルされます。Meではすぐにコンパイルされます。
http://www.cmagazine.jp/beginner/lsic/
0960950NGNG
>>958
はい、自宅へ帰ったらさっそくやってみます!
ありがとうございますm(__)mペコ
>>959
2回目以降はまったく表示されなくなっていたんです・・・(汗)


みなさん、ありがとうございましたm(__)mペコ
0961デフォルトの名無しさんNGNG
C++のプログラムで、プログラムの大部分で使う定数の定義はどこでするのが普通ですか?

イ.1つのヘッダファイルに定数をまとめる
ロ.どこかのクラス内で定義する
ハ.名前空間内で定義する

3つほど思い浮かぶんですが、みんなさんはどうしてますか?
0962デフォルトの名無しさんNGNG
その定数に関係ありそうなクラスのstaticなフィールドとして書いておく。
0963デフォルトの名無しさんNGNG
>>961
クラス内か名前空間内で(もちろん名前空間内のクラス内でも)、
且つ、ヘッダに宣言するのが普通。
整数、enumだったら定義もいっしょにしてしまう。
0964デフォルトの名無しさんNGNG
gccでboost::thread使いたいのですが
コンパイルオプションがわからないです・・・
何か足りないですか?
g++ thread.cpp -L/usr/local/lib -L/usr/local/lib/libboost_thread-gcc-mt-1_31.so -lboost_thread
-lpthread
0965デフォルトの名無しさんNGNG
Cのみでは絵とか表示できないのでライブラリを使いたいのですが、
Win32API、DirectX、SDL以外で何か無いでしょうか。教えてください。
0966デフォルトの名無しさんNGNG
GTK
0967デフォルトの名無しさんNGNG
Xlib Motif
0968965NGNG
>>966>>967
ありがとうございます。調べてみます。

一応質問した理由は、
Win32APIは仕事でも使われ、勉強サイトも豊富だが、
ウィンがちがちに気を配らなければばならない、
DirectXも仕事に使われているみたいだが、
細かくバージョンアップされたりいまいちパッとしない?
SDLはどの機種にも使えるが、仕事で余り使われてないみたいだし、
ダウンロードの仕方がわからないし、勉強サイトも余り無い、と
これだっというのが無くいいのがあったらなと思い質問しました。
0969デフォルトの名無しさんNGNG
OpenGL
0970965NGNG
>GTK、Xlib、Motif
UNIXで組む為のもの?みたいなので、
次パソコンを買うならUNIXと思っていたので、その時に勉強します。

>OpenGL
BCCで組んでいるサイトを見つけたので、勉強してみたいと思います。

みなさま、ありがとうございました。
0971デフォルトの名無しさんNGNG
WideStudio なんてどうよ。
0972デフォルトの名無しさんNGNG
整数の任意の桁を取り出したい
2345だったら2桁目の4だけ取り出したいっす

どうすればいいっぺ?
0973デフォルトの名無しさんNGNG
n/(int)pow(radix, col-1)%radix
0974デフォルトの名無しさんNGNG
int ans;
sprintf(buf, "%d", n);
ans = (buf + strlen(buf) - col) + '0';
0975デフォルトの名無しさんNGNG
ans = *(buf + strlen(buf) - col) + '0';

だった。
0976デフォルトの名無しさんNGNG
-'0'じゃないのか?
0977デフォルトの名無しさんNGNG
2345/10%10
0978デフォルトの名無しさんNGNG
>>977>973
0979デフォルトの名無しさんNGNG
>>978
もちろんわかって書いている。わかりやすく書いただけだ。
0980デフォルトの名無しさんNGNG
2つのクラスが入り組んで定義したいときなんだけど、
ダミーを置いたり?の順序がわからん。
どこをどう直せばいい?

class B;

class A { public:
  B *b;
  int n;
  void f() { printf("%d\n", b->n); }
};

class B { public:
  A *a;
  int n;
  void f() { printf("%d\n", a->n); }
};

なお、この例では、Aのf()のprintfでb->nを求めるところで、
クラスBの形が未定義なので、エラーが出る。
0981972NGNG
みんなサンキュ
ためになったよ
0982デフォルトの名無しさんNGNG
>>980
A::f() を class B {} の定義の後で定義すればいいだけだと思うが...。
0983デフォルトの名無しさんNGNG
borland C++を使っているのですが以下のプログラムをコンパイルできません。
エラーメッセージは、
Error: 外部シンボル'_srand48'が未解決(C:\BORLAND\BCC55\SOURCE\DELTA1.OBJが参照)
Error: 外部シンボル'_drand48'が未解決(C:\BORLAND\BCC55\SOURCE\DELTA1.OBJが参照)
と出ます。
どなたか助言お願いします。
以下プログラム
0984デフォルトの名無しさんNGNG
未解決ってくらいだからライブラリにリンクが通ってないんだろ
0985983NGNG
長すぎて書き込み不可で改行も怒られます・・・
ので関係あると思われるところだけ。
#include<time.h>
#include(stdlib.h>
は書いてあってどうもsrand48とdrand48でエラーが出るみたいです。
コンパイルはbcc32 ファイル名.cでやりました。
0986デフォルトの名無しさんNGNG
>>985
>#include(stdlib.h>
     ↑これは大丈夫か?
0987983NGNG
>>984
今までLinuxでやっていたので用語がよく分かりません・・・
ありがとうございます、調べてみます。

>>986
あせって(になってました。プログラムではちゃんと<になっています。
0988デフォルトの名無しさんNGNG
>>987
反射的にレス返してしまったがbcc32にrand48は存在するの?
Unix系のCコンパイラならサポートしてることが多いようだけど。
0989デフォルトの名無しさんNGNG
>>962
>>963
ありがとうございます。
0990デフォルトの名無しさんNGNG
>>987
1のウプろだにプログラム丸ごとあげれ
そっちのほうが早い
0991デフォルトの名無しさんNGNG
次スレがたつまで以下レス禁止
質問・回答も控えてください。
次スレを立てた方は誘導をおながいします
漏れは立てれません
0992983NGNG
>>988
rand48が存在するかどうか、ですか
分かるようなら調べてみます

>>990
ありがとうございます、うpしてきました
0993デフォルトの名無しさんNGNG
次スレ。このスレを使い切ってから移動してください。
【初心者歓迎】C/C++室 Ver.7【環境依存OK】
http://pc5.2ch.net/test/read.cgi/tech/1086373839/l50
0994デフォルトの名無しさんNGNG
994
0995デフォルトの名無しさんNGNG
>>983
BCC、というよりC++の標準ライブラリにrand48はない。
0996デフォルトの名無しさんNGNG
996
0997デフォルトの名無しさんNGNG
997
0998デフォルトの名無しさんNGNG
998
0999デフォルトの名無しさんNGNG
999
1000デフォルトの名無しさんNGNG
1000
10011001Over 1000Thread
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。