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

C言語なら俺に聞け(入門編)Part 124

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん2014/01/07(火) 21:12:49.42
C言語の入門者向け解説スレッドです。

★前スレ
C言語なら俺に聞け(入門編)Part 123
http://toro.2ch.net/test/read.cgi/mmo/1384247471/
★過去スレ
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++の宿題片付けます 166代目
http://toro.2ch.net/test/read.cgi/tech/1381909900/
★C++言語については避けてください。C++対応明記スレへどうぞ。
★分からない事をなるべく詳しく書いて下さい。
★ソースコードを晒すと答えやすくなるかもしれません。
  # 抜粋/整形厳禁、コンパイラに渡したソースをそのまま貼ること。
  # サイズが大きい場合はアップローダ等を利用してください。
http://codepad.org/
http://ideone.com/
★開発環境や動作環境も晒すと答えが早いかもしれません。
★質問者は最初にその質問をした時のレス番号を名前欄に書いて下さい。
【重要】
当たり前の事ですが、2chではコピペ荒らしは禁止されています
0153デフォルトの名無しさん2014/01/10(金) 19:23:37.41
>>148
動作が速いってのがポイントだと思う

ゲームなんて大抵の言語で作れるけど、実行速度はどこかで頭打ちになる
頭打ちになってから実行速度の速い言語を学習しなおすのも面倒だし
だったら最初からCでやったほうがいい

アセンブラのほうが速いけどアセンブラは面倒くさすぎる
0154デフォルトの名無しさん2014/01/10(金) 19:26:01.37
>>133
釣りだろ、と思って100万回やってみたら意外に確率通りに分布してくれた
本当なのか?
0155デフォルトの名無しさん2014/01/10(金) 19:38:10.06
質問です。
所持できるアイテムの上限を99個とするとき、アイテ
ムを入手するたびにリアロックでアイテムを記憶する
メモリを拡張していったほうがいいのでしょうか?
それとも最初のマロックで99個分確保してしまったほ
うがいいのでしょうか?
0156デフォルトの名無しさん2014/01/10(金) 19:45:38.07
マロックってww mallocか
getsをゲッツと読むような感覚
0157デフォルトの名無しさん2014/01/10(金) 19:46:34.80
意地でもここでやりたいがために
C言語をからめようとしてるのがうざい
移動しろ

ゲームプログラムなら俺に聞け30
http://toro.2ch.net/test/read.cgi/tech/1388933972/
0158デフォルトの名無しさん2014/01/10(金) 19:48:21.43
昔気になってYoutubeで見たけど
ネイティブな外人さんもマロックって言うんだよな
0159デフォルトの名無しさん2014/01/10(金) 19:48:45.07
>>157
だからそこは放置されるって
0160デフォルトの名無しさん2014/01/10(金) 19:50:05.03
>>159
盛り上げればいいんじゃん

ジャパンエキスポに 寄生する朝鮮人じゃないんだから
0161デフォルトの名無しさん2014/01/10(金) 19:53:30.29
上限近くまで使われるのが普通なら最初に全部マロックしてしまうし、
数個程度しか使われないのが普通なら毎回リアロックするし、
間とをって、例えば4の倍数個ずつマロックするとか、そんな感じ。
0162デフォルトの名無しさん2014/01/10(金) 19:58:44.73
>>159
だからスレチを見逃せってか
「人の嫌がることをすすんでやります」
の解釈が日本と異なる文化圏の人か
0163デフォルトの名無しさん2014/01/10(金) 20:01:21.93
>>158
そうなのか
じゃあゲッツも許されるよな
freopenはフリオープンと読んでいるしgetcはゲッチと読んでいる
charはキャラと呼ばずにチャーと読んでる
0164デフォルトの名無しさん2014/01/10(金) 20:05:15.67
getch()もゲッチと読むのか?w
まあこれは環境依存の関数だけど
0165デフォルトの名無しさん2014/01/10(金) 20:09:15.86
getch() → ゲッチ
getc() → ゲック

