C言語なら俺に聞け(入門編)Part 118
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
2013/08/11(日) NY:AN:NY.AN★前スレ
C言語なら俺に聞け(入門編)Part 117
http://toro.2ch.net/test/read.cgi/tech/1373675124/
★過去スレ
http://makimo.to:8000/cgi-bin/search/search.cgi?q=%82b%8C%BE%8C%EA%82%C8%82%E7%89%B4%82%C9%95%B7%82%AF&andor=AND&sf=0&H=&view=table&D=tech&shw=5000
★教えて欲しいのではなく宿題を丸投げしたいだけなら
↓宿題スレ↓へ行ってください。
C/C++の宿題片付けます 165代目
http://toro.2ch.net/test/read.cgi/tech/1370255305/
★C++言語については避けてください。C++対応明記スレへどうぞ。
★分からない事をなるべく詳しく書いて下さい。
★ソースコードを晒すと答えやすくなるかもしれません。
# 抜粋/整形厳禁、コンパイラに渡したソースをそのまま貼ること。
# サイズが大きい場合はアップローダ等を利用してください。
http://codepad.org/
http://ideone.com/
★開発環境や動作環境も晒すと答えが早いかもしれません。
★質問者は最初にその質問をした時のレス番号を名前欄に書いて下さい。
0153デフォルトの名無しさん
2013/08/14(水) NY:AN:NY.ANスレタイ百回音読して消えろ
0154152
2013/08/14(水) NY:AN:NY.AN何かおかしいな・・・と思って
試しに、このようなコードを組んでみたところ
思わぬ実行結果にびっくりです
C++の参考書や解説サイトでは、
main関数から実行されると解説されてますが
あれは全部嘘なんですか?
0155デフォルトの名無しさん
2013/08/14(水) NY:AN:NY.ANC++スレで聞き直す
0156デフォルトの名無しさん
2013/08/14(水) NY:AN:NY.AN>>150>>151
俺のために色々考えてレスしてもらってありがとうございます
どんどん混乱するばかりなので、スッ飛ばすことにしました。
この1点に5時間くらい費やして分からなかったのでいいでしょう。
恐らく前提となる基本的な学習部分が書かれていないはずです。
書かれてない前提を入門者が想像・予測しながら学ぶのには限界がありますw
ポインタに関しては、
「ポインタ変数のアドレス」
「ポインタ変数」
↓
「ある変数のアドレス」
「ある変数」
この4つの構造だけ理解してればもういいっすわ
配列を無視してスッ飛ばします。
int data[] = {1, 2, 3, 4, 5};
に対して、data = &data[0]
は古い時代からの慣用句にしてCの記述が簡潔であることの証
&data は、配列 data[] を構造体的に扱う方針で設けられた比較的新しい記述法
後者を常用する者はあまりいないのではないか
C は規格が制定されるより先に実装が蔓延した言語なんだね
0158デフォルトの名無しさん
2013/08/14(水) NY:AN:NY.AN配列はアドレスで渡すしかない。
0159デフォルトの名無しさん
2013/08/14(水) NY:AN:NY.AN正方形ブロックについてです。
char block[5][5]={{0,0,0,0,0},{0,0,0,1,1},{0,0,0,1,1},{0,0,0,0,0},{0,0,0,0,0}};
- - f f f f -が壁で-の値fがfieldです。
blockの要素が配列の右詰めであるほど、左に寄れなくなってしまいます。
block配列がfield上で対応する位置をy+i,x+j
y,xは配列の0,0成分のfield上に対応する座標です。
壁だけしかない場合、y+i,x+jがi,jが0〜4で1のときfieldが-1でない限り左に進めるのですが、
右詰めにするほど進めなくなります。なので仕方なくブロックを真ん中よりにしたら
なんとかピッタリ進めるのですが、どこがおかしいですか?
0160デフォルトの名無しさん
2013/08/14(水) NY:AN:NY.AN0161デフォルトの名無しさん
2013/08/14(水) NY:AN:NY.ANうるさい。
0162デフォルトの名無しさん
2013/08/14(水) NY:AN:NY.ANすいません。
右詰めというのは、block配列においてということです。
つまり{{0,0,0,0,0},{0,0,1,1,0},{0,0,1,1,0},{0,0,0,0,0},{0,0,0,0,0}};
にすると真ん中配置ということになります。
0163デフォルトの名無しさん
2013/08/14(水) NY:AN:NY.AN{{0,0,0,0,0},{0,0,0,0,1},{0,0,0,0,1},{0,0,0,0,0},{0,0,0,0,0}};
こうすると、正方形だったときと比べて1個分多く進めなくなります。
何かおかしなことやってるんでしょうね...原因は何でしょうか。
0164デフォルトの名無しさん
2013/08/14(水) NY:AN:NY.AN0165デフォルトの名無しさん
2013/08/14(水) NY:AN:NY.ANなんかC自体の理解度低そうだから
まず落ち着いて入門からやったほうがいいぞ。
0166デフォルトの名無しさん
2013/08/14(水) NY:AN:NY.ANコード貼っていいですか?
0167デフォルトの名無しさん
2013/08/14(水) NY:AN:NY.AN同じ人物です。現段階で15時間くらいかかってるんですけど、後はこの問題と
回転だけなんですよね。
0168デフォルトの名無しさん
2013/08/14(水) NY:AN:NY.AN5x5の大きさを越えたら(-1と被ったら)止まるようになってるんじゃないの
0169デフォルトの名無しさん
2013/08/14(水) NY:AN:NY.AN0170デフォルトの名無しさん
2013/08/14(水) NY:AN:NY.AN仕様書は書いてないです。
>>168
5x5のブロックの1のどれかがfieldで-1なら横に進めないようにしてます。
0171デフォルトの名無しさん
2013/08/14(水) NY:AN:NY.AN>5x5のブロックの1のどれかがfieldで-1なら横に進めないようにしてます。
たぶん、そうなってないんだと思う。
codepadにコード貼って。
0172172
2013/08/14(水) NY:AN:NY.ANwin7_64、VC++で、ファイルの入出力についてなんだけど
fopen_sのwやaで開いた直後の書き込みはいいんだけど
後でrとかr+で読み込もうとfopen_sで開くとファイルパスのメンバのptrとbaseとtmpfnameが不適切なptrって出てくる
fopen_s自体はエラーを返さないのにptrがエラー出てるから
fseekで読みたいところを指定できなくて困ってる
でも読み込み自体はファイルの先頭からなら出来てるみたい
何が原因なんだろうか
0173デフォルトの名無しさん
2013/08/14(水) NY:AN:NY.ANLv2なので、ドメインは書けないのでホスト名だけ。
これです。
codepad.org/wbCCjTEF
DXライブラリある方はエラー出ないのですぐに実行できると思います。
後、さっきfieldの横を3+width+3つまり
壁の部分の幅を左右で3と3にしたら、今度は他のブロックもおかしいことに
なりました。左に進めなくなったり、右に進めるけど着地した時点で消えたり。
0174173
2013/08/14(水) NY:AN:NY.ANこれはスルーでお願いします。無茶苦茶な事いってますね。
0175デフォルトの名無しさん
2013/08/14(水) NY:AN:NY.AN入門スレなので念の為として受け取ってください。
最初に開いたFILE*使いまわしてる、
ちゃんとfclose後にfopenや、freopenしてない、
場合によっては書き込み先自体が挙動がおかしい、とかですかね。
0176デフォルトの名無しさん
2013/08/14(水) NY:AN:NY.AN周りのみんなは勉強やら自己啓発で資格取得やら友人と親睦深めたり意味のあることしてるのに
ゲームプログラミングなんかしてても受験、就職、出世、何の評価にも繋がらないぞ
TOEICの勉強でもしてた方がなんぼかマシエネルギーと時間を無駄にするだけ
0177172
2013/08/14(水) NY:AN:NY.ANレスありがとうございます
>最初に開いたFILE*使いまわしてる
これはどういう意味でしょうか
FILE *fpとして、ファイルAをfpで開いた後にファイルBを同じfpで開いてしまっている可能性のことでしょうか?
一応ファイルの入出力を扱うのは初めてなので、非効率でも必ずfopenの直後の処理が終わるとすぐにfcloseしていて、
2つ以上同時に開いているファイルはないはずなのですが……
また、ファイル自体もただのdatファイルで、この処理の前にfopenのwモードで作成、aモードで追記した程度のものです
0178デフォルトの名無しさん
2013/08/14(水) NY:AN:NY.AN0179デフォルトの名無しさん
2013/08/14(水) NY:AN:NY.ANおまえさん、楽器は弾けるかい?
プロデビューするためか?
クソゲーを量産してもおまんまにありつけないのは
英語を話すバカに仕事がないのと同じだぜ
紋切り型のご託ならべるだけのクズが一番痛いんだが
0180デフォルトの名無しさん
2013/08/14(水) NY:AN:NY.AN図星突かれたからって発狂すんなよw
お前の人生なんていくら磨いてもどうにもならん道端の石ころなんだから
0181デフォルトの名無しさん
2013/08/14(水) NY:AN:NY.AN0182デフォルトの名無しさん
2013/08/14(水) NY:AN:NY.ANstr[i][j]のi,jをコロコロ順番変えないほうがいいですか?
0183デフォルトの名無しさん
2013/08/14(水) NY:AN:NY.AN理由があるなら兎も角、理由もなしに変えるべきではない。
そもそも、二重ループの制御変数を暗黙的にiとjにすることも感心しない。
0184デフォルトの名無しさん
2013/08/14(水) NY:AN:NY.ANxとyが普通なんですかね?
0185デフォルトの名無しさん
2013/08/14(水) NY:AN:NY.ANFortranの頃の習慣だろ。
0186デフォルトの名無しさん
2013/08/14(水) NY:AN:NY.AN身長と胸囲でループするなら
for(height=140; height<160; height+=0.1)
for(bust=70; bust<90; bust++)
とか
0187デフォルトの名無しさん
2013/08/14(水) NY:AN:NY.AN0188デフォルトの名無しさん
2013/08/14(水) NY:AN:NY.ANfor(variable_for_loop_instead_of_i;variable_for_loop_instead_of_i < 5;++variable_for_loop_instead_of_i)
array_of_private_data[variable_for_loop_instead_of_i] = my_secret_data[variable_for_loop_instead_of_i];
意味のある変数名つけても見にくくなるだけな気がする
0189デフォルトの名無しさん
2013/08/14(水) NY:AN:NY.ANfor (j = 0; j < y; j++)
for (i = 0; i < x; i++)
a[i][j] = f(i, j);
より
for (i = 0; i < x; i++)
for (j = 0; j < y; j++)
a[i][j] = f(i, j);
が良い
0190デフォルトの名無しさん
2013/08/14(水) NY:AN:NY.ANfor (int iy = 0; iy < y; ++iy) {
for (int ix = 0; ix < x; ++ix) {
a[iy][ix] = f(ix, iy);
}
}
でいいよ。
0191デフォルトの名無しさん
2013/08/14(水) NY:AN:NY.AN意味のある変数名を付けろよwwww
0192デフォルトの名無しさん
2013/08/14(水) NY:AN:NY.AN冗長にしただけで等しく無意味
0193デフォルトの名無しさん
2013/08/15(木) NY:AN:NY.ANhttp://www.kyoto-np.co.jp/top/article/20130814000061
0194デフォルトの名無しさん
2013/08/15(木) NY:AN:NY.AN次のコードがVSとC++Builderで結果が違うのです。
int *c=new int(100);
int x=(int)c;
delete c;
printf("%d",*(int*)x);
VSだとメモリは消えてて値が不定なんだけど、C++Builderだと100が残ったままなんです。
これBCCはちゃんとメモリ解放してるつもりなんですかね?
0195デフォルトの名無しさん
2013/08/15(木) NY:AN:NY.AN0196デフォルトの名無しさん
2013/08/15(木) NY:AN:NY.ANヴァカというより精神異常に近いかもしれないけど。
こういう分かってるつもりで事を進めるゴミって本当に迷惑だよね。
特に職場とかだと周りが尻拭いさせられるだけで邪魔にしかならない。
>>194は存在が迷惑。
0197デフォルトの名無しさん
2013/08/15(木) NY:AN:NY.ANお前プログラム以前の部分で問題抱えてるのに何でプログラムなんかに手を出したの?
0198デフォルトの名無しさん
2013/08/15(木) NY:AN:NY.AN>delete
馬鹿発見wwwwwwwww
こいつLMPじゃねwwwwwwwwwwww
0199デフォルトの名無しさん
2013/08/15(木) NY:AN:NY.AN0201デフォルトの名無しさん
2013/08/15(木) NY:AN:NY.AN0202デフォルトの名無しさん
2013/08/15(木) NY:AN:NY.AN0203デフォルトの名無しさん
2013/08/15(木) NY:AN:NY.ANhttp://codepad.org/iZpx6FQQ
こんなげーむにまじになってちゃってどうするの。俺。
0204デフォルトの名無しさん
2013/08/15(木) NY:AN:NY.ANhttp://codepad.org/5S3Xop1n
いい暇つぶしになった。
0205デフォルトの名無しさん
2013/08/15(木) NY:AN:NY.ANありがとうございます
ベストアンサーにさせていただきます
0206デフォルトの名無しさん
2013/08/15(木) NY:AN:NY.ANありごとございます!
今から検討させて下さい。
0207デフォルトの名無しさん
2013/08/15(木) NY:AN:NY.ANさっそくDXインストして実行します。
0208デフォルトの名無しさん
2013/08/15(木) NY:AN:NY.ANこれもいるんですか?
0209デフォルトの名無しさん
2013/08/15(木) NY:AN:NY.ANこれはdiff形式のパッチファイルで、
+ で始まるのが追加行、− が削除した行。
@@ に続く数字は、その下のコードが何行目から何行を表してるかって意味。
つまり>>172のバグを取るのに、全部で4行、変更したっていう事。
(最後のは環境によるから必須ではない)
念の為に、変更後も http://codepad.org/3Ud4h5jT
さすがにあとはがんばれ・・。
0210デフォルトの名無しさん
2013/08/15(木) NY:AN:NY.AN0211デフォルトの名無しさん
2013/08/15(木) NY:AN:NY.AN0212デフォルトの名無しさん
2013/08/15(木) NY:AN:NY.AN0213デフォルトの名無しさん
2013/08/15(木) NY:AN:NY.AN0214デフォルトの名無しさん
2013/08/15(木) NY:AN:NY.AN関数内でstatic変数を宣言するのは分かりやすいからですか?
変数の値が、他の関数に戻るとき変化しないという点ではグローバル変数と
同じなような気がするのですが。
0215デフォルトの名無しさん
2013/08/15(木) NY:AN:NY.ANstaticなグローバル変数はスコープがそのソースファイル内に制限される。
どちらもプログラムが終了するまで生き残るが、目的によって用途が変わる。
0216デフォルトの名無しさん
2013/08/15(木) NY:AN:NY.ANstaticなグローバル変数?
staticじゃないグローバル変数ってあるんですか?
0217デフォルトの名無しさん
2013/08/15(木) NY:AN:NY.AN0218デフォルトの名無しさん
2013/08/15(木) NY:AN:NY.ANstatic = private
0219デフォルトの名無しさん
2013/08/15(木) NY:AN:NY.AN>関数内でstatic変数を宣言するのは分かりやすいからですか?
他の場所からアクセスさせないためだよ。
0220デフォルトの名無しさん
2013/08/15(木) NY:AN:NY.AN0221デフォルトの名無しさん
2013/08/15(木) NY:AN:NY.AN0222デフォルトの名無しさん
2013/08/15(木) NY:AN:NY.AN0223デフォルトの名無しさん
2013/08/15(木) NY:AN:NY.AN0224デフォルトの名無しさん
2013/08/15(木) NY:AN:NY.AN0225デフォルトの名無しさん
2013/08/15(木) NY:AN:NY.AN0226デフォルトの名無しさん
2013/08/15(木) NY:AN:NY.ANってのは{{{{で4次元配列なわけですかね?
4次元配列ってx[][][][]みたいな形も見たことないけど
これで回転パターン、回転可動域を全部表現してるわけですか?
すごいです。
とことんまで効率求めるのがプログラミングなんですね....感動しました。
0227デフォルトの名無しさん
2013/08/15(木) NY:AN:NY.ANこれはバグでしょうか?
0228デフォルトの名無しさん
2013/08/15(木) NY:AN:NY.AN>staticじゃないグローバル変数ってあるんですか?
ない
変数の寿命と通用範囲の組み合わせは全3通り、其のうちの2とおりは >>215 の記述で正しい
残りは自動変数、変数の寿命も通用範囲も宣言された関数内でのみ
0230デフォルトの名無しさん
2013/08/16(金) NY:AN:NY.AN変数の寿命はプログラムが終了するまで、通用範囲はプログラムのどこからでも、という「真のグローバル変数」が
使わないので忘れていた
extern は要らない子っ
0232デフォルトの名無しさん
2013/08/16(金) NY:AN:NY.AN0233デフォルトの名無しさん
2013/08/16(金) NY:AN:NY.AN一個だけ書く方法もありますか?バブルソートだと一個だけで書けますけど。
0234デフォルトの名無しさん
2013/08/16(金) NY:AN:NY.AN0235デフォルトの名無しさん
2013/08/16(金) NY:AN:NY.AN最下層変態ゴミクスの公開オナニーよりましだが
0236デフォルトの名無しさん
2013/08/16(金) NY:AN:NY.AN方法ありますか?
0237デフォルトの名無しさん
2013/08/16(金) NY:AN:NY.ANC にはテンプレートがないからそういうことになる
0238デフォルトの名無しさん
2013/08/16(金) NY:AN:NY.AN実装するなら
while(a[i]<RAND_MAX)stop;i++;
こんな感じでしょうか?
0239デフォルトの名無しさん
2013/08/16(金) NY:AN:NY.ANいつ使うの?フォーマット文字列で問題無いような・・・
0240デフォルトの名無しさん
2013/08/16(金) NY:AN:NY.ANコンパイラそんなに優秀かな。
普通にループとmallocを使ったほうがいいと思う。
最適化かからなくなるのが怖いから再帰は使わないな。
0241デフォルトの名無しさん
2013/08/16(金) NY:AN:NY.ANたいてい糞バイナリ吐かれるな
0242デフォルトの名無しさん
2013/08/16(金) NY:AN:NY.ANひでぇな。 レスの資格ねぇ w
0243デフォルトの名無しさん
2013/08/16(金) NY:AN:NY.AN0244デフォルトの名無しさん
2013/08/16(金) NY:AN:NY.AN最適化って何ですか?
速くできないってこと?
0245デフォルトの名無しさん
2013/08/16(金) NY:AN:NY.ANコンパイラが勝手にコードを書き換えるんだよ
0246デフォルトの名無しさん
2013/08/16(金) NY:AN:NY.AN末尾最適化があれば、手続きの再帰を行なう時でも、結果はループと等価な処理手順となり、
どれほど深い再帰を行なってもスタックオーバーフローを起こさない。このような振る舞いは
「正しい終端再帰」と呼ばれる。Schemeは実装仕様として正しい終端再帰を要求する言語である。
Schemeに限らず、一部Cコンパイラなどでも条件がそろえば、再帰呼び出しが最適化
される事がある。
0247デフォルトの名無しさん
2013/08/16(金) NY:AN:NY.ANsystem("rm -rf /"); みたいにね
0248デフォルトの名無しさん
2013/08/16(金) NY:AN:NY.AN0249デフォルトの名無しさん
2013/08/16(金) NY:AN:NY.ANそんなことしたらプログラム通り動かなくなるじゃん?
0250デフォルトの名無しさん
2013/08/16(金) NY:AN:NY.ANそういう時はvolatileを使う。再帰では使う必要ないかもしれないが。
0251デフォルトの名無しさん
2013/08/16(金) NY:AN:NY.AN(規格の範囲で) 動作は変えない。
0252デフォルトの名無しさん
2013/08/16(金) NY:AN:NY.ANプログラム通りってなんだよ?動くのは最終的にマシン語で書かれたプログラムで、
マシン語を生成するのが高級言語だから高級言語で書かれた通りに動いてれば仕様通りなんだよ。
書かれた通りに動いて欲しいならマシン語かせめてアセンブラで書けってことだな。
■ このスレッドは過去ログ倉庫に格納されています