1 名前:デフォルトの名無しさん mailto:sage [2010/03/05(金) 23:27:18 ] C言語の*入門者*向け解説スレッドです。 ★前スレ C言語なら俺に聞け(入門編)Part 60 pc12.2ch.net/test/read.cgi/tech/1264920499/ ★過去スレ 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++室 Ver.72【環境依存OK】 pc12.2ch.net/test/read.cgi/tech/1267775473/ とか ★教えて欲しいのではなく宿題を丸投げしたいだけなら ↓宿題スレ↓へ行ってください。 C/C++の宿題片付けます 134代目 pc12.2ch.net/test/read.cgi/tech/1263824755/ ★C++言語についてはなるべく聞かないでください。C++対応明記スレへどうぞ ★分からない事をなるべく詳しく書いて下さい。 ★ソースコードを晒すと答えやすくなるかもしれません。 # 抜粋/整形厳禁、コンパイラに渡したソースをそのまま貼ること # サイズが大きい場合は宿題スレのアップローダ等を利用してください ★開発環境や動作環境も晒すと答えが早いかもしれません。 ★質問者は最初にその質問をした時のレス番号を名前欄に書いて下さい。
237 名前:デフォルトの名無しさん mailto:sage [2010/03/12(金) 15:11:31 ] 会社の言語やってるやつに聞け 実用で使われないやつやっても無用の長物 配置転換でリストラにならないように現場で使われる率高いやつ
238 名前:デフォルトの名無しさん mailto:sage [2010/03/12(金) 15:13:50 ] C言語などいくらやっても徒労に終わる 基礎が出来ても完成品が出来るまでの道のりは険しい 自分でした独習など焼け石に水状態 会社でやってるのをピンポイントでやるべき
239 名前:デフォルトの名無しさん [2010/03/12(金) 15:17:38 ] ありがとうございます。 .NET(C#?)の問い合わせが多いので その言語のサンプルを読めるようになると サポートの幅は広がるよね。 とは言われました。 そうか、と思いつつ、 基本である(と思っている)C 言語の初歩本くらい やっといた方がいいのかな、 と思ってせこせこやっていました。
240 名前:デフォルトの名無しさん mailto:sage [2010/03/12(金) 15:20:59 ] あとC#で何分野やってるのかも聞くといい。 GUIとかゲームとかネットワークとか。 その分野を重点してやる。
241 名前:デフォルトの名無しさん mailto:sage [2010/03/12(金) 15:25:07 ] C#で開発ってXbox360かと思った。
242 名前:デフォルトの名無しさん mailto:sage [2010/03/12(金) 17:16:54 ] >>239 土方を目指すのでなければCは必須
243 名前:デフォルトの名無しさん mailto:sage [2010/03/12(金) 18:00:22 ] Cできたところで結局ドカタなんすけどね
244 名前:デフォルトの名無しさん mailto:sage [2010/03/12(金) 18:37:40 ] switch(c->programming){ case YES: printf( "Cができるとは素晴らしいですね\n" ); default: c->status = "土方" break; }
245 名前:デフォルトの名無しさん mailto:sage [2010/03/12(金) 19:05:31 ] 浮動小数を文字列に変換する方法について教えてください。 求める動作は次のとおりです: * double型を文字列に変換 * printf系などの外部関数で変換しない * 整数は整数として表示(小数点を付けない) * 小数点以下の不必要な0は付けない * 有効な精度(15桁程度?)で適当に丸める * 出力が長い場合も扱える(例えば、「12340000000000000000000」など) いろいろやってみたのですが思い通りのものが作れなかったので・・・ アイデア・ヒントいただければと 自分で作ってみたものも一応晒しておきます。 ↓だと、「456」のときに「459.9999...」となってしまいうまくいきません。 codepad.org/lEqBv5Qz
246 名前:245 mailto:sage [2010/03/12(金) 19:07:20 ] ↑の「459.9999...」は「455.9999...」の間違いでした。 申し訳ない。
247 名前:デフォルトの名無しさん mailto:sage [2010/03/12(金) 19:44:29 ] 配列を関数に渡して、その値を取得したいんですが、上手くいきません どうすればいいでしょうか?
248 名前:デフォルトの名無しさん mailto:sage [2010/03/12(金) 19:46:36 ] >>247 [50] を除けばいいかも
249 名前:デフォルトの名無しさん [2010/03/12(金) 19:58:47 ] すみません、取得したいというのは int test[10]; func( &test ); a = test[ n ]; というつもりでした
250 名前:デフォルトの名無しさん mailto:sage [2010/03/12(金) 21:00:10 ] >>249 質問がよく判らんが、こういうことか? void func(int * test) { test[0] = 1; } void caller() { int test[10]; func(test); int a = test[0]; }
251 名前:デフォルトの名無しさん mailto:sage [2010/03/12(金) 21:47:19 ] >>250 それだと関数の中で1を代入しても関数を呼ぶ側では変化しないと思うんですが 普通の変数をポインタで引数を渡して変更した値を取得するプログラムの配列バージョンみたいなのは可能でしょうか?
252 名前:デフォルトの名無しさん mailto:sage [2010/03/12(金) 21:56:56 ] 変化しましたけど。。 codepad.org/OGLPv5dF
253 名前:デフォルトの名無しさん mailto:sage [2010/03/12(金) 22:57:46 ] 勘違いしてました 解決しました ありがとうございます
254 名前:デフォルトの名無しさん [2010/03/12(金) 23:31:42 ] >>238 違うね 「基礎ができて」ない奴の道のりが険しいだけ 計算をしっぱなしな奴と、ちゃんと検算する習慣がある奴の違いは 小学校で受けた教育の質から来る
255 名前:デフォルトの名無しさん mailto:sage [2010/03/12(金) 23:33:45 ] 基礎からやればいいじゃん 簡単なプログラム書くときでもホーア論理とか記述的意味論とか使って検証しながら書くとかさ
256 名前:デフォルトの名無しさん mailto:sage [2010/03/12(金) 23:58:26 ] >>222 mallocがアライメント調整してるのに自前でもやる意味あるのかな?
257 名前:デフォルトの名無しさん mailto:sage [2010/03/13(土) 00:04:47 ] 「何故かは分からんが出来たからいいや」 こういうタイプは一生伸びない。 応用できるのは何故そうなったか、つまりプロセスの部分であり、解は応用できないからである。
258 名前:デフォルトの名無しさん mailto:sage [2010/03/13(土) 00:12:55 ] うるせーばか 既解決問題の証明を一生再生産してろ
259 名前:デフォルトの名無しさん mailto:sage [2010/03/13(土) 00:19:19 ] こうしてHTMLは死んだ
260 名前:デフォルトの名無しさん mailto:sage [2010/03/13(土) 01:23:10 ] >>256 malloc()がアライメント調整してない場合も、pragma指定かAPIで調整できる場合が多いね。
261 名前:デフォルトの名無しさん mailto:sage [2010/03/13(土) 05:35:26 ] >>239 10年っていったらもう30前後なんだろ? 今更言語やっても身につかないし そんな奴は役に立たない
262 名前:デフォルトの名無しさん mailto:sage [2010/03/13(土) 08:36:24 ] 確かに>>261 は役に立たない
263 名前:デフォルトの名無しさん mailto:sage [2010/03/13(土) 12:47:32 ] >>261 お前使えねーな
264 名前:デフォルトの名無しさん mailto:sage [2010/03/13(土) 12:52:07 ] >>261 ごめん。相当気持ち悪いな、お前
265 名前:デフォルトの名無しさん mailto:sage [2010/03/13(土) 13:06:55 ] 261の人気にシット☆
266 名前:デフォルトの名無しさん mailto:sage [2010/03/13(土) 13:16:18 ] shit?
267 名前:デフォルトの名無しさん mailto:sage [2010/03/13(土) 17:04:47 ] 執刀
268 名前:デフォルトの名無しさん mailto:sage [2010/03/13(土) 19:58:55 ] ファイルが存在すれば追記でオープン ってのを格好よく書くにはどうしたらいいかな あればエラー無ければ作成ってオプションならfopen()にあるけど 逆なんだよな〜access()使うの面倒くさいな〜
269 名前:デフォルトの名無しさん mailto:sage [2010/03/13(土) 20:04:45 ] 質問です ネストって一般的に何重が限度ですか?
270 名前:デフォルトの名無しさん mailto:sage [2010/03/13(土) 20:12:56 ] 何のネストだよ
271 名前:デフォルトの名無しさん mailto:sage [2010/03/13(土) 20:14:30 ] >>268 "r+" でよくね?
272 名前:デフォルトの名無しさん mailto:sage [2010/03/13(土) 20:17:32 ] >>270 if文のです
273 名前:デフォルトの名無しさん mailto:sage [2010/03/13(土) 20:40:30 ] C言語の弱点はネストだな。短い文で使えばいいけど 間に沢山あるとわかりにくくなる for{}つかえときはcontinue;で括弧を引きずらないようにするといい 場合によってはgotoもいい 長い部分は関数化
274 名前:デフォルトの名無しさん mailto:sage [2010/03/13(土) 20:51:43 ] >>269 ,272 > 5.2.4.1 Translation limits > The implementation shall be able to translate and execute at least one > program that contains at least one instance of every one of the > following limits: > - 127 nesting levels of blocks > - ...
275 名前:デフォルトの名無しさん mailto:sage [2010/03/13(土) 20:52:04 ] >>272 みっつくらいじゃね?
276 名前:デフォルトの名無しさん mailto:sage [2010/03/13(土) 20:55:31 ] >269 ISO/IEC 9899:1999 (E) 5.2.4.1 Translation limits 1 The implementation shall be able to translate and execute at least one program that contains at least one instance of every one of the following limits:13) 127 nesting levels of blocks 63 nesting levels of conditional inclusion 63 nesting levels of parenthesized declarators within a full declarator 63 nesting levels of parenthesized expressions within a full expression 13) Implementations should avoid imposing fixed translation limits whenever possible. number of characters as the corresponding universal character name, if any)14) 14) See ``future language directions'' (6.11.3). 15 nesting levels for #included files 1023 case labels for a switch statement (excluding those for any nested switch statements) 63 levels of nested structure or union definitions in a single struct-declaration-list ネスト以外の限界については省かせてもらった やっぱり63か >274 その一つ下じゃないか
277 名前:デフォルトの名無しさん [2010/03/13(土) 20:56:03 ] >>273 ネスト深くてもわかりやすい言語なんかねーよ 安易にgoto勧めんなよ 場合によって、の解釈でとんでもないことになるし goto排斥主義者の人が来ちゃったら揉めるだろ
278 名前:デフォルトの名無しさん mailto:sage [2010/03/13(土) 20:58:54 ] だからgoto使わなければいいだけ
279 名前:デフォルトの名無しさん mailto:sage [2010/03/13(土) 21:10:33 ] >>276 "conditional includion" は 6.10.1 にある #if とかの話。
280 名前:デフォルトの名無しさん mailto:sage [2010/03/13(土) 21:13:57 ] >276 あっ、ほんとだ プリプロセッサの話だ
281 名前:デフォルトの名無しさん mailto:sage [2010/03/13(土) 21:21:24 ] >>280 許してやる
282 名前:268 mailto:sage [2010/03/13(土) 21:21:26 ] >>271 あー、オープンしてから自分でシークすりゃいいだけか。 ありがとう。
283 名前:デフォルトの名無しさん [2010/03/13(土) 22:19:58 ] プログラム勉強始めたばかりの初心者です。例えば以下のようなif文があるとします。 カッコを入れるタイミングと位置がよく理解できていません。 なんで下記のように2回連続カッコが続いて記述されるのでしょうか? きっとそれぞれのカッコがどこで始まり終わっているのかが理解できていないと思います。 必ず対になるので偶数個になるのは理解できていますが・・・ おかしな日本語で大変申し訳ありませんが、どなたかわかりやすく解説をお願いできますでしょうか。 よろしくお願いします if (条件1) { if (条件2) { 文1; } else { 文2; } } ←これは何に対してのカッコ?なんで2回連続なんだろう??? else { 文3; }
284 名前:デフォルトの名無しさん mailto:sage [2010/03/13(土) 22:25:09 ] >>283 2回連続しているけど、意味は別もの。 ネストしているカッコをそれぞれ別のカッコと考えれば分かると思うよ if(条件1)「 if(条件2)『 文1 』else『 文2 』 」 else
285 名前:デフォルトの名無しさん mailto:sage [2010/03/13(土) 22:26:00 ] >>283 例にあげた if 文自体が間違っています。 わからなくて当然です。 なんの本にかいてあったんですか?どこのサイトですか?
286 名前:デフォルトの名無しさん [2010/03/13(土) 22:31:48 ] >>283 です 解説ありがとうございます。いまからじっくり読んで見ます。汗 サイトはこちらです。コピペした時におかしくなっただけかもしれません 汗 www9.plala.or.jp/sgwr-t/c/sec06-1.html
287 名前:デフォルトの名無しさん [2010/03/13(土) 22:51:51 ] >>284 さんありがとうございます。 初心者の私にはこのように見えます。 if(条件1)「 @ if(条件2)『 A 文1 A』else『 B 文2 B 』 」@ ←上記の番号がきっとそれぞれ対になっていると思っています。ただ、 条件1が満たされなかったら下のelse文に続くからこの閉めカッコは何?とも感じます。 きっと私は文の構成の初期的なところを理解していないと思われます 汗 else
288 名前:デフォルトの名無しさん mailto:sage [2010/03/13(土) 22:56:51 ] 才能無い奴はやめてしまえ おまえがC言語をやらなくてもかわりはいくらでもいる ゴミなんだよお前は
289 名前:デフォルトの名無しさん mailto:sage [2010/03/13(土) 22:58:46 ] むやみに煽りすぎだろ。
290 名前:デフォルトの名無しさん mailto:sage [2010/03/13(土) 22:59:35 ] 最初のうちは↓のような書き方をした方が分かりやすいかも if (条件1) { if (条件2) { 文1; } else { 文2; } } else { 文3; }
291 名前:デフォルトの名無しさん mailto:sage [2010/03/13(土) 23:00:31 ] 煽り?どこがだよ!お前もそうおもうだろ!正直に言えよ!
292 名前:デフォルトの名無しさん mailto:sage [2010/03/13(土) 23:01:36 ] ifの中にifがはいってるってことはわかってる? 「ネスト」で調べてみましょう
293 名前:デフォルトの名無しさん mailto:sage [2010/03/13(土) 23:12:57 ] >>291 ま、正直、あまりに根本的なところで、なんで?なんで?って聞かれるとイラっとはする。
294 名前:デフォルトの名無しさん mailto:sage [2010/03/13(土) 23:13:35 ] >>288 視野が狭いな まさに土方の考え方だわ
295 名前:デフォルトの名無しさん mailto:sage [2010/03/13(土) 23:15:27 ] >>294 はぁ?じゃあお前がちゃんと答えればいいじゃねえか!てめえがびしっとこたえねえからこんな事になってんだろ!クソが!
296 名前:デフォルトの名無しさん mailto:sage [2010/03/13(土) 23:17:04 ] まず落ち着いて入門書を読むレベルだろコレ おまえらが半端に親切にするからチャット状態で何も考えずに質問しちゃうんだよ
297 名前:デフォルトの名無しさん mailto:sage [2010/03/13(土) 23:18:52 ] 九九の表を覚えないのに掛け算するレベル。
298 名前:デフォルトの名無しさん mailto:sage [2010/03/13(土) 23:21:26 ] この程度で才能なのかよ。 可哀想だなお前ら。。
299 名前:デフォルトの名無しさん mailto:sage [2010/03/13(土) 23:25:00 ] この程度もできないのはまさに才能だろうな。
300 名前:デフォルトの名無しさん mailto:sage [2010/03/13(土) 23:25:07 ] >>287 疑問の回答になってるかわからないけど、 if( 条件1 ){ 略 } ←このカッコ else { 略 } このカッコは、"else"があれば終わりが分かるんだから 不要じゃないか?っていう疑問なら、確かにその通り。 でもそれは"else"が来る場合限定の話で、else の来ない場合はそうじゃない。 C言語は、カッコでくくったブロックが基本単位になってるんだけど、 この辺りの感覚が分かってくると、閉じカッコが2重につくのも納得いくと思うよ
301 名前:デフォルトの名無しさん mailto:sage [2010/03/13(土) 23:26:58 ] 変なところでひっかかる人はたまにいる んで、引っ掛かりが取れたらグンと伸びることも結構ある 283もそうなのかは分からんけどね
302 名前:デフォルトの名無しさん mailto:sage [2010/03/13(土) 23:28:06 ] んじゃとりあえず期待。
303 名前:デフォルトの名無しさん mailto:sage [2010/03/13(土) 23:28:08 ] >>287 条件1が満たさた場合、「 @から」@までが実行される。 どこからどこまでか範囲を指定してるから、どこまでを示す閉めカッコが必要。 範囲じゃない場合は省略できるが、最初のうちは必ず{}でくくっておいた方がいいと思う。
304 名前:デフォルトの名無しさん mailto:sage [2010/03/13(土) 23:29:55 ] if (条件1) { if (条件2) { 文1; } else { 文2; } } else { 文3; } は if ( (条件1) && (条件2){ 文1;} else if( 条件1) { 文2; } else {文3;}と等価でよいでしょうか?
305 名前:デフォルトの名無しさん mailto:sage [2010/03/13(土) 23:32:55 ] 実際に条件式書いてコンパイルしてみたら分かるでしょ。
306 名前:デフォルトの名無しさん mailto:sage [2010/03/13(土) 23:33:00 ] if (条件1) { if (条件2) { 文1; } else { 文2; } } else { 文3; }
307 名前:デフォルトの名無しさん mailto:sage [2010/03/13(土) 23:34:32 ] >>304 一般的には等価ではない。条件1を再度評価したとき同じ結果が 返るとは限らないから
308 名前:デフォルトの名無しさん mailto:sage [2010/03/13(土) 23:35:21 ] >>304 条件1が評価時に変化しなければ等価
309 名前:デフォルトの名無しさん mailto:sage [2010/03/13(土) 23:38:28 ] そんな条件の条件があるのなら等価じゃないだろ
310 名前:デフォルトの名無しさん mailto:sage [2010/03/13(土) 23:40:24 ] そもそもコーディングの意図が明らかに違う
311 名前:デフォルトの名無しさん mailto:sage [2010/03/13(土) 23:41:36 ] だから適当な変数を用意して int 条件1結果; 条件1結果=(条件1)?1:0; if ( (条件1) && 条件2 ){文1;} else if(条件2) {文2;} else {文3;} と書くのがもっとも無難じゃないかと...
312 名前:デフォルトの名無しさん mailto:sage [2010/03/13(土) 23:41:39 ] 質問に答えてください
313 名前:デフォルトの名無しさん mailto:sage [2010/03/13(土) 23:44:41 ] ここで聞くより入門書を買って読んだ方が手っ取り早い
314 名前:デフォルトの名無しさん mailto:sage [2010/03/13(土) 23:47:31 ] ここは 「C言語なら俺に聞け(入門編)」 です 煽るだけの奴は去れ
315 名前:デフォルトの名無しさん mailto:sage [2010/03/13(土) 23:48:00 ] >>312 お前が質問するのは自由だが、それに答えるかどうかもこっちの自由だ。
316 名前:デフォルトの名無しさん mailto:sage [2010/03/13(土) 23:49:48 ] 煽るだけじゃなく、例えば荒らしもする奴は居てもいい。
317 名前:デフォルトの名無しさん mailto:sage [2010/03/13(土) 23:50:22 ] >>314 スレタイにだまされるな。 初心者の質問をネタに雑談するスレだ。
318 名前:デフォルトの名無しさん mailto:sage [2010/03/13(土) 23:50:52 ] >>1 >C言語の*入門者*向け解説スレッドです。 質問または答えない奴はここにいる資格は無い
319 名前:デフォルトの名無しさん mailto:sage [2010/03/13(土) 23:51:47 ] じゃあ俺に聞けなんて自信満々にいわないでください スレタイをC言語なら入門書を読んだ上でたまになら俺に質問してもいいよ(入門編)に改名するべきです
320 名前:デフォルトの名無しさん mailto:sage [2010/03/13(土) 23:53:01 ] 質問を議題とし、初心者同士がディスカッションするスレだよ
321 名前:デフォルトの名無しさん mailto:sage [2010/03/13(土) 23:53:14 ] 自信満々に答えられないなら来なきゃいいのに。
322 名前:デフォルトの名無しさん mailto:sage [2010/03/13(土) 23:53:20 ] >>317 それでいいんだよ 通ぶってても規格票と違っている事を固く信じ込んでいる事はよくある
323 名前:デフォルトの名無しさん mailto:sage [2010/03/13(土) 23:53:54 ] >>319 「俺に聞け」なんて不遜な言い方、ジョークに決まってるだろ。
324 名前:285 mailto:sage [2010/03/13(土) 23:54:08 ] >>283 んー、私が間違っていましたね。 これであっています。失礼いたしました。 で、こういう書き方をすればわかりやすいかもしれませんが、いかがでしょうか。 if (a == 0) { if (b == 0) { x = 0; } else { y = 0; } } else { z = 0; }
325 名前:デフォルトの名無しさん mailto:sage [2010/03/13(土) 23:54:37 ] マジに、ただひたすら初心者様に奴隷のように教えるだけのスレになったら回答者なんてだれもよりつかなくなるよな。
326 名前:デフォルトの名無しさん mailto:sage [2010/03/13(土) 23:57:57 ] 低レベルな回答者はいらないです。
327 名前:デフォルトの名無しさん mailto:sage [2010/03/13(土) 23:59:01 ] 逆ギレすんなよ
328 名前:デフォルトの名無しさん mailto:sage [2010/03/14(日) 00:05:41 ] ヤフの質問箱とかOKWebとかなら、むやみに煽られないんじゃないのかね。 あそこらは「君たちは質問の意図を理解してませんね。 そういうことはいいから早く質問にこたえなさい」系の物言いも許されるイメージ。 あんまり見てないから知らんけど。
329 名前:デフォルトの名無しさん mailto:sage [2010/03/14(日) 00:17:35 ] if文のネストで巧くいかなかったら 条件式を工夫してみろ 条件式をいじってうまくいかなったら if文のネストを工夫してみろ 両方駄目だったらあきらめろ 言えることはこれくらいかな
330 名前:デフォルトの名無しさん mailto:sage [2010/03/14(日) 00:29:35 ] 聞くだけならいくらでも聞いてやる ただし答えるとは誰も言ってない
331 名前:デフォルトの名無しさん mailto:sage [2010/03/14(日) 00:32:42 ] 答えないならせめてずっと黙ってろ
332 名前:デフォルトの名無しさん mailto:sage [2010/03/14(日) 00:34:53 ] いや質問があるなら俺に聞けよ
333 名前:デフォルトの名無しさん [2010/03/14(日) 00:34:56 ] <object width="480" height="385"><param name="movie" value="www.youtube.com/v/n-PyrgNSGHA&hl=ja_JP&fs=1& "> </param><param name="allowFullScreen" value="true"></param> <param name="allowscriptaccess" value="always"></param> <embed src="www.youtube.com/v/n-PyrgNSGHA&hl=ja_JP&fs=1& " type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="480" height="385"></embed></object> このプログラムを教えてください。私のレベルは、cを少しかじっただけです。
334 名前:デフォルトの名無しさん mailto:sage [2010/03/14(日) 00:35:56 ] >>329 最初から理屈だけで覚えようとすると得てして失敗しやすいからな
335 名前:デフォルトの名無しさん mailto:sage [2010/03/14(日) 00:38:15 ] >>333 Cをかじったなら、それはCじゃないってわかるだろ。
336 名前:デフォルトの名無しさん mailto:sage [2010/03/14(日) 00:40:14 ] おCりかじり虫〜
337 名前:デフォルトの名無しさん mailto:sage [2010/03/14(日) 01:08:45 ] 鉄分ミネラルビタミンCは