1 名前:デフォルトの名無しさん mailto:sage [2007/06/25(月) 06:14:52 ] C言語の入門者向け解説スレです。 ・C++言語はスレ違いです。 ・分からない事をなるべく詳しく書いて下さい。 ・ソースコードを晒すと答えやすくなるかもしれません。 ・質問者は最初にその質問をした時のレス番号を名前欄に書いて下さい。 前スレ C言語なら俺に聞け(入門篇) Part 14 pc11.2ch.net/test/read.cgi/tech/1181735298/ 教えて欲しいのではなく丸投げしたいならこちらへ C/C++の宿題を片付けます 91代目 pc11.2ch.net/test/read.cgi/tech/1182607405/
435 名前:デフォルトの名無しさん mailto:sage [2007/07/01(日) 01:02:58 ] 応用力。>>428 なんかは将来心配
436 名前:デフォルトの名無しさん mailto:sage [2007/07/01(日) 01:10:50 ] 俺も>>431 に何かレスしようと思ったが >>433-434 に全て持っていかれた
437 名前:デフォルトの名無しさん mailto:sage [2007/07/01(日) 01:11:17 ] やる気。
438 名前:デフォルトの名無しさん mailto:sage [2007/07/01(日) 01:12:20 ] やる気は大切だが、やる気だけの子も困ったり。
439 名前:デフォルトの名無しさん mailto:sage [2007/07/01(日) 01:13:12 ] 叩かれても泣かない。むしろ悦ぶ方向で。
440 名前:デフォルトの名無しさん mailto:sage [2007/07/01(日) 01:15:15 ] 四大欲求をフルに使いこなせる体力。
441 名前:431 mailto:sage [2007/07/01(日) 01:16:58 ] そうっすねぇまずは色々情報探してみます。 入門出来たらまた相手にしてください。
442 名前:デフォルトの名無しさん [2007/07/01(日) 01:56:16 ] #include <stdio.h> int main(void) { int min,max,x,y,i,j; puts("長方形を作りましょう"); printf("一辺(その1)"); scanf("%d",x); printf("一辺(その2)"); scanf("%d",y); min = x; if (y < x) min = y; max = y; if (y < x) max = x; for (i=1; i<=max; i++) { for (j=1; j<=min; j++) putchar('*'); putchar('\n'); } return 0; } 何がおかしいスかねぇ *が表示されないんですよねぇ
443 名前:デフォルトの名無しさん mailto:sage [2007/07/01(日) 01:59:59 ] >>442 printf("一辺(その1)"); scanf("%d",&x); < & が抜けてるよ printf("一辺(その2)"); scanf("%d",&y);
444 名前:デフォルトの名無しさん [2007/07/01(日) 02:04:09 ] あ なんということ…ありがとうございます
445 名前:デフォルトの名無しさん [2007/07/01(日) 02:08:54 ] ちなみにこのプログラムは順番的には for (i=1; i<=min; i++)→for (j=1; j<=max; j++)→putchar('*') →for (j=1; j<=max; j++)→putchar('*')→for (j=1; j<=max; j++)→putchar('*') …→putchar('\n')→for (i=1; i<=min; i++)→… みたいな感じで実行されてるのですか?
446 名前:デフォルトの名無しさん mailto:sage [2007/07/01(日) 02:20:10 ] >>445 それであってるよ。実行して確認してみればいい。
447 名前:デフォルトの名無しさん [2007/07/01(日) 13:00:50 ] >>446 ありがとうございました
448 名前:デフォルトの名無しさん mailto:sage [2007/07/01(日) 14:37:35 ] 四大欲求とは三大欲求に知的探究心を加えたものか
449 名前:デフォルトの名無しさん mailto:sage [2007/07/01(日) 14:45:08 ] ノッてくれ〜Ha〜Ha〜♪
450 名前:449 mailto:sage [2007/07/01(日) 14:45:40 ] 素で誤爆しました すみません
451 名前:デフォルトの名無しさん mailto:sage [2007/07/01(日) 14:51:42 ] Gnuplotを扱うC言語用のライブラリとか無いでしょうか? popen()関数を使って自分で作る事は出来るのですが もし優れたライブラリがあるならそっちを使いたいです C++では駄目でCでおながいします
452 名前:デフォルトの名無しさん mailto:sage [2007/07/01(日) 19:06:59 ] 例えば foo(cahr*p) { char *my_ptr = MyGetInnerParameter("内部パラメータを文字列で返す関数"); strcpy(p,my_ptr); } var() { char *ptr; foo(ptr); } こうすると、落ちるんだけど、どうして?
453 名前:デフォルトの名無しさん mailto:sage [2007/07/01(日) 19:09:22 ] foo(char** p) にしないと
454 名前:デフォルトの名無しさん mailto:sage [2007/07/01(日) 19:15:07 ] いやそれ以前のはなしか
455 名前:デフォルトの名無しさん mailto:sage [2007/07/01(日) 19:21:54 ] どこ指してるかわからないpにstrcpyしちゃだめだろ
456 名前:デフォルトの名無しさん mailto:sage [2007/07/01(日) 19:23:24 ] char* a[8]をlongに直すにはどうしたらいいでしょうか? >>で1つずつやっていくしかないですかね?
457 名前:デフォルトの名無しさん mailto:sage [2007/07/01(日) 19:25:03 ] じゃあ foo(cahr*p) { char *my_ptr = MyGetInnerParameter("内部パラメータを文字列で返す関数"); strcpy(p,my_ptr); } var() { char ptr[8]; foo(ptr); } こうしてみたんだけど、やっぱりダメだった。 どうして?
458 名前:デフォルトの名無しさん mailto:sage [2007/07/01(日) 19:25:29 ] cahr
459 名前:デフォルトの名無しさん mailto:sage [2007/07/01(日) 19:28:38 ] >>458 そういうケアレスミスは置いといて^^
460 名前:デフォルトの名無しさん mailto:sage [2007/07/01(日) 19:30:00 ] コードを見る限り問題はなさそうな気がする。 MyGet(ryの戻り値がおかしいんじゃないのか。 戻り値になるバッファをスタックに取ってるとか。
461 名前:デフォルトの名無しさん mailto:sage [2007/07/01(日) 19:31:06 ] コピーされる文字数が1024バイトだったとかってオチだろ。
462 名前:デフォルトの名無しさん mailto:sage [2007/07/01(日) 19:37:26 ] デバッグとしてmy_ptr表示させてみたりとか、自分でしないの?
463 名前:デフォルトの名無しさん mailto:sage [2007/07/01(日) 19:41:43 ] そもそも、呼ぶ側で領域確保が必要な関数の場合、 最初に用意する容量を問い合わせてから領域を確保して初めて呼び出せるんだろうに。 領域サイズの確認関数が無いなら、十分なサイズを用意してあげないとダメ。 そして、サイズに満たない領域にコピーしちゃダメ。
464 名前:デフォルトの名無しさん mailto:sage [2007/07/01(日) 21:38:52 ] bregexp.dllのラッパーライブラリ内ですか?
465 名前:デフォルトの名無しさん [2007/07/01(日) 22:45:56 ] サブ関数内でmalloc()でメモリ確保した領域ってメイン関数に帰るときに解放されないの?
466 名前:デフォルトの名無しさん mailto:sage [2007/07/01(日) 22:46:46 ] >>465 free()かrealloc()で解放しない限り、されません。
467 名前:デフォルトの名無しさん mailto:sage [2007/07/01(日) 22:50:23 ] >>465 解放されると困らないかい? malloc() 〜 free() の作法としては、使う人が確保と解放の責任を持つって暗黙のルールなんだけど、サービス関数の中には、確保だけして解放は使う側でやってね。なんてローカルルールもあるしな。 解放されると思い込むくらいなら、仕様確認をした方がいいよ。
468 名前:デフォルトの名無しさん mailto:sage [2007/07/01(日) 22:56:05 ] >>465 自動変数とごっちゃになってない?
469 名前:デフォルトの名無しさん mailto:sage [2007/07/01(日) 23:14:22 ] alloca なら開放されるな。 環境依存だが。
470 名前:465 mailto:sage [2007/07/01(日) 23:22:00 ] あざーす
471 名前:デフォルトの名無しさん mailto:sage [2007/07/01(日) 23:25:21 ] >>464 たいした手間じゃないから自分で書いたらいいよ
472 名前:デフォルトの名無しさん mailto:sage [2007/07/01(日) 23:37:38 ] 木構造の二分探索木において ルートの下にノードがあるとします。 その2つのノードからそれぞれ2本ずつ枝がでていて、 1本は別々のノードにつながっている。もう一本は同じノードにつながっている。 これをあらわすには数字の割り当て方はどうすべきですかね? 0 1 2 3 4 5 6 とあれば、2のleftが4をさすようにする。 5は捨てるって感じですかね?
473 名前:デフォルトの名無しさん mailto:sage [2007/07/01(日) 23:43:04 ] よく意味が分からない。
474 名前:デフォルトの名無しさん mailto:sage [2007/07/01(日) 23:47:29 ] データ数400の二次元配列でかつ小数点 それと木構造と組み合わせて計算とか地獄だな。。。
475 名前:デフォルトの名無しさん mailto:sage [2007/07/01(日) 23:58:36 ] 0 /\ 1 2 /\ /\ 3 4 5 みたいな感じにしたいのか?
476 名前:デフォルトの名無しさん mailto:sage [2007/07/02(月) 00:09:47 ] >>475 はい、そうです。 各枝に確率をつけて、0のところを1.0と設定して 0から1、2への枝の確率をかけて1と2のノードにおいての確率をだす。 その次に1と2の下の3、4、5への枝に確率をつけて 3、4、5のノードにおいての確率を出す感じにしたいんですけど。 1つのノードに3つの確率がはいるようにしないといけないなーとは思ってます。 この計算を木でやるか配列でやるか迷ってます。
477 名前:デフォルトの名無しさん mailto:sage [2007/07/02(月) 00:58:38 ] 0 /\ 1 2 /\ /\ 3 4 5 /\ /\ /\ 6 7 8 9 となっていくんだったら、別に配列でもいい気がするな。 配列というか、三角行列?
478 名前:デフォルトの名無しさん [2007/07/02(月) 01:14:04 ] #include <stdio.h> int main(void) { /*左上*/ int a,b,c; printf("何段ですか:"); scanf("%d",&a); for (b = 1; b <= a; b++) { for (c = a; c >= 1; c--) putchar('*'); putchar('\n'); } return 0; } 左上が直角になる三角形を作りたいのですが・・・何か四角形になります
479 名前:デフォルトの名無しさん mailto:sage [2007/07/02(月) 01:18:38 ] >>478 for (c = a; c >= 1; c--) ↓ for (c = a; c >= b; c--)
480 名前:デフォルトの名無しさん [2007/07/02(月) 01:25:48 ] >>479 できました!ありがとうございました!
481 名前:デフォルトの名無しさん mailto:sage [2007/07/02(月) 03:05:47 ] >>456 8つのchar*が指し示している内容が分からないと何とも。
482 名前:デフォルトの名無しさん [2007/07/02(月) 11:56:07 ] 数人でCでプログラム開発しているのだけれど、 ソースコード中の各関数の前に、 // 関数名: // 作者: // 機能: // みたいな説明を付けたいのだけれど、どこかにカッチョいいサンプルないですか?
483 名前:デフォルトの名無しさん mailto:sage [2007/07/02(月) 12:07:11 ] >>482 つ[doxygen]
484 名前:デフォルトの名無しさん [2007/07/02(月) 12:53:35 ] >483 ありがとうございます。でも、 そういう高度なのは使いこなせそいうにないので、 具体的なサンプルを探しています。よろしく。
485 名前:デフォルトの名無しさん [2007/07/02(月) 12:58:04 ] #include <stdio.h> int main(void) { int a,b,c; printf("ピラミッドを作りましょう"); printf("何段ですか:"); scanf("%d",&a); for (b = 1; b <= a; b++) { for (c = a; c > 1; c--) putchar(' '); for (c = 1; c < 2b; c++) putchar('*'); putchar('\n'); } return 0; } 何が変なんですかね
486 名前:デフォルトの名無しさん mailto:sage [2007/07/02(月) 12:59:39 ] 使いこなさなくてもいいから、Doxygenスタイルで書いて置いたらいいんでね? もし>484がロートル、コボラの気に入りそうな「枠に填まった」コメントが好きならサンプル出してもいいけど。 #コメントを書くのに手間が掛かるのなんて論外だと思うんだがね。
487 名前:デフォルトの名無しさん mailto:sage [2007/07/02(月) 13:00:23 ] >>485 エラーメッセージくらい読め
488 名前:2b mailto:sage [2007/07/02(月) 13:00:50 ] >>485 あんたの頭。コンパイルエラーが出たのなら、その内容くらい書くのが当然だ。
489 名前:デフォルトの名無しさん mailto:sage [2007/07/02(月) 13:01:36 ] 2b
490 名前:デフォルトの名無しさん mailto:sage [2007/07/02(月) 13:03:19 ] >>488 これは間違いなくツンデレ
491 名前:デフォルトの名無しさん mailto:sage [2007/07/02(月) 13:04:29 ] ついでにピラミッドにするためには c > 1 じゃなくて c > b だと思われる
492 名前:デフォルトの名無しさん [2007/07/02(月) 13:06:36 ] エラー E2378 4-18.cpp 10: For文に ; がない(関数 main() ) エラー E2379 4-18.cpp 10: ステートメントにセミコロン(;)がない(関数 main() )
493 名前:デフォルトの名無しさん [2007/07/02(月) 13:11:00 ] >>489 できました。 ありがとうございました
494 名前:デフォルトの名無しさん mailto:sage [2007/07/02(月) 13:22:53 ] 488をスルーするとは酷い奴だ
495 名前:488 mailto:sage [2007/07/02(月) 13:34:56 ] べ、べつに気づいてもらいたくて名前に仕込んだわけじゃないからね。 「意味のないレスするな」って言われないための予防策なんだから。
496 名前:デフォルトの名無しさん mailto:sage [2007/07/02(月) 17:03:31 ] 死ねよ
497 名前:デフォルトの名無しさん mailto:sage [2007/07/02(月) 17:13:50 ] 山岡来た
498 名前:デフォルトの名無しさん [2007/07/02(月) 19:37:41 ] 2から5までとか指定するのってどう書けばよかったっけ?
499 名前:デフォルトの名無しさん mailto:sage [2007/07/02(月) 19:39:44 ] 日本語を正しく書いてください
500 名前:デフォルトの名無しさん mailto:sage [2007/07/02(月) 19:40:37 ] さすがにこれはエスパーじゃないと解読不能だな
501 名前:デフォルトの名無しさん mailto:sage [2007/07/02(月) 19:42:14 ] for(i=2; i<=5; i++) printf("%d") switch(n) { case 2: case 3: case 4: case 5: printf("2..5"); } if(2 <= n && n <= 5) printf("2..5");
502 名前:デフォルトの名無しさん [2007/07/02(月) 19:42:33 ] 変数iにおいて iが2から5という条件 文書くときに if(???) の中身はどう書けばよいですか?
503 名前:デフォルトの名無しさん mailto:sage [2007/07/02(月) 19:43:47 ] if (i >= 2 && i <= 5) ...
504 名前:デフォルトの名無しさん mailto:sage [2007/07/02(月) 19:56:35 ] >>482 こういうのってめっちゃ素人くさいな。
505 名前:デフォルトの名無しさん mailto:sage [2007/07/02(月) 19:58:12 ] しかるべきところで職につけばお前も目にすることがあるかもしれないよ
506 名前:デフォルトの名無しさん mailto:sage [2007/07/02(月) 20:00:14 ] 関数ヘッダクラスヘッダはあったほうがソース見やすい。 どうせ引数説明とか入れるんだし。 もちろブロックコメントでな。ラインコメントをいくつも並べるのはカッコワル。
507 名前:デフォルトの名無しさん mailto:sage [2007/07/02(月) 20:01:54 ] あと、関数ヘッダコメントに、その関数名をいちいち入れてるのってカコワルイ おまえ、それ何の意味があるんだと。
508 名前:デフォルトの名無しさん [2007/07/02(月) 20:23:01 ] 質問があるので宜しくお願い致します。 どうして、128バイトは1,024ビットになるのかわかりません どういう計算をすれば、そうなるのでしょうか?
509 名前:デフォルトの名無しさん mailto:sage [2007/07/02(月) 20:31:06 ] >>508 ほとんどの環境で1バイト=8ビット
510 名前:デフォルトの名無しさん mailto:sage [2007/07/02(月) 20:36:25 ] >>482 そういうのがある時点でかっこ悪いよ…
511 名前:デフォルトの名無しさん [2007/07/02(月) 20:46:27 ] >>509 ん〜考えても、どうして128バイトは1,024ビットになるのかわかりません 何の何階乗をすれbいいのでしょうか?
512 名前:デフォルトの名無しさん mailto:sage [2007/07/02(月) 20:47:49 ] 128 * 8 = 1024
513 名前:デフォルトの名無しさん mailto:sage [2007/07/02(月) 20:47:55 ] 8 * 128 = 1024
514 名前:デフォルトの名無しさん mailto:sage [2007/07/02(月) 20:56:34 ] >>511 みなさんからいっぱいのレスだけども も〜ちょっと分かりやすく書くと 128バイト×8ビット/バイト=1024ビット
515 名前:デフォルトの名無しさん mailto:sage [2007/07/02(月) 20:59:17 ] 1バイト=8ビット ってのを知らないだけなんじゃね
516 名前:デフォルトの名無しさん mailto:sage [2007/07/02(月) 21:00:23 ] かけ算ができないだけだろ
517 名前:デフォルトの名無しさん mailto:sage [2007/07/02(月) 21:07:17 ] 容量換算の1(M)=2^10(K)=1024(K)とかとごっちゃになっているんじゃない?
518 名前:デフォルトの名無しさん mailto:sage [2007/07/02(月) 21:08:26 ] いちいちゴミ撒かんと気が済まんのかこのスレは・・・
519 名前:デフォルトの名無しさん mailto:sage [2007/07/02(月) 21:09:32 ] どっちがビットでどっちがバイトだっけ? そんな時期が私にもありました(AA略
520 名前:デフォルトの名無しさん mailto:sage [2007/07/02(月) 21:16:43 ] そもそも1バイト=8ビットと決まってるわけじゃねーし。 厳密に8ビットというなら1オクテットと表現すべき。
521 名前:デフォルトの名無しさん mailto:sage [2007/07/02(月) 21:20:50 ] じゃ1バイト=9bitなんていういかれた環境があるのかよ! と思っていた時期が私にもありました 本当にあったんだね
522 名前:511 [2007/07/02(月) 21:21:02 ] サンクスです ですが、どうして128 * 8 して出すのかが 納得できません。。。
523 名前:511 [2007/07/02(月) 21:21:52 ] なんとなくわかりました サンクスでした
524 名前:デフォルトの名無しさん mailto:sage [2007/07/02(月) 22:30:20 ] なんとなくかよw じゃあ君が大好きなタコを例にして分かりやすく解説しよう。 「タコには足が8本あります。ここにタコが128匹います。全部で足は何本でしょう?」 タコ→バイト、足→ビット、に置き換えるとあら不思議。
525 名前:デフォルトの名無しさん mailto:sage [2007/07/02(月) 22:34:05 ] 128匹のタコ全部が足8本だとは限らないだろ
526 名前:390 mailto:sage [2007/07/02(月) 22:45:49 ] #include <stdio.h> main() { int a; float b; for(a=0; a<=100; a++) printf("セ氏温度:%d カ氏温度:%.2f\n",a ,fahrenheit(a,b)); } int fahrenheit(int x,int y) { y = (float)(9/5)*x+32; return y; } セ氏温度0〜100℃に対してカ氏温度を出したいのですが 出力の際、カ氏温度が0.00になってしまします。 間違っているところの指摘をお願いします。
527 名前:デフォルトの名無しさん mailto:sage [2007/07/02(月) 22:46:43 ] 例の一匹の足の1本はすでに俺は食べた
528 名前:デフォルトの名無しさん mailto:sage [2007/07/02(月) 22:50:20 ] >>526 fahrenheit()の第2引数はint型なのにfloat型のbを渡している fahrenheit()の戻り値の型はint型なのに%.2fを指定している
529 名前:デフォルトの名無しさん mailto:sage [2007/07/02(月) 22:53:38 ] もうひとつ。どっちにしろint型で返すことになってるが、 y = (float)(9/5)*x+32; は意図したのと違くなっていると思う
530 名前:526 mailto:sage [2007/07/02(月) 23:04:50 ] >>fahrenheit()の戻り値の型はint型なのに この部分はどう直せばいいのですか?
531 名前:デフォルトの名無しさん mailto:sage [2007/07/02(月) 23:08:52 ] 戻り値をfloatに変えるとか、%dに変えるとか
532 名前:デフォルトの名無しさん mailto:sage [2007/07/02(月) 23:19:45 ] struct abc{ char a; } main() { char b, c; c = ((struct abc)b).a; c = ((struct abc *)b)->a; } c = ((struct abc)b).a;がダメで c = ((struct abc *)b)->a;が良い理屈を教えて下さい。
533 名前:デフォルトの名無しさん mailto:sage [2007/07/02(月) 23:22:10 ] >>532 それって良いのか? コンパイルは通るだろうが、実行したら間違いなくSegmentFaultだぞ
534 名前:デフォルトの名無しさん mailto:sage [2007/07/02(月) 23:22:17 ] ((struct abc *)b)->a; は偶然うまく動くかもしれないが、よくない。
535 名前:526 mailto:sage [2007/07/02(月) 23:23:06 ] エラーで「初期化されていないローカル変数"b"が使用されます」 と出るのですがこれが原因ですか?