ゲッチは環境依存というよりカーシスの関数だな
0166デフォルトの名無しさん2014/01/10(金) 20:13:51.01
>>162
そこまで言うならここでは言語仕様の話は今後一切するなよ。
「〇〇を実現するためのコード」は一切アウトってことでいいな。
0167デフォルトの名無しさん2014/01/10(金) 20:14:18.26
いんくるーどすたじおえっち
0168デフォルトの名無しさん2014/01/10(金) 20:16:03.75
>>166
こっちはこっちでやるから気にしなくていいよ
0169デフォルトの名無しさん2014/01/10(金) 20:17:51.65
>>166
延々続けてただろ
どこのマヌケだ
0170デフォルトの名無しさん2014/01/10(金) 20:20:39.55
>延々
こういう曖昧な表現でしかモノを言えないのが自治のためだけに住み着いてる基地害w
0171デフォルトの名無しさん2014/01/10(金) 20:23:19.23
荒らしのためだけに住み着くよりはマシだな
0172デフォルトの名無しさん2014/01/10(金) 20:23:27.69
>>165
ゲックか
これからよう呼ばせてもらうかw

「あのーこのエフゲックなんですけど〜」とか社内で大声出したらどうなるかやってみるかw
Linuxでもあるねゲッチ
0173デフォルトの名無しさん2014/01/10(金) 20:24:49.93
甘いな
fgetcは「フゲック」だ
fgri()なんて関数があったら「ふぐり」と呼べるんだが
0174 ◆QZaw55cn4c 2014/01/10(金) 20:26:43.79
>>154
線形合同法だね
0175デフォルトの名無しさん2014/01/10(金) 20:28:21.09
>>161
難しいですね・・・。
開発者である自分自身のテストプレイでは平均40個く
らいまでですが、普通の人がどのくらい持つか分から
ないですし・・・。
0176デフォルトの名無しさん2014/01/10(金) 20:34:15.17
リアロックって車の後部ドアをロックするようにも聞こえる
そう言えばC++ではnewでrealloc()に相当するような関数はないが(Cのように使えばあるが)、
メモリブロックの調整で済むかコピーするかは実行時に判断出来ないので削ってしまったんだな
コンテナ使えば関係ないし

コピーコンストラクタと代入演算子の多重定義で相性が悪かったのかもしれんし
ってここはC++のスレではなかった
これこそスレ違い
0177デフォルトの名無しさん2014/01/10(金) 20:34:15.48
ゲープロスレ立てたのってここの自治ゴミだろ
テンプレも前スレもいい加減
スレの一つも満足に立ててから言えよゴミが
0178デフォルトの名無しさん2014/01/10(金) 20:34:50.90
>>177
だから●持ってるんだけど知っての通り今はスレ立てに使えないだろうが
どれだけ不便してるか
0179デフォルトの名無しさん2014/01/10(金) 20:37:52.82
荒らしはいつも偉そうだな
まあ謙虚な荒らしなんていないがwww
0180デフォルトの名無しさん2014/01/10(金) 20:41:09.86
だよな
気に入らないってだけで荒らし認定する糖質と同じくらい偉そうだよなwww
0181デフォルトの名無しさん2014/01/10(金) 20:43:29.20
>>152
Cならさらっと書いてやるからどんな状況か詳しく
0182デフォルトの名無しさん2014/01/10(金) 20:46:14.82
OpenGL使ってるのか
確かにCだと面倒だな
0183デフォルトの名無しさん2014/01/10(金) 20:50:49.36
C言語でオシャレにラブレターみたいなの書けるの?
0184デフォルトの名無しさん2014/01/10(金) 21:03:12.45
>>165
ゲットキャラ
ゲットシー
0185デフォルトの名無しさん2014/01/10(金) 21:04:42.22
>>183
int main()
{
while(1){ printf("好きだ。愛してる。"); }
return 0;
}
0186デフォルトの名無しさん2014/01/10(金) 21:07:05.91
>>183
IOCCCで、おしゃれなラブレターを見た記憶がある
0187デフォルトの名無しさん2014/01/10(金) 21:10:37.89
>>181
C++ なら コンストラクタで glBegin デストラクタで glEnd ってやるクラス用意しといて
そのオブジェクトを作れば glBegin 〜 glEnd の入れ子の保障が文法の力で楽できるでしょ
(new 〜 delete は考えないw)

