1 名前:デフォルトの名無しさん mailto:sage [2007/03/19(月) 16:45:25 ] C言語の入門者向け解説スレです。 ・C++言語はスレ違いです。 ・分からない事をなるべく詳しく書いて下さい。 ・ソースコードを晒すと答えやすくなるかもしれません。 ・質問者は最初にその質問をした時のレス番号を名前欄に書いて下さい。 前スレ C言語なら俺に聞け(入門篇) Part 9 pc11.2ch.net/test/read.cgi/tech/1173284217/ 過去スレ Part 1 pc8.2ch.net/test/read.cgi/tech/1146700389/ Part 2 pc8.2ch.net/test/read.cgi/tech/1153818463/ Part 3 pc8.2ch.net/test/read.cgi/tech/1160682950/ Part 4 pc8.2ch.net/test/read.cgi/tech/1162999861/ Part 5 pc8.2ch.net/test/read.cgi/tech/1165022193/ Part 6 pc10.2ch.net/test/read.cgi/tech/1167325490/ Part 7 pc10.2ch.net/test/read.cgi/tech/1170064980/ Part 8 pc11.2ch.net/test/read.cgi/tech/1171946674/ 関連スレ C/C++の宿題を片付けます 84代目 pc11.2ch.net/test/read.cgi/tech/1172981618/ くだすれC言語(初心者用) Part.2 pc11.2ch.net/test/read.cgi/tech/1172099763/ 【ISO/ANSI/JIS】 C言語なら俺に聞け! Part 131 pc11.2ch.net/test/read.cgi/tech/1170338926/ 【初心者歓迎】C/C++室 Ver.35【環境依存OK】 pc11.2ch.net/test/read.cgi/tech/1171888583/ 【C 関数検索 man on WWW】 www.linux.or.jp/JM/index.html
448 名前:デフォルトの名無しさん mailto:sage [2007/04/05(木) 14:06:51 ] >>443 "asdf" は文字列が格納されている先頭メモリ番地 c="asdf" はアドレス値をコピーしようとしている strcpy(c,"asdf") はアドレスが指すデータをコピーしようとしている
449 名前:デフォルトの名無しさん mailto:sage [2007/04/05(木) 15:45:32 ] for (i = 0; i < THREAD_COUNT; i++) { /* スレッド生成 */ if (pthread_create(&thread_id, NULL, threadFunc, (void *)thread_arg) == 0) { thread_count++; } } とやって、THREAD_COUNTの数をいろいろ変えているのですが ある一定の数以上は、必ず失敗するようになります。 自分の環境では303個めまでのスレッドは作成できますが それ以上は作成できません。 どこかでスレッドの上限というのは決められているのでしょうか?
450 名前:デフォルトの名無しさん mailto:sage [2007/04/05(木) 16:32:12 ] /* 1000以下の素数を求める(第1版) */ #include <stdio.h> int main(void) { int i, no; unsigned long counter = 0; for (no = 2; no <= 1000; no++) { for (i = 2; i < no; i++) { counter++; if (no % i == 0) /* 割り切れると素数ではない */ break; /* それ以上の繰返しは不要 */ } if (no == i) /* 最後まで割り切れなかった */ printf("%d\n", no); } printf("乗除を行った回数:%lu\n", counter); return (0); } これでnoが3の時二個目のfor分のところのiが<演算子なのに3になるんですか? 3にならなければ3素数なのにprintfで表示されないですよね
451 名前:デフォルトの名無しさん mailto:sage [2007/04/05(木) 16:42:23 ] no = 3, i = 2 → 割り切れない no = 3, i = 3 → i < noを満たさないのでループ終了 no == i なので3は素数
452 名前:デフォルトの名無しさん mailto:sage [2007/04/05(木) 16:44:38 ] <これでも 3<3までいくんだ? <=じゃなくても
453 名前:デフォルトの名無しさん mailto:sage [2007/04/05(木) 16:45:38 ] 3になったからループを抜けるわけで
454 名前:デフォルトの名無しさん mailto:sage [2007/04/05(木) 16:47:32 ] ループの流れ i = 2 i < no の判定 処理 i++ i < no の判定 処理 i++ i < no の判定 処理 i++ ・ ・ ・
455 名前:デフォルトの名無しさん mailto:sage [2007/04/05(木) 16:48:36 ] >>450 =452 ...か? 妥当なインデント付けて、最初のforループの中を一行ずつ追っていけば 何となく分かるかもね。
456 名前:デフォルトの名無しさん mailto:sage [2007/04/05(木) 17:04:32 ] >>452 そうじゃなくて no=3 のとき iのループは3になったら抜けるわけでループ内では2までしか処理されない ループを抜けているのはiが3だからループのあとiは3になっている
457 名前:デフォルトの名無しさん mailto:sage [2007/04/05(木) 17:46:40 ] printf()が負値を返すのはエラーが発生した場合とのことですが 具体的にエラーが発生するのってどんな状況のときなんですかね?
458 名前:デフォルトの名無しさん mailto:sage [2007/04/05(木) 17:59:47 ] >>457 厳密には、printf()は出力に失敗するとEOFを返す。 リダイレクト先の出力がなんらかの制限のあるデバイスにでも振り向けられていなければ、 一般的には出力は必ず成功する。
459 名前:デフォルトの名無しさん mailto:sage [2007/04/05(木) 18:44:50 ] てか画面以外は失敗する可能性あるよね。
460 名前:デフォルトの名無しさん mailto:sage [2007/04/05(木) 18:58:02 ] >>459 画面って何? /dev/consoleのこと? 必ずしも画面とは限らないのだけど……
461 名前:デフォルトの名無しさん mailto:sage [2007/04/05(木) 19:03:19 ] 要は、下位のwriteが失敗するかどうかが大体のキモだね。 printf(NULL)みたいなどうしようもないようなものをのぞけば。
462 名前:デフォルトの名無しさん mailto:sage [2007/04/05(木) 19:32:07 ] >>457 普通にファイルに書いてたって空き領域がなくなることはあるだろうし リムーバブルなメディアなら途中で引っこ抜かれるかも試練。
463 名前:デフォルトの名無しさん mailto:sage [2007/04/05(木) 19:40:07 ] 実は、バッファリングされているから必ずしもエラーにならない罠。
464 名前:デフォルトの名無しさん mailto:sage [2007/04/05(木) 19:46:53 ] 必ずしもの使い方が間違っている希ガス
465 名前:デフォルトの名無しさん mailto:sage [2007/04/05(木) 19:47:44 ] 463ではないが、必ずしもエラーになるとは限らない、かな?
466 名前:デフォルトの名無しさん mailto:sage [2007/04/05(木) 19:50:25 ] 容量オーバーした瞬間にエラーにならない可能性はあるが、 失敗する可能性は十分あり得るということでFA?
467 名前:デフォルトの名無しさん mailto:sage [2007/04/05(木) 21:26:44 ] すみません。前回はありがとうございます。 また質問させていただきます。 ttp://www.uploda.org/uporg763897.zip.html スパゲティですみません。 game3.hの構造体sceneDataなんですが変数dFFがメンバじゃないと出るんですが、 何ででしょうか? 要素が多すぎるんでしょうか? pはsageです。
468 名前:デフォルトの名無しさん mailto:sage [2007/04/05(木) 21:31:37 ] >>467 grep で検索しても dFF はどこにも宣言されて無いようだ
469 名前:デフォルトの名無しさん mailto:sage [2007/04/05(木) 21:38:51 ] 整数mからnまでの和を、公式n(n+1)/2を使わずに求めるプログラム作ったんですけど #include <stdio.h> int main(void){ int m,n,i,ans=0; printf("数値入力>");scanf("%d",&m); printf("数値入力>");scanf("%d",&n); if(m<=n){ for(i=m;i<=n;i++){ ans=ans+i; } printf("%d",ans); } else { for(i=n;i<=m;i++){ ans=ans+i; } printf("%d",ans); } return 0; } このプログラムって、答えをansという変数に代入してるんですが ansを使わずに求めるにはどうしたらいいんですかね
470 名前:デフォルトの名無しさん mailto:sage [2007/04/05(木) 21:42:29 ] mかnに加算していけば?
471 名前:デフォルトの名無しさん mailto:sage [2007/04/05(木) 22:01:58 ] >>469 再帰処理で #include <stdio.h> int mysum(int a,int max) { if(max<=a) return a; return mysum(a+1,max)+a; } int main(void){ int m; printf("数値入力>");scanf("%d",&m); printf("数値入力>");scanf("%d",&n); if(m<=n){ printf("m=%d\n",mysum(m,n)); } else { printf("n=%d\n",mysum(n,m)); } return 0; }
472 名前:471 mailto:sage [2007/04/05(木) 22:03:22 ] あっ printf("m=%d\n",mysum(m,n)); printf("n=%d\n",mysum(n,m)); m= と n= 消しといて
473 名前:デフォルトの名無しさん mailto:sage [2007/04/05(木) 22:17:13 ] >>469 ansを思いっきり使ってるので無視してくれて構わないが簡略した int MtoN_Add(int m, int n) { int i = (m>n)?n:m, ans = 0; while( (m>n)?m:n >= i ) ans += i++; return ans; }
474 名前:デフォルトの名無しさん mailto:sage [2007/04/05(木) 22:38:02 ] #include <stdio.h> int main(void){ int m,n,i; printf("数値入力>");scanf("%d",&m); printf("数値入力>");scanf("%d",&n); if(m>n) m^=n,n^=m,m^=n; for(i=m+1;i<=n;i++) m+=i; printf("%d",m); return 0; }
475 名前:デフォルトの名無しさん mailto:sage [2007/04/05(木) 23:07:24 ] ハッカーの楽しみに載ってるやつかww
476 名前:デフォルトの名無しさん mailto:sage [2007/04/05(木) 23:15:05 ] m^=n,n^=m,m^=n これでスワップが出来るとは知らなんだ。勉強になったぜ
477 名前:デフォルトの名無しさん mailto:sage [2007/04/05(木) 23:20:22 ] 勉強するのはいいが、実用性はないに等しいから使わないようにね。
478 名前:デフォルトの名無しさん mailto:sage [2007/04/05(木) 23:21:15 ] www.dd.iij4u.or.jp/~okuyamak/Information/xor_fixed_swapping.html ja.wikipedia.org/wiki/XOR%E4%BA%A4%E6%8F%9B%E3%82%A2%E3%83%AB%E3%82%B4%E3%83%AA%E3%82%BA%E3%83%A0
479 名前:デフォルトの名無しさん mailto:sage [2007/04/05(木) 23:42:01 ] do while文ってつかわないほうがいいの?
480 名前:デフォルトの名無しさん mailto:sage [2007/04/05(木) 23:49:01 ] while文よりは利用機会は少ないと思うけど、 使わないほうがいいってことはない。 ただし、do while文の最後を } while (条件); のようにwhileが先頭に来るように改行するのは好ましくない。 こう書いてしまうと、一軒、新たに while文が始まったように見 えてしまう。 } while (条件); とするのがよい。
481 名前:デフォルトの名無しさん mailto:sage [2007/04/06(金) 00:20:44 ] サイズの指定たとえば#define BUF 256とかを 複数のファイルで共有するにはどうすればいいの? ヘッダに書いちゃっていいものなの? 優しく教えてくれる東ちづる似のお姉さん回答お願いします。
482 名前:デフォルトの名無しさん mailto:sage [2007/04/06(金) 00:49:06 ] 共用するヘッダに書いて#includeする。
483 名前:481 mailto:sage [2007/04/06(金) 09:21:17 ] >>482 すみません それは新しくヘッダのみのファイルを作っておくって事でしょうか?
484 名前:デフォルトの名無しさん mailto:sage [2007/04/06(金) 10:15:23 ] common.hみたいな名前のヘッダファイル作って、そこに#define全部書いて 定数使うソースに#include "common.h"書けばおkって話。
485 名前:481 mailto:sage [2007/04/06(金) 10:50:30 ] >>484 そうしたいと思います。 回答ありがとおおおおおおおおおおおおおおおおおおお。
486 名前:デフォルトの名無しさん mailto:sage [2007/04/06(金) 11:33:21 ] >common.hみたいな名前のヘッダファイル作って、そこに#define全部書いて 勘弁してくれ。
487 名前:デフォルトの名無しさん mailto:sage [2007/04/06(金) 11:38:40 ] 今の時代、ヘッダ直しただけで毎回フルビルドになってもOKダヨー
488 名前:デフォルトの名無しさん mailto:sage [2007/04/06(金) 11:51:49 ] 本当に時代は進化したなぁ
489 名前:デフォルトの名無しさん mailto:sage [2007/04/06(金) 11:53:22 ] >>486 へ?何が勘弁してなの?煽りじゃなくてマジで・・
490 名前:デフォルトの名無しさん mailto:sage [2007/04/06(金) 11:54:08 ] >>487 それが理由じゃない。俺様マクロが氾濫する原因になるから 利用したいソース群ごとにインクルードファイルは分けて欲しいだけだ。
491 名前:デフォルトの名無しさん mailto:sage [2007/04/06(金) 11:55:15 ] つーか、>484の方針だとプロトタイプ宣言も全ソース共通のインクルードファイルでやってそうだな…
492 名前:デフォルトの名無しさん mailto:sage [2007/04/06(金) 11:56:40 ] プロトタイプ宣言は普通全ソース共通のインクルードファイルに書くだろ prototype.hとか作って
493 名前:デフォルトの名無しさん mailto:sage [2007/04/06(金) 12:02:45 ] 普通にモジュール化してたらそうはならないだろ
494 名前:デフォルトの名無しさん mailto:sage [2007/04/06(金) 12:05:38 ] なるだろ
495 名前:デフォルトの名無しさん mailto:sage [2007/04/06(金) 12:25:58 ] で結局どうやるのが正解なわけ?
496 名前:デフォルトの名無しさん mailto:sage [2007/04/06(金) 12:27:57 ] >>492 勘弁してくれ。 その方針じゃ、必要のないインクルードファイルまで全部インクルードする羽目になる。 標準インクルードも片端からインクルードすることになるジャマイカ。 例えば20本くらいのソースのうち、時間(time_t)を取り扱う関数がソースAにあるとする。 それを利用するのは、ソースBとソースCだけだとする。 ソースD以下はtime_tなど全く頓着する必要はないのだが、プロトタイプが全部共通だと 全てのソースでtime.hをインクルードすることになるということだ。 time_tならそんな心配はないだろうが、環境によっては他とぶつかる可能性のある マクロを定義しているインクルードファイルもあるだろう。 #たとえばBoolという定数マクロと関数マクロがぶつかることがあるOSの標準インクルードで実際にあった。 >493が言うように、きちんとモジュール化していたらそんなことになるはずないんだがな。 #つーか、C++でクラス設計していたら有り得ないだろ。
497 名前:デフォルトの名無しさん mailto:sage [2007/04/06(金) 12:38:37 ] >>496 なんとなく共通のヘッダファイルは、さけてきたけど・・・ では、そうゆう方向で >_<;
498 名前:デフォルトの名無しさん mailto:sage [2007/04/06(金) 13:00:14 ] >>496 >>492 はプロトタイプ宣言だけの話じゃないの?
499 名前:デフォルトの名無しさん mailto:sage [2007/04/06(金) 13:02:09 ] >>498 プロトタイプ宣言を纏めるためには、引き数や戻り値で使う型の情報が必要になる。 それらをインクルードすれば同じこと。
500 名前:デフォルトの名無しさん mailto:sage [2007/04/06(金) 14:00:47 ] ポインタ型はすべてchar*に変換すればいい というか業務だとそうしてるよな?普通 そうしないとくだらない依存関係で悩むことになる
501 名前:デフォルトの名無しさん mailto:sage [2007/04/06(金) 14:20:45 ] >>500 勘弁してくれ。
502 名前:デフォルトの名無しさん mailto:sage [2007/04/06(金) 14:24:21 ] 16進を2進に変えるのって ただ単に桁ごとの数字を二進法にかえればいいだけですか? たとえば0x65なら6を二進にした0110と5を二進にした0101を並べて 01100101ってやりゃいいの? どんな数でもこの法則成り立ちますか?
503 名前:デフォルトの名無しさん mailto:sage [2007/04/06(金) 14:30:52 ] 4進数なら 00 00 8進数なら 000 000 16進数なら 0000 0000
504 名前:デフォルトの名無しさん mailto:sage [2007/04/06(金) 14:31:02 ] >>500 何の為に型が存在してるんだ
505 名前:デフォルトの名無しさん mailto:sage [2007/04/06(金) 14:40:24 ] >500は釣りだろ。いくらなんでも業務で型無しプログラミングなんて有り得ない。
506 名前:デフォルトの名無しさん mailto:sage [2007/04/06(金) 15:27:40 ] インターフェイスをchar *で統一するとデータ型に依存しないから、 仕様変更があった場合、修正個所少なくなる。というのはあるかもね。 作業が進んでから「データ型変更されますた」とかあるしw
507 名前:デフォルトの名無しさん mailto:sage [2007/04/06(金) 15:32:15 ] そして、仕様変更でデータ型が変わってもその事実が伝達されずにそのままビルドされて納品される罠。
508 名前:デフォルトの名無しさん mailto:sage [2007/04/06(金) 16:33:40 ] >>506 なんと愚かな・・・。
509 名前:デフォルトの名無しさん mailto:sage [2007/04/06(金) 16:35:25 ] >>508 どこが愚かが具体的に言わないと反論になってない さらに自分の改善案も出さないとただの愚痴
510 名前:デフォルトの名無しさん mailto:sage [2007/04/06(金) 16:42:29 ] >>509 >507 >504 >496 >493
511 名前:デフォルトの名無しさん mailto:sage [2007/04/06(金) 16:43:06 ] >>502 2進数を3桁で区切ってその3桁を1桁づつにすると8進数、4桁で区切って1桁づつに すると16進数。というのは、2進数3桁だと8種類の重みを表現可能だからで、これを 一桁で表せば8進数ということになる。2進数4桁で16進数というのも同じこと。
512 名前:デフォルトの名無しさん mailto:sage [2007/04/06(金) 16:48:26 ] >>509 反論ではありません。あまりの愚かさに衝撃を受けて出た一言です。 外人がよく言う "Oh My GOD!" に近いものです。 ああ。あなたに神の許しがありますように。
513 名前: ̄ ̄V ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ mailto:sage [2007/04/06(金) 16:49:42 ] _____ /::::::::::::::::::::::::::\ _ /::::::::::::::::::::::::::::::::::::::\ /  ̄  ̄ \ |:::::::::::::::::|_|_|_|_| /、 ヽ |;;;;;;;;;;ノ \,, ,,/ ヽ |・ |―-、 | きみ頭だいじょうぶ? |::( 6 ー─◎─◎ ) q -´ 二 ヽ | |ノ (∵∴ ( o o)∴) ノ_ ー | | /| < ∵ 3 ∵> \. ̄` | / ::::::\ ヽ ノ\ O===== | :::::::::::::\_____ノ:::::::::::\ / |
514 名前:デフォルトの名無しさん mailto:sage [2007/04/06(金) 16:50:32 ] >>500 何社か渡り歩いたけど、そうやってる会社もあった 大手電機メーカーでした
515 名前:デフォルトの名無しさん mailto:sage [2007/04/06(金) 16:55:28 ] >>514 恐ろしいな。
516 名前:デフォルトの名無しさん mailto:sage [2007/04/06(金) 18:08:42 ] >>506 せめてvoid* 何も事態は改善しないけど
517 名前:デフォルトの名無しさん mailto:sage [2007/04/06(金) 18:30:31 ] >>516 うん。まーーーったく変わらない。
518 名前:デフォルトの名無しさん mailto:sage [2007/04/06(金) 18:45:30 ] え?悪化してるような気がする。 char*ってことは、一旦シリアライザ・デシリアライザを挟もう、って意図じゃないの? いまどきのIPCがみんなXML使ってるみたいに、関数の引数もXMLにしよう、みたいな話ではないの?
519 名前: ̄ ̄V ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ mailto:sage [2007/04/06(金) 19:39:54 ] _____ /::::::::::::::::::::::::::\ _ /::::::::::::::::::::::::::::::::::::::\ /  ̄  ̄ \ |:::::::::::::::::|_|_|_|_| /、 ヽ |;;;;;;;;;;ノ \,, ,,/ ヽ |・ |―-、 | きみ頭だいじょうぶ? |::( 6 ー─◎─◎ ) q -´ 二 ヽ | |ノ (∵∴ ( o o)∴) ノ_ ー | | /| < ∵ 3 ∵> \. ̄` | / ::::::\ ヽ ノ\ O===== | :::::::::::::\_____ノ:::::::::::\ / |
520 名前:デフォルトの名無しさん mailto:sage [2007/04/06(金) 19:49:00 ] >>468 ありがとう。どうやらIDEが別の似たファイルを参照していたらしいです。 解決しました。
521 名前:デフォルトの名無しさん [2007/04/06(金) 20:05:31 ] >>476 XOR使ったスワップは、同一だとちゃんと機能せんから せめて a +=b, b = a - b, a -= b とか使うようにしましょう。
522 名前:デフォルトの名無しさん mailto:sage [2007/04/06(金) 20:08:53 ] 一方俺はバッファを使った…
523 名前:デフォルトの名無しさん mailto:sage [2007/04/06(金) 20:12:42 ] >>521 おいおいw
524 名前:デフォルトの名無しさん mailto:sage [2007/04/06(金) 20:28:42 ] 叔母風呂
525 名前:デフォルトの名無しさん mailto:sage [2007/04/06(金) 20:30:47 ] 同一( &a==&b )の場合は >>521 の方法でも 0 になってしまうよ
526 名前:デフォルトの名無しさん mailto:sage [2007/04/06(金) 21:24:42 ] for文の途中に return 0などがあると 関数に0を返したあとに、関数の処理は終わってしまいますか?
527 名前:デフォルトの名無しさん mailto:sage [2007/04/06(金) 21:26:28 ] もちろん
528 名前:デフォルトの名無しさん mailto:sage [2007/04/06(金) 21:54:44 ] #include <stdio.h> #include <math.h> int sosu(int); int main(void){ int i,m; printf("数値入力>");scanf("%d",&m); if(m<=0) return 0; printf("2 "); for(i=3;i<=m;i+=2){ if (sosu(i)==1) printf("%d ",i); } return 0; } int sosu(int n){ int i; if(n==2)return 1; if(n%2==0) return 0; else{ for(i=3;i*i<=n;i=i+2){ if(n%i==0){ return 0; } } } return 1; } 入力した数までの全ての素数を表示するプログラム作ってみたんだけど これだと横一列に表示されて見づらいので、5個ずつ表示して改行\nつけたいんだけどどうしたらいいですかね 2 3 5 7 11 13 17 19 23 29 31 37・・・といった感じです
529 名前:デフォルトの名無しさん mailto:sage [2007/04/06(金) 21:59:24 ] >>528 これでどう? if (sosu(i)==1) printf("%d ",i); ↓ if (sosu(i)==1){ static int sosu_count=1; sosu_count++; printf("%d ",i); if(sosu_count%5==0) printf("\n"); }
530 名前:デフォルトの名無しさん mailto:sage [2007/04/06(金) 22:00:27 ] void MyPrint(int i) { static cnt; printf("%d ", i); cnt++; if(cnt == 5) {printf("\n");cnt=0;} return; } こんな関数をprintfの代わりに使うのはどう?
531 名前:デフォルトの名無しさん mailto:sage [2007/04/06(金) 22:03:25 ] できたー ありがとうございます
532 名前:デフォルトの名無しさん mailto:sage [2007/04/06(金) 23:02:53 ] int main(void) って int main() と C言語は略しちゃいけないんだよね?
533 名前:デフォルトの名無しさん mailto:sage [2007/04/06(金) 23:07:14 ] >>532 int main();はお勧めできませんが、 int main()ならどうでもいいと思います。
534 名前:デフォルトの名無しさん mailto:sage [2007/04/06(金) 23:08:47 ] 規格をあたってみたところ、関数の定義なら問題ないと読めた。 参照したのがはJIS X3010:2003 (C99翻訳)なんで、C89とかだとどうなのかは知らんが。
535 名前:デフォルトの名無しさん mailto:sage [2007/04/06(金) 23:12:11 ] C89でも同じ事です。
536 名前:デフォルトの名無しさん [2007/04/07(土) 03:51:54 ] 素数そっすうそっすうーーー #include <stdio.h> #include <stdlib.h> #include <string.h> void sieve(char *p,int d); int main() { int d = 0,i,k; char buff[256] = {'\0'}; char *p = NULL; fgets(buff,sizeof(buff),stdin); sscanf(buff,"%d",&d); if (d <= 0) {fprintf(stderr,"input positive number and less than INT_MAX number.\n");exit(1);} if ((p = malloc(d))==NULL) {fprintf(stderr,"failed to allocate %d bytes of memory.\n", d);exit(1);} memset(p, '\0', d); sieve(p,d); printf("primes up to %d\n", d); for (i = 0, k = 1; i < d; i++){ if(p[i] == 2){i++;} if (p[i]==0){printf("%-4d ", i+1); k++;} if(!(k%5)){ putchar('\n');k++;} } return 0; } void sieve(char *p,int d) { int i, j; p[0] = 2; for (i=2; i <= d/2; i++) for (j=2; j <= d/i; j++) p[i*j-1]=1; }
537 名前:デフォルトの名無しさん mailto:sage [2007/04/07(土) 04:10:22 ] インデント無いとこれほどまでに読みにくくなるんだな…
538 名前:デフォルトの名無しさん mailto:sage [2007/04/07(土) 12:46:42 ] C言語で駄目文字ってどういう時に発生するの?
539 名前:デフォルトの名無しさん mailto:sage [2007/04/07(土) 12:50:03 ] 駄目文字って何?
540 名前:デフォルトの名無しさん mailto:sage [2007/04/07(土) 12:53:25 ] Shift_JISで表したときに2バイトめに 0x5c が来る文字を俗に 駄目文字と呼ぶらしい。
541 名前:デフォルトの名無しさん mailto:sage [2007/04/07(土) 13:21:08 ] 表とか?
542 名前:デフォルトの名無しさん mailto:sage [2007/04/07(土) 15:21:56 ] カタカナの「ソ」とかな。 >>538 への答えとしては、扱うエンコーディングにShift_JIS(CP932など 類似品も含む)があるときは常にその必要があると思え、くらいか。
543 名前:デフォルトの名無しさん [2007/04/07(土) 15:33:49 ] sizeof演算子 の意味がわかりません。教えてください。
544 名前:デフォルトの名無しさん [2007/04/07(土) 15:54:25 ] 意味ってw 変数の使用バイトを調べる為にあるんだよ マロックとかで変数渡すときに、4って書くよりsizeof(int)って書いた方が分かりやすいからだよw
545 名前:デフォルトの名無しさん mailto:sage [2007/04/07(土) 15:55:06 ] sizeof(int) : int型のサイズ(4バイトとかそんな感じ) sizeof(hoge) : 変数hogeのサイズ(char hoge[260]なら260) 前者は型のサイズが違っても対応できるように、後者はmalloc(sizeof(hoge))みたいな感じに使う
546 名前:デフォルトの名無しさん mailto:sage [2007/04/07(土) 16:52:02 ] 典型的な応用例: int array[10]; for (int ic = 0; ic < sizeof(array) / sizeof(* array); ++ic) array[ic] = 0;
547 名前:デフォルトの名無しさん mailto:sage [2007/04/07(土) 16:59:42 ] 質問者のレベルだと *arrayのところは、array[0]と書いた方が分かりやすいだろう。
548 名前:デフォルトの名無しさん mailto:sage [2007/04/07(土) 17:30:20 ] 構造体でもパッキングの値に対応した本当のサイズが出るので sizeof は不可欠