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/
413 名前:390 mailto:sage [2007/06/30(土) 17:43:19 ] >>409 助言ありがとうございます それと404は私ではないのであしからず
414 名前:390 mailto:sage [2007/06/30(土) 17:57:37 ] main() { int a,b; printf("整数1:"); scanf("%d", &a); printf("整数2:"); scanf("%d", &b); printf("%d\n", multiple(a,b)); return 0; } 407のmain部分を上のようにしたら理想通りに実行されたのですが なぜ上手くいったのかがよくわかりません。 誰かその理由を説明してください。
415 名前:デフォルトの名無しさん mailto:sage [2007/06/30(土) 17:59:15 ] >>414 >>409 の最後の行
416 名前:390 mailto:sage [2007/06/30(土) 18:02:29 ] 間違っていることはわかりましたが 407のscanf()はどういけないんですか?
417 名前:デフォルトの名無しさん mailto:sage [2007/06/30(土) 18:02:51 ] \n
418 名前:デフォルトの名無しさん mailto:sage [2007/06/30(土) 18:03:23 ] >>416 \n
419 名前:デフォルトの名無しさん mailto:sage [2007/06/30(土) 21:07:21 ] もし A、B、C、Dのいずれかを満たしたら、、、と出力 それ以外なら。。。と出力 とするにはどうやればいいですかね?
420 名前:デフォルトの名無しさん mailto:sage [2007/06/30(土) 21:20:02 ] >>419 ですけど自己解決しますたー
421 名前:デフォルトの名無しさん mailto:sage [2007/06/30(土) 23:23:30 ] #include<stdio.h> #include<string.h> main(){ char c[3]; char s1[]="abcdefghijklmnopqrstuvwxyz" char s2 [100]; s2[0]='\0'; printf("s1 inital value:\"%s\"\n",s1) printf("s2 inital value:\"%s\"\n",s2) if cstrcmp(s1,s2)==0){ printf("s1==s2\n");} else{printf("s!=s2\n");} printf("Push ENTER to proceed."); fgets(c,2,stdin); strcpy(s2,s1); printf("s1 current value:\"%s\"\n",s1); printf("s2 current value:\"%s\"\n",s2); if(strcmp(s1,s2)==0) { printf("s1==s2\n");} else{prinf("s1!=s2\n");} } のプログラムのfgets(c,2,stdin); ってなんですか?なんの役割ですか?
422 名前:デフォルトの名無しさん mailto:sage [2007/06/30(土) 23:29:26 ] >>421 どうでもいいけどそれ、そろそろtypo直そうな × if cstrcmp(s1,s2)==0){ ○ if (strcmp(s1,s2)==0){
423 名前:デフォルトの名無しさん mailto:sage [2007/06/30(土) 23:29:57 ] pc11.2ch.net/test/read.cgi/tech/1182607405/607-644 解決したんじゃなかったのか
424 名前:デフォルトの名無しさん mailto:sage [2007/06/30(土) 23:34:01 ] fgets(c,2,stdin); がわかないんですよ タイプミスはすいません
425 名前:デフォルトの名無しさん mailto:sage [2007/06/30(土) 23:37:27 ] >>421 stdinからcに1文字読み込む。
426 名前:デフォルトの名無しさん mailto:sage [2007/06/30(土) 23:38:03 ] 流れも他スレも読まずに回答。 >>421 >のプログラムのfgets(c,2,stdin); ってなんですか?なんの役割ですか? 入力処理。改行を入力させるために使っているわけだ。
427 名前:デフォルトの名無しさん mailto:sage [2007/06/30(土) 23:41:15 ] >>424 Push ENTER to proceed を表示したところで止まるだろう エンターキーを押すと次に進む ようはポーズさせているんだろう
428 名前:デフォルトの名無しさん mailto:sage [2007/06/30(土) 23:42:16 ] >>428 なんでENTERを押すと次が表示されるんでしょうか?
429 名前:デフォルトの名無しさん mailto:sage [2007/06/30(土) 23:44:23 ] >>428 自己レスかよ fgets(c,2,stdin); で標準入力からの入力待ちで止まっている エンターキーで入力されたので次に進むだけ cのデータ自体はいらないもの
430 名前:デフォルトの名無しさん mailto:sage [2007/06/30(土) 23:51:30 ] わかりました。ありがとうございます
431 名前:デフォルトの名無しさん mailto:sage [2007/07/01(日) 00:54:39 ] プログラムとか全くなんにもやった事ないんですけど、最初になにを用意したらいいものなんでしょう? ここのサイトをまず読めとか入門にいい本とかってありませんかね? 仕事では2D/3Dのデザイン系やってるんですけど、プログラムにもちょっと興味があるんで、 まずはCから勉強していこうと思っているんですが。
432 名前:デフォルトの名無しさん mailto:sage [2007/07/01(日) 00:55:43 ] まず、コンパイラとリンカを用意します
433 名前:デフォルトの名無しさん mailto:sage [2007/07/01(日) 00:57:21 ] 最初に用意すべきものは、 何を用意すればいいかを自力で探せる能力だな とマジレス いや、マジでプログラマにとって最重要な能力は、情報収集力だよ
434 名前:デフォルトの名無しさん mailto:sage [2007/07/01(日) 01:00:07 ] もうちょい広範囲に言うと「自己解決能力」
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