Cでそういう楽できるしくみって無理じゃない? 書く人の注意力に任すしか方法がないという感じなんだけど
01881872014/01/10(金) 21:18:45.54
{ と } の数あわせろ ってのと同じ次元かも
glBegin() が { に相当
glEnd() が } に相当
インデントするなりして間違いなく開いたら閉じろ ってね
0189デフォルトの名無しさん2014/01/10(金) 21:19:18.70
>>187
どこのサンプルみても同じスコープ内でBeginとEndを対にしてるわけだが
0190デフォルトの名無しさん2014/01/10(金) 21:20:34.45
>>189
んとね 自分で書いてるときに glEnd を書き漏らした場合にわからない
それを書き漏らさないように工夫できないか? そういう話
0191デフォルトの名無しさん2014/01/10(金) 21:32:31.98
>>190
コンストラクタ、デストラクタに分けて書く方が、
begin,endの対を何処に書いたかわからなくなるだろ
fopen,fcloseの対も、glBegin,glEndも、
可能な限り同じスコープに書くもんじゃねーの?
0192デフォルトの名無しさん2014/01/10(金) 21:44:43.57
ふむん 俺が特異ということか
同じスコープだよ

Begin
数行
(End ここで閉じ忘れ)
Begin
数行
End
Begin
数行
End
Begin
数行
End

うまく描画できてなくて 閉じ忘れを見つけるのに苦労したもんでね。。。
0193デフォルトの名無しさん2014/01/10(金) 21:45:23.49
>>184
FFにケット・シーとかいうのがいたような記憶が
関係ないけど
0194デフォルトの名無しさん2014/01/10(金) 21:46:06.55
OpenGL使ってるとメモリリークの原因探るのに苦労する事ないか?
0195デフォルトの名無しさん2014/01/10(金) 21:55:20.70
X11の時点でリークしてるからプロファイラ使ってるわw
0196デフォルトの名無しさん2014/01/10(金) 21:57:05.66
>>188
myBegin()とmyEnd()とmyAllEnd()作って、
myBegin()ではglBegin()すると同時にカウンタを増やす。
myEnd()ではglEnd()すると同時にカウンタを増やす。
最後にmyAllEnd()を必ず1回呼び出すが、ここではカウンタの残り値の数だけglEnd()を呼び出す。

美しい、なんて美しい仕組みなんだ。
例えmyAllEnd()を2回呼んでもバグにならない至高の仕組み。
0197デフォルトの名無しさん2014/01/10(金) 22:05:15.86
>>196
違うだろ

>>192のトラブルを解決するにはBeginのラッパー作ってBeginラッパー内ではまずbeginフラグをチェックして、trueならまずEndしてからBeginしてbeginフラグを立てればよい

EndラッパーではEndすると同時にbeginにfalseをセットすればよい
0198デフォルトの名無しさん2014/01/10(金) 22:05:28.80
perlかgrepつかって数えろ
0199デフォルトの名無しさん2014/01/10(金) 22:07:39.80
>>196
循環しなければね、循環参照ならそうはいかないが、そのときはどうする?
0200デフォルトの名無しさん2014/01/10(金) 22:08:47.20
>>197
ネストができないbegin〜endとか誰得?
0201デフォルトの名無しさん2014/01/10(金) 22:09:36.72
文字列がただのファイル名かフルパスかを判定する方法を教えてってください
0202デフォルトの名無しさん2014/01/10(金) 22:19:39.86
lintでOK
0203デフォルトの名無しさん2014/01/10(金) 22:21:40.56
>>201
/ だの x: ならフルパス
0204デフォルトの名無しさん2014/01/10(金) 22:24:26.19
[ readlink -f $file = $file ]
0205デフォルトの名無しさん2014/01/10(金) 22:26:51.76
それは相対パスであることが条件だな
0206デフォルトの名無しさん2014/01/10(金) 23:07:31.72
つうか、glBegin/End とかやるのはもう古いよね。
0207デフォルトの名無しさん2014/01/10(金) 23:16:38.00
reallocするはずのところをmallocしてたせいで
メモリ上のデータが一部消える不可解なバグに3時間悩まされた
死ねよ
0208デフォルトの名無しさん2014/01/10(金) 23:21:24.36
リンクが切れただけで消えてはいないんじゃない?
0209デフォルトの名無しさん2014/01/10(金) 23:23:09.91
>>201
GetFullPathName
0210デフォルトの名無しさん2014/01/10(金) 23:23:35.48
うるさいハゲ
それくらい知ってるわ
0211デフォルトの名無しさん2014/01/10(金) 23:56:38.77
それがどうしたチビデブ
0212デフォルトの名無しさん2014/01/11(土) 00:40:50.47
>>207
自前でデバッグ用アロケータを作るがよい
02132012014/01/11(土) 00:45:48.88
ありがとうございます

