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/
409 名前:デフォルトの名無しさん mailto:sage [2007/06/30(土) 17:25:25 ] >>408 行間も読めないんですか? とか言われそうだなw >>407 scanf()とprintf()のフォーマット文字列は互換性がないと思ったほうがいい。 あんたのコードは明らかにscanf()のフォーマット文字列が間違っているぞ。
410 名前:デフォルトの名無しさん mailto:sage [2007/06/30(土) 17:26:28 ] >>409 お前こそ行間が読めてないなw
411 名前:409 mailto:sage [2007/06/30(土) 17:30:06 ] >>410 大丈夫、初めから読もうとしてないから。
412 名前:デフォルトの名無しさん mailto:sage [2007/06/30(土) 17:37:36 ] これはひどい
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
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"が使用されます」 と出るのですがこれが原因ですか?
536 名前:デフォルトの名無しさん mailto:sage [2007/07/02(月) 23:24:31 ] >>533 aのoffsetが0ならうまく動くだろ。
537 名前:デフォルトの名無しさん mailto:sage [2007/07/02(月) 23:25:19 ] >>532 (struct abc *)b はbで示される何らかの値をstruct abc のポインタに変換している で b の値はポインタか? どっちもよろしくない
538 名前:536 mailto:sage [2007/07/02(月) 23:29:11 ] てっきり、&bかと思ってたわ・・・
539 名前:デフォルトの名無しさん mailto:sage [2007/07/02(月) 23:34:58 ] >>535 a はfor文で値が入るが b には初期かも代入もされていない b に値を入れろ
540 名前:デフォルトの名無しさん mailto:sage [2007/07/02(月) 23:38:15 ] >>536 c = ((struct abc *)&b)->a; なら、aのoffsetが0ならうまく動くかも知れん。 が、>>532 はそうはなっていないので間違いなく保護違反
541 名前:532 mailto:sage [2007/07/02(月) 23:58:38 ] ほんと、すいません。 c = ((struct abc *)&b)->a; でした。
542 名前:535 mailto:sage [2007/07/02(月) 23:58:55 ] >>539 bに値を入れたら結果が変わりませんか?
543 名前:532 mailto:sage [2007/07/03(火) 00:04:41 ] 素人目にはc = ((struct abc)b).a;でも 問題ないように思えるのですが、 なにがダメなのでしょうか。
544 名前:デフォルトの名無しさん mailto:sage [2007/07/03(火) 00:09:44 ] そう思えるから素人なんです。
545 名前:デフォルトの名無しさん mailto:sage [2007/07/03(火) 00:52:50 ] すげえ正論だが質問の答えにはなってないな
546 名前:デフォルトの名無しさん mailto:sage [2007/07/03(火) 00:55:00 ] >>543 何でって言われても、言語仕様でそのようなキャストは認められていないから、としか。
547 名前:511 [2007/07/03(火) 00:56:08 ] >>524 8~128でしょうか?
548 名前:デフォルトの名無しさん mailto:sage [2007/07/03(火) 00:57:13 ] タコ釣りか?
549 名前:デフォルトの名無しさん mailto:sage [2007/07/03(火) 00:57:38 ] ~ ってなんだよ
550 名前:デフォルトの名無しさん mailto:sage [2007/07/03(火) 00:59:48 ] ティルデ
551 名前:デフォルトの名無しさん mailto:sage [2007/07/03(火) 01:03:41 ] ニョロ
552 名前:デフォルトの名無しさん mailto:sage [2007/07/03(火) 01:05:08 ] 0 1ビット 01 2ビット 010 3ビット 0101 4ビット 01010 5ビット 010101 6ビット 0101010 7ビット 01010101 1バイト
553 名前:デフォルトの名無しさん [2007/07/03(火) 01:08:27 ] >>547 例題がタコだからといって、演算子までタコにするのはやめような。
554 名前:デフォルトの名無しさん mailto:sage [2007/07/03(火) 01:10:35 ] いつか 1byte != 1octet の時代は来るのだろうかー・・・
555 名前:デフォルトの名無しさん mailto:sage [2007/07/03(火) 01:11:49 ] ヽ (゚o゚)∫ ノ川ル
556 名前:デフォルトの名無しさん mailto:sage [2007/07/03(火) 01:12:40 ] >>554 1byte == 1octet の時代なんて一度も来た事がないんだが。
557 名前:デフォルトの名無しさん [2007/07/03(火) 01:21:37 ] まだC言語とかやってたんだ。 懐かしいなー
558 名前:デフォルトの名無しさん mailto:sage [2007/07/03(火) 02:01:19 ] 今でも、36ビットワードマシンとかでは1バイト=9ビットだね UTF−9とかもあるし
559 名前:デフォルトの名無しさん mailto:sage [2007/07/03(火) 02:04:28 ] UTF-9 はエイプリルフールのネタじゃなかったっけ?
560 名前:デフォルトの名無しさん mailto:sage [2007/07/03(火) 07:16:54 ] scanfやfgetsで文字を入れて 文字列を比較する場合、どうすればいいんでしょうか? char* str; fgets(str,100,stdin); if(str=="start"){ なんとかかんとか; } これ、うまく動かないんですが
561 名前:デフォルトの名無しさん mailto:sage [2007/07/03(火) 07:18:20 ] strcmp
562 名前:デフォルトの名無しさん mailto:sage [2007/07/03(火) 07:33:18 ] >>560 1. str の指す領域を確保する 2. 文字列の比較には strcmp を使う 3. 比較する文字列を "start\n" にする
563 名前:526 mailto:sage [2007/07/03(火) 08:27:43 ] #include <stdio.h> main() { int a; int b=0; for(a=0; a<=100; a++) printf("セ氏温度:%d カ氏温度:%d\n",a ,fahrenheit(a,b)); } int fahrenheit(int x, int y) { y = (9/5)*x+32; return y; } 誰かこのプログラムをカ氏温度が小数点まで 出力されるように改ざんしてください;
564 名前:デフォルトの名無しさん mailto:sage [2007/07/03(火) 08:29:25 ] >>563 double型の変数でも使えばええやん・・・
565 名前:デフォルトの名無しさん mailto:sage [2007/07/03(火) 08:48:21 ] #include <stdio.h> #include <stdlib.h> #include <string.h> struct list{ char *name; struct list* next; }; int main(void){ struct list *head,*ume; char *str; head=NULL; str=(char*)malloc(100*sizeof(char)); printf("名前を入力(endで終了)>"); fgets(str,100,stdin); while(strcmp(str,"end\n")!=0){ ume=(struct list*)malloc(sizeof(struct list)); ume->name=str; ume->next=head; head=ume; printf("名前を入力(endで終了)>"); fgets(str,100,stdin); } printf("%s%p\n",head->name,head); return 0; } リスト構造体のテストやってみたんですが これ実行して、taro、hanako、endと入力したら endが表示されるんだけどどこがおかしいんですかね? endと入力した時点でwhileから抜け出し、head->nameがendになると思えないんですが・・・
566 名前:デフォルトの名無しさん mailto:sage [2007/07/03(火) 08:54:24 ] >>565 > head->nameがend ume->next=head; head=ume; ↑そりゃなるだろw
567 名前:デフォルトの名無しさん mailto:sage [2007/07/03(火) 09:05:44 ] >>565 おかしいっていうのは、期待した動作と違うって事だろうけど 何をしたいのか分からんのに、答えられるわけ無いだろ
568 名前:デフォルトの名無しさん mailto:sage [2007/07/03(火) 09:16:49 ] >>565 エスパー回答 #include <stdio.h> #include <stdlib.h> #include <string.h> struct list{ char *name; struct list *next; }; int main(void){ struct list *head, *ume; char *str; head = NULL; str = (char *) malloc(100 * sizeof(char)); for(;;){ printf("名前を入力(endで終了)>"); fgets(str, 100, stdin); if(strcmp(str, "end\n") == 0) break; ume = (struct list *) malloc(sizeof(struct list)); ume->name = strdup(str); ume->next = head; head = ume; } ume=head; while(ume!=NULL){ printf("%s", ume->name); ume=ume->next; } return 0; }
569 名前:デフォルトの名無しさん mailto:sage [2007/07/03(火) 09:21:00 ] >565 ume->nameは常にstrを指していて、最後にendになってんだから当たり前だろ。
570 名前:デフォルトの名無しさん mailto:sage [2007/07/03(火) 09:45:41 ] >>565 まあ大体察しはつくが・・・ 「おかしい」って言う以前に、どういう動作を期待しているのかちゃんと書こうな
571 名前:デフォルトの名無しさん mailto:sage [2007/07/03(火) 09:54:45 ] どのくらいの変数が必要なのかよくわからないときは とりあえず多めに変数宣言用意しておいてもいい? int i,j,k,l; double a,b,c,d,e; char f[1000],g[1000],e[1000]; とか・・・ 変数○○は使われていませんって警告がでるけど 多くしたら実行速度下がるとかエラーでるとかこまったことがおきるとかありますか?
572 名前:デフォルトの名無しさん mailto:sage [2007/07/03(火) 09:54:56 ] struct list{ char *name; < いっ、いいんかい? struct list *next; };
573 名前:デフォルトの名無しさん [2007/07/03(火) 09:59:25 ] 571 困ったことが起こるよ new だといい
574 名前:デフォルトの名無しさん [2007/07/03(火) 10:02:14 ] 571 使ったことないけど std::vector, std::string がいいみたいだよ
575 名前:デフォルトの名無しさん mailto:sage [2007/07/03(火) 10:08:31 ] C++とSTLの世界へご招待〜
576 名前:デフォルトの名無しさん mailto:sage [2007/07/03(火) 10:14:18 ] C言語の入門者向け解説スレです。 ・C++言語はスレ違いです。
577 名前:デフォルトの名無しさん [2007/07/03(火) 10:16:25 ] 576 C言語専用の環境使っているやつがいるか?
578 名前:デフォルトの名無しさん mailto:sage [2007/07/03(火) 10:21:31 ] そりゃいるでしょ
579 名前:デフォルトの名無しさん mailto:sage [2007/07/03(火) 10:25:00 ] >>571 一応ありはありだが ・万一配列のサイズを超えたときにそれをはじくようなチェックを入れておく。 ・スタックにあまり大きな配列を取らない(char *f, *g, *eにして領域をmallocする)。 あたりは注意しておいたほうがいい。 速度はメモリ浪費でスワップしない限りさほど落ちない。
580 名前:デフォルトの名無しさん [2007/07/03(火) 10:30:04 ] 今日はじめてSTLググってみたけど、これは使うべきだな 初心者こそ使うべきだな コーディングが楽になるな
581 名前:デフォルトの名無しさん mailto:sage [2007/07/03(火) 11:45:36 ] charの配列の[0]から[3]の4バイトにデータがあります。 これを一つのintの変数に入れたいのですが、どうやればいいですか?
582 名前:デフォルトの名無しさん mailto:sage [2007/07/03(火) 11:48:29 ] >>581 過去ログを読む気がないのなら、やりたいことを具体的に書け。 どんなデータをどう入れたいのか判らんことには答えようがない。
583 名前:デフォルトの名無しさん mailto:sage [2007/07/03(火) 11:48:39 ] *(int*)配列名
584 名前:デフォルトの名無しさん mailto:sage [2007/07/03(火) 11:49:50 ] >>583 バスエラーの可能性ががが
585 名前:デフォルトの名無しさん [2007/07/03(火) 11:55:18 ] c[0]+(c[1]<<8)+(c[2]<<16)+(c[3]<<24)
586 名前:デフォルトの名無しさん mailto:sage [2007/07/03(火) 11:56:39 ] union使うとか
587 名前:デフォルトの名無しさん mailto:sage [2007/07/03(火) 11:57:53 ] >584 配列の0から3でもバスエラーって発生するもんなの?
588 名前:デフォルトの名無しさん mailto:sage [2007/07/03(火) 12:00:28 ] >>587 char配列がint安全な場所に作られる保証はない。 その点ではunionの方がまし。 しかし、unionには言語仕様的に実装依存の罠が。 そういう意味では>585でいいのだがエンディアンの問題が残る。 まぁ、最近のコンパイラならどれで書いても同じようなコードを吐くしね。
589 名前:デフォルトの名無しさん mailto:sage [2007/07/03(火) 12:11:23 ] >>588 そういやこういう場合かもしれんしな。 #include <stdio.h> #include <stddef.h> int main() { struct A { char a; char b[4]; }; printf("%ld\n", offsetof(struct A, b)); }
590 名前:581 mailto:sage [2007/07/03(火) 12:30:43 ] >>583 一番簡潔なのですがかなり難解です。これから考えます。 >>585 一番分かり易いです。 unionの使い方に悩みましたがcharの配列と一つのintのメンバ変数を用意して charの配列にデータを入れてintのメンバ変数でアクセスすればいいのですね。面白い。
591 名前:デフォルトの名無しさん mailto:sage [2007/07/03(火) 12:36:02 ] GCC で試した所、 -O (最適化レベル1か、それ以上) -funroll-loops (ループ展開最適化) フラグを立てると >>585 みたいなコードを吐いてくれるみたいだ。 int toInt(const char* ch) { union { char ch[sizeof (int)]; int i; } endian; int i; int shift, dshift; int n = 0; endian.i = 0; shift = *endian.ch ? 0 : (sizeof (int) - 1) * CHAR_BIT; dshift = *endian.ch ? CHAR_BIT : -CHAR_BIT; for(i = 0; i < sizeof (int); i++) { n |= ch[i] << shift; shift += dshift; } return n; }
592 名前:デフォルトの名無しさん mailto:sage [2007/07/03(火) 14:59:59 ] 最近、関数のメモリの場所をポインタで取得できることを知ったのですが、 これを利用してデリゲートまがいなことってできませんかね?
593 名前:デフォルトの名無しさん mailto:sage [2007/07/03(火) 15:00:37 ] qsort() とか使ったことない?
594 名前:デフォルトの名無しさん mailto:sage [2007/07/03(火) 15:41:43 ] int a, b; があって両者の絶対値の大きさを比較したいとき 自乗した値を比較するのとabs()を使うのではどちらが速いのでしょう? 自乗してもintの範囲を超えないことは保証されているという前提で。 またこういったベンチマークテストはどうやって行うのでしょう?
595 名前:デフォルトの名無しさん mailto:sage [2007/07/03(火) 16:02:53 ] 数百万回〜数億回くらい実行して、速度を比較する。
596 名前:デフォルトの名無しさん mailto:sage [2007/07/03(火) 16:15:19 ] >>594 こんなコードを書いてみる。 #include <stdio.h> #include <stdlib.h> int main() { volatile int a; volatile int b; for (int ic = 0; ic < 100 * 1000 * 1000; ++ic) { #if 1 volatile int c = abs(a) > abs(b); #else volatile int c = a * a > b * b; #endif } return 0; } こいつをこんな感じで実行してみる。 $ gcc foo.c -std=c99 -O3 ; time ./a foo.c: In function `main': foo.c:11: warning: unused variable `c' real 0m0.734s user 0m0.687s sys 0m0.047s 意外にも、abs()の方が遅かった。
597 名前:デフォルトの名無しさん mailto:sage [2007/07/03(火) 16:18:21 ] abs は条件判定が必要だからな。
598 名前:デフォルトの名無しさん mailto:sage [2007/07/03(火) 16:34:10 ] あー、volatile宣言のお蔭で、参照回数の影響も出ちゃった。 よって一部訂正。 #if 0 int aa = a; int bb = b; volatile int c = abs(aa) > abs(bb); #else int aa = a; int bb = b; volatile int c = aa * aa > bb * bb; #endif 今回は大勢に影響はなかったけど。 で、ついでに-Sでアセンブリ出力を眺める。二乗版はこんだけ。 movl -4(%ebp), %eax movl -8(%ebp), %edx imull %eax, %eax imull %edx, %edx cmpl %edx, %eax setg %dl movb %dl, -9(%ebp) abs()版はどうしても条件分岐しないためにビット操作であれこれ捻り過ぎ。 movl -8(%ebp), %edx movl -12(%ebp), %eax movl %edx, %ecx sarl $31, %ecx xorl %ecx, %edx subl %ecx, %edx movl %eax, %ecx sarl $31, %ecx xorl %ecx, %eax subl %ecx, %eax cmpl %eax, %edx setg %dl movb %dl, -13(%ebp)
599 名前:デフォルトの名無しさん mailto:sage [2007/07/03(火) 16:50:59 ] バイナリーサーチというものをやる場合 データが小さい順もしくは大きい順に並んでなかったらできない? つまりめちゃくちゃなデーターがあったら一旦それをバブルソートなどで整列させないとダメってことですか?
600 名前:デフォルトの名無しさん mailto:sage [2007/07/03(火) 16:51:52 ] そう。
601 名前:デフォルトの名無しさん mailto:sage [2007/07/03(火) 16:52:21 ] わざわざバブルソートを選択する理由も無いけどな
602 名前:デフォルトの名無しさん mailto:sage [2007/07/03(火) 16:52:46 ] >>599 その通りです バブルソートである必要はありませんが…
603 名前:デフォルトの名無しさん mailto:sage [2007/07/03(火) 17:00:04 ] バブルソート突っ込まれ過ぎワロタ
604 名前:デフォルトの名無しさん mailto:sage [2007/07/03(火) 17:19:51 ] >>599 揃っているからこそのバイナリサーチじゃないか。 って、仕組み見たら一目瞭然だと思うが・・・・・ で、バブルソートである意味はない。 でも、ふと思ったのは、必要なものをすべて見つける必要はなくて 一つ見つければいいというのであれば、動的に必要な部分だけ ソートしながら利用するっていう使い方もあるのかな、と思った。 レイトバインディングのように、対象要素が大きくて ソートの初期化コストが大きかったり頻繁に要素が追加されるという状況で使えないかな? それともそういう場合はB-Treeとかを使っておくべき?(追加のコストによるのかな?)
605 名前:デフォルトの名無しさん mailto:sage [2007/07/03(火) 19:08:21 ] #include いろいろ struct list{ int data; struct list *next; }; void showlist(); int main(void){ int indata,i,j; struct list *head,*test; head=NULL; while(1){ printf("数を入力(終了は0)>");scanf("%d",&indata); if(indata==0) break; test=(struct list*)malloc(sizeof(struct list)); test->data=indata; test->next=head; head=test; } showlist(); return 0; } void showlist(){ struct list *now; while (now!=NULL){ printf("%d ",now->data); now=now->next; } }; 構造ポインタで次々入力しshowlistで表示するというのを作ったんだけど これ実行したら、mainのreturn 0の上のshowlistがプロトタイプ宣言が無いと警告でるんですがどうしたらいいですか?
606 名前:デフォルトの名無しさん mailto:sage [2007/07/03(火) 19:25:05 ] void showlist(void); ↑型を入れる
607 名前:デフォルトの名無しさん mailto:sage [2007/07/03(火) 20:14:24 ] #include <stdio.h> void inputdata(int data[],int n); int main(void){ int x[10]; inputdata(x,10); return 0; } void inputdata(int data[],int n){//inputdata関数 int i; for(i=0;i<n;i++){ printf("Input data>"); scanf("%d",&data[i]); } for(i=0;i<n;i++){ printf("data[%d]=%d",i,*data[i]); } } C言語について質問です 配列x[0]〜x[9]のそれぞれに値を入れて表示するというinputdata関数を作ってみたいんですが これ動きません。どのように関数を直せばよいのでしょうか?
608 名前:デフォルトの名無しさん mailto:sage [2007/07/03(火) 20:19:42 ] int *data[]
609 名前:デフォルトの名無しさん mailto:sage [2007/07/03(火) 20:34:33 ] printf("data[%d]=%d",i,*data[i]); ↓ printf("data[%d]=%d",i,data[i]);
610 名前:デフォルトの名無しさん [2007/07/03(火) 20:55:02 ] 2^8は65,536でしょうか?
611 名前:デフォルトの名無しさん mailto:sage [2007/07/03(火) 20:58:26 ] それくらいぐぐれよ www.google.co.jp/search?q=2%5E8
612 名前:デフォルトの名無しさん [2007/07/03(火) 21:09:46 ] さんkyさう
613 名前:デフォルトの名無しさん mailto:sage [2007/07/03(火) 21:15:15 ] つーかプログラミング勉強してる奴が電卓の使い方も(その存在も?)和歌ランとは・・・
614 名前:デフォルトの名無しさん mailto:sage [2007/07/03(火) 21:19:11 ] 小学生なんだろ。
615 名前:デフォルトの名無しさん mailto:sage [2007/07/03(火) 21:47:58 ] 2^8 = 16^2 = 0xFF
616 名前:デフォルトの名無しさん mailto:sage [2007/07/03(火) 21:52:29 ] 二次元配列で構造体を使って その中身の計算に 違う二次元配列の中身を用いないといけないんだけど すげーキレそう
617 名前:デフォルトの名無しさん mailto:sage [2007/07/03(火) 21:57:59 ] ゆとりは相変わらずキレやすいな。
618 名前:デフォルトの名無しさん mailto:sage [2007/07/03(火) 22:03:50 ] トイレに行くと血が・・・ orz
619 名前:デフォルトの名無しさん mailto:sage [2007/07/03(火) 22:04:52 ] >>618 今日あの日だろ
620 名前:デフォルトの名無しさん mailto:sage [2007/07/03(火) 22:14:14 ] >>618 肛門様を大事に
621 名前:デフォルトの名無しさん mailto:sage [2007/07/03(火) 23:25:36 ] cdっていう配列があったとして &cd[0] と cd は全く同じ意味ですか?
622 名前:デフォルトの名無しさん mailto:sage [2007/07/03(火) 23:27:05 ] ほぼ同じ意味
623 名前:デフォルトの名無しさん mailto:sage [2007/07/03(火) 23:27:28 ] >>621 「2*2」と「1*4」は同じですか? という質問と同じです。 値も型も同じですが、意図が違います
624 名前:デフォルトの名無しさん mailto:sage [2007/07/03(火) 23:27:32 ] cdとブルーレイくらいしか変わらない
625 名前:デフォルトの名無しさん mailto:sage [2007/07/03(火) 23:28:25 ] sizeofの引数にしてみそ
626 名前:デフォルトの名無しさん mailto:sage [2007/07/03(火) 23:47:34 ] void型の関数でwhileやifの途中で関数を終わらせるにはどうしたらいいでしょうか? int型とかなら if(x==1) return 0; とかやれば関数から抜け出せるけど void型はどうやるんですか?
627 名前:デフォルトの名無しさん mailto:sage [2007/07/03(火) 23:48:33 ] return;
628 名前:デフォルトの名無しさん mailto:sage [2007/07/04(水) 00:02:09 ] だが、ループの途中からリターンするのはあんまり気持ちのいいもんじゃないよ。
629 名前:デフォルトの名無しさん mailto:sage [2007/07/04(水) 00:05:51 ] そして、じゃあbreakはどうなんだ?というような宗教論争に
630 名前:デフォルトの名無しさん mailto:sage [2007/07/04(水) 00:12:35 ] ネストされたループとか考えるとループ中のreturnはやむを得ない気がする。
631 名前:デフォルトの名無しさん mailto:sage [2007/07/04(水) 01:03:33 ] 10GBぐらいある巨大なテキストデータの中のある1行を 書き換えたいんだけどどうやればできますか。 普通にやると,また10GB書き出さないと出来ないような。
632 名前:デフォルトの名無しさん mailto:sage [2007/07/04(水) 01:10:57 ] 双方向リストに関する質問です。 kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4492.txt 双方向リストの先頭と末尾へ要素を追加する関数と、 先頭と末尾の要素を削除する関数を書いてみたのですが、 末尾要素を削除する関数 DelTail() が思うように動いてくれません。 free()する対象が悪いのではないかと推測していますが、 検討もつかないというのが実際のところです。 他の関数についてもツッコミいただければと思います。
633 名前:デフォルトの名無しさん mailto:sage [2007/07/04(水) 01:11:06 ] >>621 int cd[10]; として、 &cd[0] の型は int* で、 cd の型は int [10] だな。 全く同じではない。
634 名前:デフォルトの名無しさん [2007/07/04(水) 01:18:05 ] 632 www.geocities.jp/ky_webid/cpp/library/003.html ●C++編(標準ライブラリ) 第3章 list listは双方向リストを構築したテンプレートクラスです。
635 名前:デフォルトの名無しさん mailto:sage [2007/07/04(水) 01:18:07 ] >>631 ファイルでもメモリーでもどっちでもいいが、書き換えサイズが同じなら、読んで書いて閉じればそれで終わり。 挿入や削除ならそこでちょん切ってリスト構造で繋ぎ直す。
636 名前:デフォルトの名無しさん mailto:sage [2007/07/04(水) 01:43:20 ] >>634 そのページのC編のほうのも参考にしてみたのですが、 できればグローバル変数を使わずに、 かつ、リスト操作関数の引数も、リストへのポインタだけにしたいのです。 逆に、関数内で作業用の変数が増えるのはあまりこだわりません。 もちろん、良識のある範囲で少ないほうがいいのですが。
637 名前:デフォルトの名無しさん mailto:sage [2007/07/04(水) 01:44:58 ] Add系の関数の引数はデータもあるので、 増やす方は2コ(リストと要素)、減らす方は1コ、というのが正しいですね。
638 名前:デフォルトの名無しさん mailto:sage [2007/07/04(水) 01:45:03 ] >>631 ファイルをリスト構造にする。 ところどころにダミーデータをいれておいて、そこをバッファに使う。 書き換えたい所を含んだクラスタを別のクラスタに繋ぎなおす。 別のファイルにパッチ情報として〜行目はこの内容に置き換わりました、のような情報を入れてセットで扱う。 直した所から後ろをそっくり書き直す
639 名前:デフォルトの名無しさん mailto:sage [2007/07/04(水) 02:11:46 ] fgets(hoge, 64, stdin); みたいにしたとき、入力が64文字以上あるとどうなりますか? 63文字目までがhogeに入って後は無視されるんでしょうか?
640 名前:デフォルトの名無しさん mailto:sage [2007/07/04(水) 02:14:48 ] 63文字だけ stdin から読み込む、だけ。 後は次の読み込みがあれば、その時に読み込まれる。
641 名前:639 mailto:sage [2007/07/04(水) 03:07:44 ] では、64文字目以降の改行までを無視することはできますか? fflush(stdin); してしまうと、リダイレクトされてきた時に 改行以降も全て捨てられてしまうのでは?
642 名前:デフォルトの名無しさん mailto:sage [2007/07/04(水) 03:16:35 ] hoge[62] = 0; hoge[63] = 1; fgets(hoge, 64, stdin); if(hoge[63] == 0 && hoge[62] != '\n') { scanf("%*[^\n]s"); getchar(); }
643 名前:デフォルトの名無しさん mailto:sage [2007/07/04(水) 08:40:22 ] int *p,a; p=&a; ってやったら *pはaと同じ(*p=a)になるんでしょ でも@=&aとやらず*p=aはなんでダメなの?
644 名前:デフォルトの名無しさん mailto:sage [2007/07/04(水) 08:43:50 ] *p==a p==&a
645 名前:デフォルトの名無しさん mailto:sage [2007/07/04(水) 08:48:28 ] int *p,a; p=&a; *p = 10; printf("%d\n",a); a = 20; printf("%d\n",*p);
646 名前:デフォルトの名無しさん mailto:sage [2007/07/04(水) 08:50:31 ] pが未初期化だとどこさしてるかわからんのに その先に値を書き込もうとするか
647 名前:デフォルトの名無しさん [2007/07/04(水) 12:10:01 ] STL勉強してるんだけど vector<string>とかできるの?
648 名前:デフォルトの名無しさん mailto:sage [2007/07/04(水) 12:10:52 ] スレタイ読めないの?
649 名前:デフォルトの名無しさん mailto:sage [2007/07/04(水) 12:42:43 ] 試せば分かることをわざわざ聞きにくるやつに スレタイを正しく読むのは難しいだろ
650 名前:デフォルトの名無しさん mailto:sage [2007/07/04(水) 13:05:10 ] 試して出来ないから聞いてんじゃないの? 少しは予測しろよw
651 名前:デフォルトの名無しさん mailto:sage [2007/07/04(水) 13:16:20 ] それは有り得ない話だ。
652 名前:デフォルトの名無しさん [2007/07/04(水) 13:20:44 ] STL勉強してるんだけど vector<vector>とかできるの? vector<vector<int>>とか vector<vector<vector>> とかできるの?
653 名前:デフォルトの名無しさん mailto:sage [2007/07/04(水) 13:25:34 ] これはひどい
654 名前:デフォルトの名無しさん mailto:sage [2007/07/04(水) 13:31:33 ] スレタイくらい読め
655 名前:デフォルトの名無しさん mailto:sage [2007/07/04(水) 13:58:39 ] STLはC言語では使えん vector<vector<int> > vector<vector<vector<int> > > で試せ
656 名前:デフォルトの名無しさん mailto:sage [2007/07/04(水) 14:34:52 ] つ[名前空間] まあスレタイも読めないおばかさんは一生悩んでろ。
657 名前:デフォルトの名無しさん mailto:sage [2007/07/04(水) 17:09:49 ] switch( uMsg ) case WM_CREATE: test1=1; test2=2; break; case WM_CREATE: { test1=1; test2=2; } break; case WM_CREATE: { test1=1; test2=2; } return; case WM_CREATE: { test1=1; test2=2; return; } どれ使ってもOK?
658 名前:デフォルトの名無しさん mailto:sage [2007/07/04(水) 17:11:06 ] OK
659 名前:デフォルトの名無しさん mailto:sage [2007/07/04(水) 17:11:26 ] {}で囲むのは途中で変数宣言したいとき。 breakとreturnは意味が違う。
660 名前:デフォルトの名無しさん mailto:sage [2007/07/04(水) 17:16:09 ] 別に変数宣言しなくても囲ってもいい
661 名前:デフォルトの名無しさん mailto:sage [2007/07/04(水) 18:09:43 ] switch、caseに関わらず、別にスコープは好きなところで使って構わない。
662 名前:デフォルトの名無しさん mailto:sage [2007/07/04(水) 18:14:36 ] 関数内ならね。
663 名前:デフォルトの名無しさん mailto:sage [2007/07/04(水) 18:16:27 ] >>641 fflushは入力バッファに対してどう作用するか定められていない (出力バッファを吐き出すことだけが規定されている)ので、 このスレとしては知らないという答えになる。
664 名前:デフォルトの名無しさん mailto:sage [2007/07/04(水) 18:50:24 ] { }は見やすくするためにつけたけど、どこでも使ってOKなのね。 breakとreturnはよく考えるとぜんぜん意味が違う事に気づいた なぜreturnが入ってたんだろうw
665 名前:デフォルトの名無しさん mailto:sage [2007/07/04(水) 19:07:30 ] 関数と定義するとき、プロトタイプ宣言が必要って言われてますよね? プロトタイプ宣言って必要なんですか? なくても動くと思うのですが・・・
666 名前:デフォルトの名無しさん mailto:sage [2007/07/04(水) 19:13:08 ] なくても動きますし、必須でもありません。 あなたがいらないと思うなら必要ではないでしょう・
667 名前:デフォルトの名無しさん mailto:sage [2007/07/04(水) 19:16:40 ] なくても必ず正しく動くわけじゃないぞ。
668 名前:デフォルトの名無しさん [2007/07/04(水) 19:20:45 ] 自前の関数を関数内で使うときじょんじょが大事になる
669 名前:デフォルトの名無しさん mailto:sage [2007/07/04(水) 19:35:19 ] 例えばいつもおなじみのstdio.hという標準入出力ライブラリのヘッダファイルには printf関数やらfopen関数やらのプロトタイプ宣言がずらずらと並んでる stdio.hにはプロトタイプ宣言だけが書かれてて,printf関数やfopen関数の実装はstdio.cに記述されている ライブラリってのはヘッダファイルとソースファイルが対になっていて ヘッダファイルに「このライブラリはこんな機能を提供しますよ〜」っと目次みたいなもんを書いてるわけだ それがプロトタイプ宣言 なんでこんなことを分けるするかってのはソースを分割して機能別にライブラリ化するため 1個だけのソースファイルでプログラミングしてる時は必要無いけど普通はプロトタイプ宣言も書いておく main関数の前にずらずら別の関数の実装が並んでいると,どこがmainの始まりか探すのが大変なのもある
670 名前:デフォルトの名無しさん [2007/07/04(水) 20:18:02 ] 年と月を入力して 2007 7 sun mon tue wed thu fri sat 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 みたいな万年カレンダーを作りたいんですけど、アルゴリズムを詳しく教えてほしいです。 よろしくおねがいします。
671 名前:デフォルトの名無しさん mailto:sage [2007/07/04(水) 20:19:53 ] あ、数字がずれてる…。 sunのnの下に1がきてmonのnのしたに2がくる感じです
672 名前:デフォルトの名無しさん mailto:sage [2007/07/04(水) 20:38:15 ] kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4502.txt 上のプログラムは、入力した文字を逆向きにプリントしちゃうはずの 自分でゆうのもなんですが、優れものなんです。が 実行すると、何故か変な文字列が入っちゃいます>< こんな感じ↓(testと入力した場合) www.uploda.org/uporg888409.jpg.html どなたか、原因を教えてくださいな 教えてくれた方に、僕のケツ穴差し上げます><
673 名前:デフォルトの名無しさん mailto:sage [2007/07/04(水) 20:42:44 ] ソース見た瞬間意識が朦朧としてきた
674 名前:デフォルトの名無しさん mailto:sage [2007/07/04(水) 20:49:51 ] >672 文字列の終端は'\n'じゃない てめえの汚えケツ穴なんぞ誰がいるかってんだ
675 名前:デフォルトの名無しさん mailto:sage [2007/07/04(水) 21:05:09 ] >>673 朦朧としてると、こっちから押し倒しちゃうze(はぁと >>674 ありがちんこ☆ \0か!
676 名前:デフォルトの名無しさん mailto:sage [2007/07/04(水) 21:09:59 ] あえて断言しよう >>674 は絶好のチャンスを失った、と。
677 名前:デフォルトの名無しさん mailto:sage [2007/07/04(水) 21:12:21 ] >>670 #include <unistd.h> int main(int argc, char *argv[]){return execlp("cal", "cal", argv[2], argv[1], NULL);}
678 名前:デフォルトの名無しさん mailto:age [2007/07/04(水) 21:14:37 ] 例えば、以下のような4つの要素からなる列が複数あるものに対して、 次のような処理: (1)1番目の要素が同一の場合、後から出現したものを採用する (2)3番目の要素でソートする を行いたいのですが、どのようなアルゴリズムになりますか? 例) 0010 ABC 60 70 0022 BCD 56 76 0010 EFG 85 34 0003 HIJ 70 98 ↓ 0010 EFG 85 34 0003 HIJ 70 98 0022 BCD 56 76
679 名前:デフォルトの名無しさん mailto:sage [2007/07/04(水) 21:15:51 ] 普通に配列につめてソートします。
680 名前:678 mailto:age [2007/07/04(水) 21:50:09 ] >>679 普通に配列からソートする場合、 どのように(1)の条件をクリアしますか? そこで困っています。
681 名前:デフォルトの名無しさん mailto:sage [2007/07/04(水) 21:59:03 ] 同じものが出てきたら上書きする
682 名前:デフォルトの名無しさん mailto:sage [2007/07/04(水) 22:25:35 ] 1番目の要素が同一かどうか調べて、同一なら上書きすればいい(例だと、消去してる?)
683 名前:デフォルトの名無しさん mailto:sage [2007/07/04(水) 22:29:19 ] >>680 0000番から9999番までの箱を用意してそれぞれの箱に入れていく。 で、既に入ってる場合は入ってるものを捨てて代わりを入れる。 全部入れ終わったらソート。 無駄だらけだけど分かりやすい考え方だとこんな感じ?
684 名前:デフォルトの名無しさん mailto:sage [2007/07/04(水) 22:30:50 ] int i, j, k, n; for(i=n-1; i> 0; i--) { for(j=i-1; j>=0; j--) { if(a[j]==a[i]) { for(k=j; k<n-1; k++) a[k] = a[k+1]; n--; i--; } } } こんな感じで同じものを消去すりゃいいんじゃね?
685 名前:デフォルトの名無しさん mailto:sage [2007/07/04(水) 22:31:14 ] ソートしてからの方が効率いいだろ・・・
686 名前:デフォルトの名無しさん mailto:sage [2007/07/04(水) 22:34:55 ] >>685 ソートしちゃうとどれが先にでてきたか分からなくならない? いや、マージソートとかならいいけど
687 名前:デフォルトの名無しさん mailto:sage [2007/07/04(水) 22:38:45 ] >>686 そのための安定ソートだろ 入門篇ならバブルソートだろう
688 名前:デフォルトの名無しさん mailto:sage [2007/07/04(水) 22:44:16 ] >>685 ソートは3番目の要素でするんだぞ?
689 名前:678 mailto:age [2007/07/04(水) 22:45:58 ] >>683 それ考えたんですけど、 実際は0000000000番から9999999999番まで(10桁)あり、 番号も全部あるわけじゃないからやっぱり効率悪いですよね。 はやさも求められているんで・・・ ハッシュとか2分探索とか使うんですかね?
690 名前:デフォルトの名無しさん mailto:sage [2007/07/04(水) 22:50:51 ] >688 一番目の要素で安定ソート 一番目の要素でのかぶりを削除 三番目の要素でソート ってことだろ。
691 名前:デフォルトの名無しさん mailto:sage [2007/07/04(水) 22:53:29 ] インデックス情報を付加しといて qsort という手もある。
692 名前:デフォルトの名無しさん mailto:sage [2007/07/04(水) 23:05:49 ] 標準ライブラリに無いのが難点だけど 重複してるかどうか調べるのはハッシュ使うのがいいと思う
693 名前:デフォルトの名無しさん mailto:sage [2007/07/04(水) 23:08:01 ] インデックス用の配列mallocしてqsortが一番楽だろ
694 名前:デフォルトの名無しさん mailto:sage [2007/07/05(木) 09:38:27 ] >>672 それどっかの入門書に載ってたぞ
695 名前:デフォルトの名無しさん [2007/07/05(木) 15:50:14 ] CからつかえるフリーのXMLライブラリないですか?
696 名前:デフォルトの名無しさん [2007/07/05(木) 15:53:13 ] 何方か標準関数のプログラムの作り方教えてください
697 名前:デフォルトの名無しさん mailto:sage [2007/07/05(木) 15:54:07 ] 日本語でもう一度
698 名前:デフォルトの名無しさん [2007/07/05(木) 15:55:33 ] >>672 見たらmain内で関数宣言してるけど、これはなに? そういう手法があるの?関数の内容よりそっちに目がいった。 こんなことしたことないけど、どうなの?
699 名前:デフォルトの名無しさん mailto:sage [2007/07/05(木) 15:58:24 ] そりゃキミが知らないだけだろ
700 名前:デフォルトの名無しさん mailto:sage [2007/07/05(木) 16:06:00 ] プロトタイプ宣言くらい関数内でできる。
701 名前:デフォルトの名無しさん mailto:sage [2007/07/05(木) 16:41:17 ] 次のような関数を作りました。 Vertices isMaxNoVer(Vertices R[]){ Vertices max; int i, count=0; max.num = 0; max.deg = 0; max.no = 0; count = countVer(R); for(i=0; i<count-1; i++){ if(max.no < R[i].no){ max = R[i]; } } return max; } この関数を、次の再帰関数を使って二度目に呼び出した時、 動作がおかしくなり、以下のようなおかしな値が入ります。 test expand 1, 8 -1073747304 134516287 更にその後2度目のtest expand 3に入る前に セグメントエラーを起こして止まってしまいます。 これだけの情報でわかって頂けるかわかりませんが、 誰か助けてください。
702 名前:701 mailto:sage [2007/07/05(木) 16:42:43 ] void expand(Vertices R[]){ Vertices p, buf[N], Rp[N]; while(countVer(R) != 0){ p = isMaxNoVer(R); printf("test expand 1, %d %d %d\n", p.num, p.deg, p.no); if((countVer(Q) + p.no) > countVer(Qmax)){ syokikaVer(buf); mataha(Q, p); printf("test expand 2\n"); syokikaVer(buf); ganma(buf, p.no, G); printf("test expand 3\n"); syokikaVer(Rp); katu(Rp, buf, R); printf("test expand 4\n");
703 名前:701 mailto:sage [2007/07/05(木) 16:44:38 ] if(countVer(Rp) != 0){ numberSort(Rp); expand(Rp); } else if(countVer(Q) > countVer(Qmax)){ copyVer(Qmax, Q); } hiku(p, Q); } else return; hiku(p, R); } return; } QやQmax、Gはグローバル変数です。
704 名前:デフォルトの名無しさん mailto:sage [2007/07/05(木) 18:03:30 ] >>701 それだけだと分からんなぁ〜 katu(Rp, buf, R); numberSort(Rp); このへんの関数に問題ありそうだけど
705 名前:デフォルトの名無しさん mailto:sage [2007/07/05(木) 18:29:52 ] 質問です。 今、以下のような関数と構造体を作ったのですが、 typedef struct { int Length, Maximam, ValueSize; void* Array; } ArrayList; char* GetValue(ArrayList* list, int index) { char* data = (char*)list->Array, item = malloc(list->ValueSize); int i = 0; unsigned int p = index * list->ValueSize; if(list->Length > index && item != NULL) { for(; i < list->ValueSize; i++) { item[i] = data[p + i]; } return item; } else { return NULL; } } 以下続く
706 名前:デフォルトの名無しさん mailto:sage [2007/07/05(木) 18:33:11 ] item
707 名前:705 mailto:sage [2007/07/05(木) 18:33:11 ] void AddRange(ArrayList* list, const void* values, int length) { char* data = (char*)list->Array, item = (char*)values; unsigned int i = 0, itemlength = length * list->Maximam, index = list->Length * list->ValueSize; if(list->Length + length >= list->Maximam) { list->Maximam += length * 2; list->Array = realloc(list->Array, list->ValueSize * list->Maximam); } for(; i < itemlength; i++) { data[index + i] = item[i]; } list->Length += length; } void main (void) { ArrayList list = { 0, 4, sizeof(int), malloc(sizeof(int) * 4) }; int i = 0; int s[10] = { 0, 1, 2, 3, 4, 5, 6 ,7 ,8 ,9 }; AddRange(&list, s, 10); AddRange(&list, s, 10); for(; i < list.Length; i++) { printf("%d\n", *((int*)GetValue(&list, i))); } } どうしてもGetValueのchar* itemの領域が確保できないんです。 他にも、listのArrayをいじってもヒープが壊れてますとか言われるのですが… なにかやってはいけないことでもやってしまっているのでしょうか? 行数圧縮しているため読みにくいとは思いますが、よろしくお願いします。
708 名前:705 mailto:sage [2007/07/05(木) 18:34:36 ] ちなみに、元のソースではすべて int i = 0; int j = 0; のように宣言しています。
709 名前:デフォルトの名無しさん mailto:sage [2007/07/05(木) 18:38:04 ] itemはchar型変数として宣言されてる *itemで宣言しなきゃダメだろ
710 名前:デフォルトの名無しさん mailto:sage [2007/07/05(木) 18:41:16 ] >>709 元ソースでは char*になってたんですが… 削りすぎた orz
711 名前:705 mailto:sage [2007/07/05(木) 19:07:04 ] いろいろ試してみたのですが、 AddRange(&list, s, 10);を 連続でなくとも2回使用するとGetValueのitemの中がNULLに、 3回目からはAddRange(&list, s, 10);で行われるreallocで ヒープが壊れているというエラーが出てくるようです。 何が悪いんだろ orz
712 名前:デフォルトの名無しさん mailto:sage [2007/07/05(木) 19:09:20 ] AddRangeの2回目でヒープ壊してる itemlengthとreallocのサイズが乖離してる
713 名前:デフォルトの名無しさん mailto:sage [2007/07/05(木) 19:17:30 ] つーかGetValue()って範囲チェック除けば char *GetValue(ArrayList list, int index) { return (char*)list.Array + index * list.ValueSize; } これで十分じゃね?
714 名前:デフォルトの名無しさん mailto:sage [2007/07/05(木) 19:24:04 ] itemlength = length * list->Maximam → itemlength = length * list->ValueSize でいけるかな?
715 名前:デフォルトの名無しさん mailto:sage [2007/07/05(木) 19:29:48 ] >>712 itemlength = length * list->Maximam のMaximamが原因でした。ValueSizeにするはずだったのに… 1回の使用だけだとエラーが出なかったので問題ないと思い込んで 気づかなかった orz >>713 そんなやり方もあったんですか… void*だとサイズわかんねぇよって怒られるのでchar*にして コピーする方法しか知りませんでした。 >>714 全くその通りです。 まともにコードかけるようになるのは時間がかかりそうだ orz ありがとうございました!
716 名前:デフォルトの名無しさん mailto:sage [2007/07/05(木) 19:34:00 ] 素直に型を限定すればいいのに
717 名前:デフォルトの名無しさん mailto:sage [2007/07/05(木) 21:55:47 ] int型の数字を文字列に変換するのってどうやるん? 具体的に言うと int n = 34; char* nStr = intToStr( n ); /* nStr = "34" */ という風にしたいのだけれど。
718 名前:デフォルトの名無しさん mailto:sage [2007/07/05(木) 22:03:14 ] char *buf; int n=34; buf=メモリ確保 ssprintf(buf,"%d",n);
719 名前:デフォルトの名無しさん mailto:sage [2007/07/05(木) 22:05:12 ] >>717 sが一個多かった sprintf
720 名前:デフォルトの名無しさん mailto:sage [2007/07/05(木) 22:35:49 ] >>718 サンキュ! inline char* int2str( int n ) { char *buffer; buffer = malloc( sizeof( char ) ); sprintf( buffer, "%d", n ); return buffer != NULL ? buffer: "FAULT!!"; } 一応こういう感じで。
721 名前:デフォルトの名無しさん mailto:sage [2007/07/05(木) 22:43:17 ] >>720 >buffer = malloc( sizeof( char ) ); 1バイトしか確保できないよ '\0'しか格納できない もう少し多めに確保して >return buffer != NULL ? buffer:"FAULT!!"; buffer の確保が失敗した場合 sprintf( buffer, "%d", n ); でエラーが出る buffer = malloc( sizeof( char ) ); if(buffer){ sprintf( buffer, "%d", n ); return buffer; } else { return "FAULT!!"; } のほうがいい気がする
722 名前:デフォルトの名無しさん mailto:sage [2007/07/05(木) 22:57:49 ] >>721 せっかくならmallocも直してやれよw 11桁くらい確保すれば十分の気がする
723 名前:デフォルトの名無しさん mailto:sage [2007/07/05(木) 23:16:28 ] >>720 んじゃ buffer = malloc(sizeof( char ) *12); または buffer = malloc(12); >>722 符号付の場合、'\0'いれると12文字になる
724 名前:デフォルトの名無しさん [2007/07/05(木) 23:40:25 ] 最強の関数教えてください
725 名前:デフォルトの名無しさん mailto:sage [2007/07/05(木) 23:42:07 ] VIPでやれ
726 名前:デフォルトの名無しさん mailto:sage [2007/07/05(木) 23:42:25 ] どう考えても main だろ。
727 名前:デフォルトの名無しさん mailto:sage [2007/07/05(木) 23:43:51 ] >>724 abort
728 名前:デフォルトの名無しさん mailto:sage [2007/07/05(木) 23:49:33 ] exit
729 名前:デフォルトの名無しさん mailto:sage [2007/07/06(金) 01:35:39 ] buffer = (char*)malloc(sizeof( char ) *12); ↑これは?
730 名前:デフォルトの名無しさん mailto:sage [2007/07/06(金) 01:36:56 ] bufferの型にあわせてあるんだろ。 C++じゃ必須の書き方だがCじゃいらん。
731 名前:デフォルトの名無しさん mailto:sage [2007/07/06(金) 01:47:14 ] CとかC++の問題じゃねーだろ・・・知ったかの初心者がレスしてんのか、ここは? キャスト演算子とか知ってなさそうだな・・・平気で型の違う変数をキャスト演算子なしで 代入しちゃうようなヘボプログラマーかw
732 名前:デフォルトの名無しさん [2007/07/06(金) 01:48:12 ] 配列の添え字に変数を指定することは可能でしょうか?
733 名前:デフォルトの名無しさん mailto:sage [2007/07/06(金) 01:54:01 ] コンパイラが自動的にやってくれるのを当てにして失敗するプログラマー(プ
734 名前:デフォルトの名無しさん mailto:sage [2007/07/06(金) 01:56:50 ] >>730 (・∀・)ニヤニヤ > bufferの型にあわせてあるんだろ。 > C++じゃ必須の書き方だがCじゃいらん。
735 名前:732 mailto:sage [2007/07/06(金) 01:57:25 ] 自己解決しました 可能っぽいですね
736 名前:デフォルトの名無しさん mailto:sage [2007/07/06(金) 02:01:26 ] >>730 (・∀・)y-~~~ ヤニヤニ
737 名前:デフォルトの名無しさん mailto:sage [2007/07/06(金) 02:01:26 ] C だと void* から別のポインタ型への変換は暗黙にできるだろ・・・常識的に考えて。
738 名前:デフォルトの名無しさん mailto:sage [2007/07/06(金) 02:04:22 ] void*が無かった頃のCならmallocはchar*を返したから キャストしないと警告もんだとか言い出してみる。
739 名前:デフォルトの名無しさん mailto:sage [2007/07/06(金) 02:04:47 ] >>730 (・∀・)ニヤニヤ ヘボプログラマー必死だな
740 名前:デフォルトの名無しさん mailto:sage [2007/07/06(金) 02:08:16 ] >>738 malloc で気を使っても、 どっかで void* 使ってたらそれだけでアウツだけどな。 その環境なら。
741 名前:732 ◆L/nntMgEC6 [2007/07/06(金) 02:11:36 ] >>735 可能なんですか?
742 名前:デフォルトの名無しさん mailto:sage [2007/07/06(金) 02:12:01 ] >>730 (・∀・)ニヤニヤ あるんだろ。Cじゃいらん。
743 名前:デフォルトの名無しさん mailto:sage [2007/07/06(金) 02:24:21 ] >>738 (・∀・)ニヤニヤ > void*が無かった頃のCなら
744 名前:デフォルトの名無しさん mailto:sage [2007/07/06(金) 02:27:29 ] >>732 char a[10]; int i; でa[i]ってことですか? もちろん可能。 添え字は整数の値をとる式ならなんでもおkだぞ。
745 名前:デフォルトの名無しさん mailto:sage [2007/07/06(金) 02:29:22 ] >>744 (・∀・)ニヤニヤ > 添え字は整数の値をとる式ならなんでもおkだぞ。 (VIPPERのAA略)<常識的に考えて配列の要素番号の範囲内だろ
746 名前:デフォルトの名無しさん mailto:sage [2007/07/06(金) 02:33:49 ] アホが常駐しとるな
747 名前:744 mailto:sage [2007/07/06(金) 02:34:12 ] >>745 おまい!大丈夫か! >>732 は文法的に許されるかと質問しているんだろ!
748 名前:デフォルトの名無しさん mailto:sage [2007/07/06(金) 02:34:50 ] よい子がC言語の勉強実況してるからみてやろうぜ WMPのファイル→URLを開く→matoinu.orz.hm:30000 をコピペ→OK 実況スレ 何でも実況V なんでも実況フリーダム live24.2ch.net/test/read.cgi/livevenus/1183654888/ 面白いぜwwwwww
749 名前:デフォルトの名無しさん mailto:sage [2007/07/06(金) 02:38:25 ] 範囲外まで指定できちゃうのがエラーの温床になってるしな。
750 名前:デフォルトの名無しさん mailto:sage [2007/07/06(金) 02:40:29 ] とりあえず (・∀・)ニヤニヤ を NG にした。
751 名前:732 ◆L/nntMgEC6 [2007/07/06(金) 02:42:37 ] >>744 さん 回答有難う御座います。 int i; char a[]="abc"; i=strlen(a); char b[i]; のような感じで使いたいのですが、可能でしょうか?
752 名前:デフォルトの名無しさん mailto:sage [2007/07/06(金) 02:44:57 ] >>747 (・∀・)ニヤニヤ 適切と不適切がわからないプログラマーワロスw キャストは不要でつか〜〜〜?
753 名前:デフォルトの名無しさん mailto:sage [2007/07/06(金) 02:46:39 ] 746 名前:デフォルトの名無しさん 投稿日:2007/07/06(金) 02:33:49 アホが常駐しとるな (VIPPERのAA略) < 常識的に考えて知ったかぶって初心者にありもしないことを言う方がおかしいだろ どう考えて配列を適切に参照できる、要素番号の範囲内の値をとる式ならって話ならわかるけどw
754 名前:デフォルトの名無しさん mailto:sage [2007/07/06(金) 02:48:03 ] とりあえず (VIPPERのAA略) を NG にした
755 名前:デフォルトの名無しさん mailto:sage [2007/07/06(金) 02:49:35 ] >>744 (^∀^) ニタニタ > 添え字は整数の値をとる式ならなんでもおkだぞ。 整数の値をとる式ならなんでも 整数の値をとる式ならなんでも こやつは要素数と参照できる範囲外の値をとってもおkなんだぞぉーーー!
756 名前:デフォルトの名無しさん mailto:sage [2007/07/06(金) 02:50:28 ] >>744 m9(^д^)9m プププ、(ダブル)プギャー
757 名前:デフォルトの名無しさん mailto:sage [2007/07/06(金) 02:53:33 ] 文体変えてAA使っても、いつものアホだってことはバレバレ
758 名前:デフォルトの名無しさん mailto:sage [2007/07/06(金) 02:53:52 ] >>754 all right, I will use AA that's not for short.
759 名前:デフォルトの名無しさん mailto:sage [2007/07/06(金) 02:54:34 ] >>757 > いつものアホ アホとか言っちゃってるよぉ〜〜〜、お前がアホのくせして初心者に大嘘教えているくせにw お前みたいな奴にアホ言われたくね〜〜なぁ。俺は間違ってねーし。お前は不適切。
760 名前:デフォルトの名無しさん mailto:sage [2007/07/06(金) 02:56:01 ] VIPPER の AA 略 < 常識的に考えて、文法的におkってことを持ち出して 不十分な(というか間違っている)説明の言い訳をするかぁ? んじゃお前は a[10] の配列の10番目を参照するときは a[10] とでもやってろよ
761 名前:デフォルトの名無しさん mailto:sage [2007/07/06(金) 02:56:21 ] >>751 それはダメ。 配列変数の宣言文には変数は使えない。 それをするなら nt i; char a[]="abc"; char *b; i=strlen(a); b=(char*)malloc(sizeof(char)*i);
762 名前:デフォルトの名無しさん mailto:sage [2007/07/06(金) 02:56:51 ] >>751 int i; char a[]="abc"; char *b; i=strlen(a); b = (char*)malloc(sizeof(char)*i); free(b); スレの流れからすればこんな感じ bにaと同じ長さの文字列を入れるなら+1しないと駄目だけど。
763 名前:732 ◆L/nntMgEC6 [2007/07/06(金) 02:58:25 ] >>761 さん 有難う御座います。おかげで疑問が解けました。
764 名前:デフォルトの名無しさん mailto:sage [2007/07/06(金) 03:00:43 ] | ( ●)(●) いい加減な説明をしていることを指摘されて . | (__人__) 指摘した相手をアホとか言う方がアホだろ | ` ⌒´ノ 常識的に考えて・・・
765 名前:デフォルトの名無しさん mailto:sage [2007/07/06(金) 03:01:22 ] >>761 C99ならできるというのは禁句かい?
766 名前:デフォルトの名無しさん mailto:sage [2007/07/06(金) 03:03:23 ] 回答者が書く補足としては、ありだとおもう。 突っ込みとしては、ちょっと弱い。
767 名前:デフォルトの名無しさん mailto:sage [2007/07/06(金) 03:04:15 ] / ノ ⌒ \ 文法的にも間違っていることを言う奴が | (●)(●) | 間違っていない奴にアホって言うアホだろ . | (__人__) | 常識的に考えて。ちゃんとキャストしろよ
768 名前:デフォルトの名無しさん mailto:sage [2007/07/06(金) 03:05:15 ] 常考常考うるせーよ 貶し合ってないで意味のある話をしろ
769 名前:デフォルトの名無しさん mailto:sage [2007/07/06(金) 03:08:42 ] >>763 VBだとそれができるんだよね。 それはVBなどのインタープリター言語は実行時に変数宣言文も実行文もおなじように上から処理してゆくから。 Cのようなコンパイラ言語はコンパイル時に変数宣言文を処理してゆく。 だからコンパイル時に配列変数のサイズがわかっていないと処理ができない。 JavaもVBと同じだと思う。
770 名前:デフォルトの名無しさん mailto:sage [2007/07/06(金) 03:09:22 ] ここは初心者が鼻息を荒くして入門書読みながらレスしてるのが多くて注意が必要
771 名前:デフォルトの名無しさん mailto:sage [2007/07/06(金) 03:09:45 ] >>765 C99ならできるの?
772 名前:デフォルトの名無しさん mailto:sage [2007/07/06(金) 03:10:54 ] | ( ●)(●) お前みたいな奴は、たとえドラマの役者として . | (__人__) 起用されても、まともなキャスティングもされずに | ` ⌒´ノ 脇役かエキストラに決まってんじゃん>アホ言うたアホ
773 名前:デフォルトの名無しさん mailto:sage [2007/07/06(金) 03:12:15 ] AA厨も早く寝ろ 今日はお開きだ
774 名前:デフォルトの名無しさん mailto:sage [2007/07/06(金) 03:15:42 ] >>773 (・∀・)キャスキャス
775 名前:デフォルトの名無しさん mailto:sage [2007/07/06(金) 03:17:05 ] いまさらやらない夫のAA貼り付けて喜んでんのかよw
776 名前:デフォルトの名無しさん mailto:sage [2007/07/06(金) 03:27:41 ] >>771 余裕
777 名前:デフォルトの名無しさん mailto:sage [2007/07/06(金) 03:27:46 ] いまさら やらない か?っつか、いまさらキャストも適切に出来ない奴が 初心者相手にいい加減な説明、笑えねぇ〜〜〜〜〜。お前、指導者に向いてねーよ。
778 名前:デフォルトの名無しさん mailto:sage [2007/07/06(金) 04:13:51 ] キャストすると型によってアドレスが変わるプロセッサの話をすると、へんなのを召喚しちゃいますか?
779 名前:デフォルトの名無しさん mailto:sage [2007/07/06(金) 04:41:39 ] それがどうかしたのか? printf に渡すときの話とはわけが違うぞ?
780 名前:デフォルトの名無しさん mailto:sage [2007/07/06(金) 06:14:06 ] 1バイト文字と2バイト文字が混在してる文字列を ループ使って1バイトずつputchar()で画面に表示しても ちゃんとどちらも表示されるのは、シェルやプロンプトの方で 何バイト文字か確認して1バイト文字じゃない時は 一度バッファに溜める、とかしてるからですか?
781 名前:デフォルトの名無しさん mailto:sage [2007/07/06(金) 06:21:01 ] ものによるとしか
782 名前:780 mailto:sage [2007/07/06(金) 06:49:14 ] >>781 例えばどうやって処理してるんですか?
783 名前:デフォルトの名無しさん mailto:sage [2007/07/06(金) 07:35:00 ] >>780 いいえ、シェルプログラムはそんなことはしません。
784 名前:780 mailto:sage [2007/07/06(金) 07:52:43 ] >>783 あ、コンパイラがやってくれてるんですか?
785 名前:デフォルトの名無しさん mailto:sage [2007/07/06(金) 08:09:19 ] >>784 いいえ、勿論コンパイラの知ったこっちゃありません。 もしかしたら、画面表示はシェルプログラムがやっていると思っているんですか? 例えば他のPCにリモートログインしたときには相手先のシェルプログラムが動くわけですが、 そのシェルプログラムが自分の使っているPCの画面を直接アクセスするなんて夢でも見ているんですか?
786 名前:デフォルトの名無しさん mailto:sage [2007/07/06(金) 08:23:14 ] >>780 マルチバイト文字などに関係なく、標準入出力は 行単位バッファリングされていることが多い。 バッファリングなしにしても、まあ正しいマルチバイト文字列になった時点で 正しく表示されると仮定していいと思う。
787 名前:780 mailto:sage [2007/07/06(金) 08:24:22 ] >>785 ということはOSの画面表示を担当するプログラムが putchar()で2バイト文字の一部を出力しようとした時に 2バイト文字の一部だと判断し表示を一時中断して 次に送られてくるputcharの引数と組み合わせて それに対応する2バイト文字を出力していているんでしょうか?
788 名前:デフォルトの名無しさん mailto:sage [2007/07/06(金) 08:26:31 ] 2バイト文字で、1バイト目単体で文字としてなりたっているようなのってなんかあったっけ?
789 名前:デフォルトの名無しさん mailto:sage [2007/07/06(金) 08:28:46 ] >>788 iso-2022-jpの1バイト目はASCII文字と同じコード。
790 名前:780 mailto:sage [2007/07/06(金) 08:30:47 ] >>786 行単位でバッファリングするんですね それで予め2バイト文字があるかないか調べるわけですか、なるほど
791 名前:デフォルトの名無しさん mailto:sage [2007/07/06(金) 08:39:37 ] >>789 Shift_JISしか考えてなかった。参考になった ありがとう
792 名前:デフォルトの名無しさん mailto:sage [2007/07/06(金) 08:41:44 ] 文字コードの体系もしっかり管理しときゃ良い。
793 名前:デフォルトの名無しさん mailto:sage [2007/07/06(金) 09:11:21 ] 型で区別するんじゃない? char型ならその分のデータを受け取るまで待つ
794 名前:デフォルトの名無しさん mailto:sage [2007/07/06(金) 09:18:02 ] ASCIIコード体系でなければ左へ受け流すぅ〜
795 名前:デフォルトの名無しさん mailto:sage [2007/07/06(金) 11:50:43 ] 1: 3.2 2.6 3.4 2.1 5.2 3.4 5.2 2.4 4.2 4.1 0.2 4.2 5.3 2: 3.2 2.4 3.4 2.2 5.2 3.4 5.2 2.4 4.2 4.3 0.2 4.2 5.3 3: 3.1 2.6 3.4 2.1 6.2 3.4 5.2 2.4 4.2 4.0 0.2 4.2 5.3 っていうデータがあるとして 10個目(つまり4.3 4.1 ,4.0)だけを抜き出すプログラムをつくれといわれると float型でやりますか?char型でやりますか?
796 名前:デフォルトの名無しさん mailto:sage [2007/07/06(金) 12:26:17 ] 「作れ」っつった本人に仕様を確認する。
797 名前:デフォルトの名無しさん mailto:sage [2007/07/06(金) 13:03:17 ] とりあえず float は使わない。 使うなら double 。
798 名前:デフォルトの名無しさん mailto:sage [2007/07/06(金) 13:51:36 ] つーか、計算もしないし区切りもはっきりしてるなら 文字列のままで通しちゃったほうがいいべ
799 名前:デフォルトの名無しさん mailto:sage [2007/07/06(金) 14:01:23 ] >>793 それはない。そんなことしたら、ファイルにリダイレクトできない。 >>791 iso-2022-jpの場合、KanjiInが来た後は2バイト文字、そうでなければAsciiという分け方。 だから2バイト文字の後にKanjiOutが来ないと文字化けする。 >>790 バッファリングはするかもしれないが、出力の判断とは直接的には無縁。 でなければエスケープシーケンスでの制御ができない。
800 名前:デフォルトの名無しさん mailto:sage [2007/07/06(金) 15:41:47 ] >>799 >KanjiInが来た後は >KanjiOutが来ないと そんなコード/シーケンスはありません。
801 名前:デフォルトの名無しさん [2007/07/06(金) 18:09:25 ] Windows2000で作られたソフトはWindowsXPではうまく動作しないことが あるのですか。LSI C-86を使ってC言語を学ぶという趣旨の本を5年前に 買ったのを今になって勉強しようとしてインストールしたという次第です。 最初のコマンドプロンプトがC:\>になるはずのところ、C:Documents and Settings□□>となりエラーと表示されました。□□は、再起動時に アカウント指定を要求され、自分の名前を入れたものです。 別な場所へインストールすればよいのですか。よろしくお願いします。
802 名前:デフォルトの名無しさん mailto:sage [2007/07/06(金) 18:15:05 ] >>801 LSI-C86は遺物なので、特殊性を理解できていないなら使ってはいけない。 MSのVisualStudioでもgccでも、無料で手に入るほかのコンパイラを使うことをお勧めする。
803 名前:デフォルトの名無しさん mailto:sage [2007/07/06(金) 18:18:59 ] まあコマンドプロンプトをC:\>にしたいなら、cd \ でいいけどな。 本と同じになるだけで、役には立たないだろうけど。
804 名前:デフォルトの名無しさん [2007/07/06(金) 18:26:59 ] >802 responseありがとうございます。早速入手しようと思います。
805 名前:デフォルトの名無しさん [2007/07/06(金) 18:43:58 ] ソーカcd¥−enterで続けられるのか。
806 名前:デフォルトの名無しさん mailto:sage [2007/07/06(金) 18:59:38 ] >>800 の意図が気になる。
807 名前:デフォルトの名無しさん mailto:sage [2007/07/06(金) 19:03:18 ] >>804 たぶん電子メールのレスと2ちゃんのレスは同じ意味を持ってると思うんだが、 だとしたら君が使ってるresponseはレスという意味とは違うぞ
808 名前:デフォルトの名無しさん mailto:sage [2007/07/06(金) 19:06:00 ] >>807 ja.wikipedia.org/wiki/%E3%83%AC%E3%82%B9
809 名前:デフォルトの名無しさん mailto:sage [2007/07/06(金) 19:37:26 ] nullponceというのを提案しまnce
810 名前:723 mailto:sage [2007/07/06(金) 19:39:17 ] >>729 忘れてた
811 名前:デフォルトの名無しさん mailto:sage [2007/07/06(金) 19:43:03 ] 英語版ウィキペには Reply. Its abbreviation followed by colon (Re:) is prepended to e-mail subject lines when answering a received message って書いてるんだよな。 まあ、スレ違いだからどうでもいいが。
812 名前:デフォルトの名無しさん [2007/07/06(金) 20:22:37 ] A)入力装置に関する記述のうち,適切なものはどれか。 1 ジョイスティックは,画面上に透明なセンサを取り付けたものであり,画面に指などを押し付けて座標を指示する。 2 タブレットは,ペンのような装置と板状の装置を組み合わせた入力機器であり,ペンのような装置を押し付けて座標を指示する。 3 ディジタイザは,人間のもつ静電気を利用して指の位置を検出するポインティングデバイスであり,操作面を指して座標を指示する。 4 トラックパッドは,球の一部分が装置の上面に出ているポインティングデバイスであり,球を指で直接回転させて,その変化量で座標を指示する。 すみません、質問なのですが今上の問題がハードウエアの組み込みの 参考書の問題がわかりませんので、教えてはいただけないでしょうか?
813 名前:デフォルトの名無しさん mailto:sage [2007/07/06(金) 20:25:09 ] >>812 2
814 名前:デフォルトの名無しさん mailto:sage [2007/07/06(金) 20:26:34 ] 1はジョイスティックの説明ではない事は明らかだから× 2は正しいと思うから○ 3は知らんから知らん 4はトラックパッドじゃなくてトラックボールの説明だから×
815 名前:デフォルトの名無しさん [2007/07/06(金) 20:29:48 ] ありがとうございました。 これで先に行けます。
816 名前:デフォルトの名無しさん [2007/07/06(金) 20:32:06 ] 制御系といえば、C言語だけど Cのすごい所って何?
817 名前:デフォルトの名無しさん mailto:sage [2007/07/06(金) 20:38:01 ] 体にぴったり張り付くスク水の用に、ハードウェアに貼り付ける所
818 名前:デフォルトの名無しさん mailto:sage [2007/07/06(金) 20:38:40 ] >>816 おまえの方がすごいと思う。
819 名前:デフォルトの名無しさん mailto:sage [2007/07/06(金) 20:38:58 ] 3はタッチセンサとか、タッチスクリーンとか言われている物のうちの1種だね
820 名前:デフォルトの名無しさん mailto:sage [2007/07/06(金) 20:41:36 ] >>812 3の説明がトラックパッドっぽいな
821 名前:デフォルトの名無しさん [2007/07/06(金) 20:42:36 ] C言語にできることは、C++にもできるって聞いたんだけど、 C++も体にぴったり張り付くスク水のように、 ハードウェアに貼りつけるの??
822 名前:デフォルトの名無しさん mailto:sage [2007/07/06(金) 20:43:22 ] Cと同じようにできる。
823 名前:デフォルトの名無しさん [2007/07/06(金) 20:44:46 ] C++もC言語と同じように最強ならば、 C++も制御系によく使われるの? それともC++はオープン系(WEB系も含む)?
824 名前:デフォルトの名無しさん [2007/07/06(金) 20:47:10 ] 質問です。年月日を入力してツェラーの公式を利用して曜日を表示するプログラム をつくりたいんですけど、BCCでコンパイルしたら公式のところでエラー 「浮動小数点の不正な使用」ってでるんですけど、どうしてだかわかりますかね? #include <stdio.h> int main(void){ int year,month,day; char youbi[7][10]={"Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"}; int i; printf("Year?"); scanf("%d",&year); printf("Month?"); scanf("%d",&month); printf("Day?"); scanf("%d",&day); i=(year + (year/4) - (year/100) + (year/400) + (2.6*month +1.6) + day)%7; printf("It's %s.",youbi[i]); return 0; }
825 名前:デフォルトの名無しさん mailto:sage [2007/07/06(金) 20:49:26 ] >>821 C++の場合スク水フェチのオジサンが自分で着る用に作ったものもあるので注意
826 名前:デフォルトの名無しさん mailto:sage [2007/07/06(金) 20:56:27 ] >>824 (2.6*month +1.6)を(int)(2.6*month +1.6)にしろ。 ここが整数でないから、%の左側全体が整数型でなくなっている。 剰余演算子は浮動小数点数を演算対象にできないので、件のエラーになる。
827 名前:デフォルトの名無しさん mailto:sage [2007/07/06(金) 20:57:13 ] >>823 Cが制御系で使われるのは「最強」だからではなく「高級アセンブラ」だから。 C++も制御系で使われるよ。C++として使われるかはともかく。 つか、最強ってなんだよ。
828 名前:デフォルトの名無しさん mailto:sage [2007/07/06(金) 20:58:38 ] >>824 剰余演算子%というオペランドは整数同士でないとダメ 演算してる行の型がごっちゃになってるから明示的にキャストしたり読みやすくすべき 基本的にコメント文とかで説明もなしに実数を整数に叩き込んだりしちゃだめ
829 名前:デフォルトの名無しさん mailto:sage [2007/07/06(金) 21:19:14 ] なるほど。できました、ありがとうございます。
830 名前:デフォルトの名無しさん [2007/07/06(金) 21:30:26 ] スレ違いかもだけど、ここの人達他のスレより頼りになりそうなので。。。 基本情報の午後問をCで受かりたいのですが、なんの本を読めばいいですか? 当方、C言語はよくわかりません。COBOLは少しできます。 ただCで受けたいのです。
831 名前:デフォルトの名無しさん mailto:sage [2007/07/06(金) 21:32:10 ] >>830 試験は慣れたものでやるべき
832 名前:デフォルトの名無しさん mailto:sage [2007/07/06(金) 21:58:20 ] >>830 アセンブラがオススメ 例年一番簡単
833 名前:デフォルトの名無しさん mailto:sage [2007/07/06(金) 21:59:06 ] C言語ってeclipceかbolandか、 それともvisual basic かどれでやればいいですか?
834 名前:デフォルトの名無しさん mailto:sage [2007/07/06(金) 22:04:13 ] その質問おもしろい?
835 名前:デフォルトの名無しさん mailto:sage [2007/07/06(金) 22:10:25 ] visual studioだっけ?
836 名前:デフォルトの名無しさん mailto:sage [2007/07/06(金) 22:12:46 ] >>833 Linuxでもできるよ。
837 名前:デフォルトの名無しさん mailto:sage [2007/07/06(金) 22:14:19 ] 整数型配列は int iarray[10]; memset(iarray, 0, sizeof(array)); ですべて0で初期化できると知ったのですが、 実数型配列を double darray[10]; memset(darray, 0.0, sizeof(array)); のように初期化してもかまいませんか? つまり実数型配列の全ての要素を0.0にしたいのです
838 名前:デフォルトの名無しさん mailto:sage [2007/07/06(金) 22:16:31 ] >>837 いいんじゃね? DirectXとか、そういう方法で、実数やらポインタやらバリバリクリアしてたな。 移植性は無くなる。
839 名前:デフォルトの名無しさん mailto:sage [2007/07/06(金) 22:17:55 ] > memset(darray, 0.0, sizeof(array)); あ、これは、警告かエラーになるな。 sizeof のところはミスだよね?
840 名前:デフォルトの名無しさん mailto:sage [2007/07/06(金) 22:19:54 ] >>837 ANSI/ISO Cへの移植性を望むなら避けるべき。 浮動小数点数がIEEE 754に則っていることを仮定してよいなら構わない。
841 名前:デフォルトの名無しさん mailto:sage [2007/07/06(金) 22:21:17 ] >>833 ほとんどにアルゴリズムの問題 ポケコンのCインタプリタでおk
842 名前:デフォルトの名無しさん mailto:sage [2007/07/06(金) 22:26:29 ] >>839 あと、0.0 は 0 だな。
843 名前:デフォルトの名無しさん mailto:sage [2007/07/06(金) 22:27:49 ] >>839 すみません sizeof(darray) です あとmanページでmenset関数を調べてみると #include <string.h> void *memset(void *buf, int ch, size_t n); となっていたので int ch に0.0と渡してもだめなんですね ということは関数の仕様上は memset(darray, 0, sizeof(darray)); と書くのが正しくて、 しかもCコンパイラの浮動小数点がIEEE754前提での使い方なので 結局は配列の要素数の分だけループで回して初期化するのが 一番いちゃもん言われにくいということでよろしいでしょうか? ありがとうございました
844 名前:デフォルトの名無しさん mailto:sage [2007/07/06(金) 22:29:23 ] エクセス64で 0 ってどうなるの?