>>203さんのを参考に
filename[1]==':'のときにフルパスだと判定することで目的が達成できました
これでマップとモンスターのデータが管理しやすくなります
0214デフォルトの名無しさん2014/01/11(土) 00:49:05.66
お前らC言語でコーディングするときに聴いてる音楽教えろ
0215デフォルトの名無しさん2014/01/11(土) 00:55:18.88
フィオナアップル
0216デフォルトの名無しさん2014/01/11(土) 00:56:57.31
>>214
恋愛サーキュレーション
0217デフォルトの名無しさん2014/01/11(土) 01:00:55.01
プリキュア連続再生
0218デフォルトの名無しさん2014/01/11(土) 01:07:10.17
:>>200
DirectXしか使ったことないんだけど、DirectXのBegin〜Endはネストしないぞ
OpenGLはネストするの?
0219デフォルトの名無しさん2014/01/11(土) 01:40:01.05
お前ら未だにrand()使ってんのかよ。

学会によっては禁止されてるほどアレな関数だぞ。
0220デフォルトの名無しさん2014/01/11(土) 01:43:50.75
そうかそうか
0221デフォルトの名無しさん2014/01/11(土) 01:44:33.67
学会によらず禁止されたら取り込まれるさ
0222デフォルトの名無しさん2014/01/11(土) 02:15:25.81
>学会によっては禁止

馬鹿はどうしようもないな。
用途によって禁止されるところがあるのはおかしなことではない。

むしろ標準化されることの重要性や
用途によって要求される乱数性の度合いを度外視して
「俺のすげーライブラリ」を進めてくる奴は迷惑千万
0223デフォルトの名無しさん2014/01/11(土) 05:10:30.25
randをお使わなかったらどうしんだよ
ミリ秒を割った」余りにでもするkっか?
0224デフォルトの名無しさん2014/01/11(土) 08:03:47.01
禁句: てりやきツイスター
0225デフォルトの名無しさん2014/01/11(土) 08:21:23.58
>>213
>>203は嘘つきなので信じないで下さい
0226デフォルトの名無しさん2014/01/11(土) 09:15:39.56
読み難いC言語ソースコードコンテストの優勝者発表
ttp://news.mynavi.jp/news/2014/01/09/091/
0227デフォルトの名無しさん2014/01/11(土) 10:55:07.29
擬似乱数で周期が短いんだっけ?
boostにあるmtなんとか推奨されてたな
0228デフォルトの名無しさん2014/01/11(土) 11:09:54.87
ゲームプログラミングやってたら乱数ならメルセンヌツイスタとみみにたこができるくらい聞かされるだろ
いつまですれ違いを続けてるんだ
0229デフォルトの名無しさん2014/01/11(土) 11:18:28.72
ゲームの乱数なんて男女のテーブルで十分
能力的に無理だからそれ以上考えるな

いい加減すれ違いやめれ
0230デフォルトの名無しさん2014/01/11(土) 11:34:06.44
xorshiftがお手軽でいい
0231デフォルトの名無しさん2014/01/11(土) 11:37:46.67
最大最小を求めるやつです
ctrl+zで終了したいのですがctrl+z入力すると改行されて入力待ち、もう一回入れると終了します。
文字列に突っ込んでるからまずいのでしょうか?
どうなってる%
0232デフォルトの名無しさん2014/01/11(土) 11:40:46.13
すいませんm(_ _)m
最大最小を求めるやつです
ctrl+zで終了したいのですがctrl+z入力すると改行されて入力待ち、もう一回入れると終了してくれます。
文字列に突っ込んでるからまずいのでしょうか?
どうなってるのか教えてください
void pr7(void)
{ int f=0;double max=0,min=0,c=1;char d="1";
char* a=&d;
char* enda;
printf("数字入れて:");
rewind(stdin);
while(scanf("%s",a)!=EOF)
{ c=strtod(a,&enda);
if (f==0){max=c;min=c;f++;}
else if (c>=max) {max=c;printf("max");}
else if(c<=min){min=c;}
printf("%.2f",c);
printf("\n数字入れて:");
rewind(stdin);}
printf("max=%.2f,min=%.2f\n",max,min);
}
0233デフォルトの名無しさん2014/01/11(土) 12:09:33.05
UnixかWindowsのキー入力とかシグナルハンドラについて書かれた鈍器でも調べなさい
0234デフォルトの名無しさん2014/01/11(土) 15:03:28.44
C言語を使ってエクセルのファイルを読み込む時に
都道府県名とかの漢字を表示せるやり方教えてくださいな
ぐぐってもビットがちがうとかいまいちよくわからんかった
ちなみにウインドウズ
0235デフォルトの名無しさん2014/01/11(土) 15:05:12.89
何を言ってるか全く分からんがもしかしてバイナリデータを単純にテキストで読もうとしてるのだろうか
0236デフォルトの名無しさん2014/01/11(土) 15:09:38.11
printf
0237デフォルトの名無しさん2014/01/11(土) 15:11:05.83
さすがにCSVにしてるかパース用ライブラリ使ってるだろw
0238デフォルトの名無しさん2014/01/11(土) 15:12:14.89
エクセルのデータを読み込んでコマンドプロンプトの実行画面で表示したいんだが、
漢字のところが記号とかになったりして困ってる
うーん伝わるかな?
0239デフォルトの名無しさん2014/01/11(土) 15:13:54.34
コンシューマーゲームってC言語で作られてるの?
0240デフォルトの名無しさん2014/01/11(土) 15:16:03.81
ファイル閉じてからprintfで出力のとこは大丈夫だと思う
char使ってやるのはあってますか?
0241デフォルトの名無しさん2014/01/11(土) 15:19:43.37
アイテム画面でアイテムが画面に入りきらないときに
カーソルが画面の一番下にきて、さらに下を押すとアイテム画面がスクロールするじゃん?
あれってどうやんの?
0242デフォルトの名無しさん2014/01/11(土) 15:22:11.65
>>240
カーソルの位置は変えずにアイテムの表示だけを変える。
02432342014/01/11(土) 15:30:19.23
csvにしていなかったようだ
解決、ありがとう
0244デフォルトの名無しさん2014/01/11(土) 15:54:25.52
>>242
やってみたけどアイテムと表示がずれるようになった
アイテム一覧はスクロールするけど
どれ選んでもスクロール前の一番下にあったアイテムになる
0245デフォルトの名無しさん2014/01/11(土) 16:05:30.63
ゲーム制作スレ行くかソース貼りなさいよ
0246デフォルトの名無しさん2014/01/11(土) 16:12:05.86
お前らカウンタ(cnt>=0)が0のときに処理を抜けるときどう書く?

if (cnt==0)break;

って書く?
俺はカウンタの数値そのものをミスってマイナスになってたら怖いから
どうしても

if (cnt<=0)break;

って書いてしまうんだが
0247デフォルトの名無しさん2014/01/11(土) 16:14:25.91
それはバグの発見を遅らせる拙い手だ
0248片山博文MZコスモ ◆T6xkBnTXz7B0 2014/01/11(土) 16:33:42.45
>>244
スクロール位置とカーソル位置を保持する

貴殿に差し上げる担々麺は御座いません
0249デフォルトの名無しさん2014/01/11(土) 16:39:34.04
そんな丁寧に言われても
0250デフォルトの名無しさん2014/01/11(土) 17:51:48.00
情報が古いかも知れないけどエクセルのファイルフォーマットって
IStorageインターフェースを使うとファイル内ファイルシステムみたいに
読み込めるんじゃなかったっけ?
OLEは言語非依存だからC言語からでも普通に操作できるよ
と言うより、プリミティブな操作は大抵C言語で解説されてる
0251デフォルトの名無しさん2014/01/11(土) 17:52:48.71
>>247
サンクス



ではお前らにもう一つ質問だ
不定回数(不定であって無限ではない)のループ処理でwhileを使う場合、無限ループ対策はしてる?
例えば理論上最大でも1000回でbreakするwhileループの場合、
何かの加減で無限ループになったら怖いから1ループごとに本来の処理目的とは関係ない変数cntをインクリメントして、
それが理論上の最大回数を超えた場合でもbreakするようにしたりしてる

cnt=0;
while(1){
//本来の処理
//本来の処理、何らかの条件でbreak
//本来の処理
//本来の処理
cnt++;
if (cnt>=1000)break;
}

本来の処理でメモリ操作ミスってcntがやられたとき(cntが永遠に1000を越えないようなバグ)の対策もしといたほうがいいかな
0252デフォルトの名無しさん2014/01/11(土) 18:10:16.00
cnt=0;
while (1) {
if (cnt == 1000) {
break;
// 処理1
// 処理2
// …
}
}
ifの位置が違って気持ち悪い
普通ならこう書くけど
ループってのは、最初に条件分岐するってわかってる??
■ このスレッドは過去ログ倉庫に格納されています