- 1 名前:デフォルトの名無しさん mailto:sage [2008/09/15(月) 11:40:35 ]
- C言語の入門者向け解説スレです。
教えて欲しいのではなく宿題を丸投げしたいだけなら ↓宿題スレ↓へ行ってください。 C/C++の宿題を片付けます 115代目 pc11.2ch.net/test/read.cgi/tech/1217741118/ ・C++言語はスレ違いです。 ・分からない事をなるべく詳しく書いて下さい。 ・ソースコードを晒すと答えやすくなるかもしれません。 # 抜粋/整形厳禁、コンパイラに渡したソースをそのまま貼ること # サイズが大きい場合は宿題スレのアップローダ等を利用してください ・開発環境や動作環境も晒すと答えが早いかもしれません。 ・質問者は最初にその質問をした時のレス番号を名前欄に書いて下さい。 前スレ C言語なら俺に聞け(入門篇) Part 35 pc11.2ch.net/test/read.cgi/tech/1219761846/ 過去スレ makimo.to:8000/cgi-bin/search/search.cgi?q=%82b%8C%BE%8C%EA%82%C8%82%E7%89%B4%82%C9%95%B7%82%AF&andor=AND&sf=0&H=&view=table&D=tech&shw=5000
- 511 名前:デフォルトの名無しさん [2008/10/01(水) 19:35:55 ]
- なぜ bsearch を使わん?
- 512 名前:デフォルトの名無しさん [2008/10/01(水) 19:38:50 ]
- >>511
バイナリサーチを理解するため。
- 513 名前:デフォルトの名無しさん [2008/10/01(水) 20:02:46 ]
- >>509
プログラムが正しいかどうか、他人に聞くしかテスト技法を知らんのか テスト項目の導き方はいろいろある それが知りたければ便所の落書きより有料情報をあたったほうがいい
- 514 名前:デフォルトの名無しさん [2008/10/01(水) 20:15:04 ]
- >>513
分かった。
- 515 名前:デフォルトの名無しさん [2008/10/01(水) 20:34:11 ]
- floatのエンディアン変換が分からないのですが、教えてください。
typedef union { float f; unsigned char b[4]; } Endian32; float ConvertF32( void *inData ) { EndianF32 val; val.b[0] = ((Endian32 *)inData)->b[3]; val.b[1] = ((Endian32 *)inData)->b[2]; val.b[2] = ((Endian32 *)inData)->b[1]; val.b[3] = ((Endian32 *)inData)->b[0]; return val.f; } void test( float inVal ) { float ret = ConvertF32( &inVal ); fwrite( &ret, sizeof(float), 1, fp ); } こんな感じでやっています。 1.0を送ると、int型の1が何故か入ってしまいます。
- 516 名前:515続き [2008/10/01(水) 20:34:40 ]
- リトルエンディアンだとこうなっているので、
0011 1111 1000 0000 0000 0000 0000 0000 ビッグエンディアンにすればこうなるはずなんですが、 0000 0000 0000 0000 1000 0000 0011 1111 なぜか 0000 0000 0000 0000 0000 0000 0000 0001 こうなりますw 同じようなやり方で、intなど整数型は問題なく出来ています。 どこが間違っているんでしょうか?><
- 517 名前:デフォルトの名無しさん mailto:sage [2008/10/01(水) 20:48:33 ]
- ループ変数に対して
int main(void){ ... { int i, j; for(i...) for(j...) } ... { int i; for(i...) } ... return 0; } 見たいな感じでよく書くんだけど、これは機械のほうからすると無駄が多い処理なんでしょうか?
- 518 名前:デフォルトの名無しさん mailto:sage [2008/10/01(水) 20:57:00 ]
- >515
そのシステムのエンディアンではない値をfloatとして返すのが間違い。 代入した直後に正規化されたりしてややこしいことになる。
- 519 名前:デフォルトの名無しさん mailto:sage [2008/10/01(水) 21:13:07 ]
- >>515
代入というのは単にビット列をコピーすることではない 正しい内部表現を持たない値を実数として受け渡そうとしたら 場合によっては例外が送出されてプログラムが停まることもある >>517 コンパイラの最適化次第
- 520 名前:デフォルトの名無しさん mailto:sage [2008/10/01(水) 21:16:41 ]
- 型のサイズを気にするのはコンパイルするまででおk?
- 521 名前:デフォルトの名無しさん mailto:sage [2008/10/01(水) 21:23:41 ]
- 意味不明
- 522 名前:デフォルトの名無しさん mailto:sage [2008/10/01(水) 21:40:26 ]
- >>515
void test( float inVal ) { EndianF32 ret = ConvertF32( &inVal ); fwrite( &ret, sizeof(float), 1, fp ); } とやれば、希望する結果が出るのではなかろうか。
- 523 名前:デフォルトの名無しさん mailto:sage [2008/10/01(水) 21:54:51 ]
- >>520
コンパイルしてから何かを気にしたとして、それでどうするつもりだ
- 524 名前:デフォルトの名無しさん [2008/10/02(木) 00:57:10 ]
- いざ、リンクしてみたら、コンパイル済みのオブジェクトファイルが
おかしな変数宣言しすぎてメモリ不足になるとか気にしてるのかな?
- 525 名前:デフォルトの名無しさん [2008/10/02(木) 01:02:05 ]
- そういう目に遭ったことがないのか? うらやましい
- 526 名前:デフォルトの名無しさん [2008/10/02(木) 01:05:07 ]
- メモリ不足解消するのなら、標準関数は変数へいったん代入するとだいぶ変わるらすい。
- 527 名前:デフォルトの名無しさん [2008/10/02(木) 01:17:56 ]
- int a = printf;
a("imi wakaran");
- 528 名前:デフォルトの名無しさん mailto:sage [2008/10/02(木) 01:32:04 ]
- int(*a)(const char*, ...) = printf;
a("naniga kawarun daro");
- 529 名前:デフォルトの名無しさん mailto:sage [2008/10/02(木) 01:34:13 ]
- >>527-528
え!そういう意味の代入なの?
- 530 名前:デフォルトの名無しさん [2008/10/02(木) 02:27:15 ]
- void_No4様がきましたよ。
俺は天才、そしてIQは400↑、すげーだろ
- 531 名前:デフォルトの名無しさん mailto:sage [2008/10/02(木) 03:13:57 ]
- すごいね
俺の半分もあるじゃん
- 532 名前:デフォルトの名無しさん mailto:sage [2008/10/02(木) 03:35:21 ]
- またメンサか
- 533 名前:デフォルトの名無しさん mailto:sage [2008/10/02(木) 11:21:28 ]
- >>515
エンディアン云々以前に、ポインタを学んだほうが。 >val.b[0] = ((Endian32 *)inData)->b[3]; inData が指してるのは float (多分4バイトしかない) なわけだが。
- 534 名前:デフォルトの名無しさん mailto:sage [2008/10/02(木) 13:05:06 ]
- >>533
union
- 535 名前:デフォルトの名無しさん [2008/10/02(木) 13:43:09 ]
- つmemrev
- 536 名前:515 mailto:sage [2008/10/02(木) 13:54:06 ]
- >>518>>519>>522
ありがとうございます。たいへんよく分かりました。 >>522さんのやり方で上手く行きましたー! >>533 共用体を使うと、そういうことが出来ちゃうんです。
- 537 名前:デフォルトの名無しさん mailto:sage [2008/10/02(木) 17:12:00 ]
- うにおんっていまいちクールなつかいかたがわからないよね
- 538 名前:デフォルトの名無しさん mailto:sage [2008/10/02(木) 17:13:16 ]
- regs
- 539 名前:デフォルトの名無しさん [2008/10/02(木) 17:17:48 ]
- 企業秘密です
- 540 名前:デフォルトの名無しさん mailto:sage [2008/10/02(木) 18:04:14 ]
- >>537
一つの領域を複数の型として使えることが共用体の意味だからそのように使えばいい 具体的にはサイズが同じ複数の型からなる配列などがある intとfloatが不定間隔で現れるようなフォーマットのデータを扱うときに便利
- 541 名前:デフォルトの名無しさん mailto:sage [2008/10/02(木) 18:09:50 ]
- でもそれって値を取り出すときにintなのかfloatなのかわからなくない?
- 542 名前:デフォルトの名無しさん mailto:sage [2008/10/02(木) 18:11:37 ]
- floatにキャストしちゃえ
- 543 名前:デフォルトの名無しさん mailto:sage [2008/10/02(木) 18:23:33 ]
- >>541
そういうフォーマットは、たいてい先行するintの値によって その後いくつfloatが来るのか決まってる
- 544 名前:デフォルトの名無しさん mailto:sage [2008/10/02(木) 18:34:42 ]
- たいていじゃなくて、規則性がなかったらどうするの?
- 545 名前:デフォルトの名無しさん mailto:sage [2008/10/02(木) 18:39:36 ]
- 何も手がかりが無いのにそんなことしないわw
- 546 名前:デフォルトの名無しさん mailto:sage [2008/10/02(木) 18:41:05 ]
- >>544
規則性がなかったら無理 そうじゃなくて、floatが先行してintが混ざる場合もあるという意味
- 547 名前:デフォルトの名無しさん mailto:sage [2008/10/02(木) 19:39:40 ]
- 構造体のメモリ確保をしたいのですが、
コンパイルできません。 visual C++ 2008 express editionです。 ソース struct list { int data; struct list* next; }; newcell = malloc( sizeof(struct list) );
- 548 名前:デフォルトの名無しさん mailto:sage [2008/10/02(木) 19:43:20 ]
- >>547
問題の起こるソースコードとエラーメッセージを書けよ
- 549 名前:デフォルトの名無しさん mailto:sage [2008/10/02(木) 21:15:01 ]
- >>548すいません
ここのソースコンパイルしようとしたのですが ttp://www.geocities.jp/ky_webid/algorithm/010.html 1>z:\users\phenix1gou\documents\visual studio 2008\ projects\list\list\source.cpp(77) : error C2440: '=' : 'void *' から 'LIST *' に変換できません。 って出ます。
- 550 名前:デフォルトの名無しさん mailto:sage [2008/10/02(木) 21:15:58 ]
- newcell = (struct list*)malloc( sizeof(struct list) );
- 551 名前:デフォルトの名無しさん mailto:sage [2008/10/02(木) 21:17:12 ]
- キャストすれば
newcell = (LIST *)malloc( sizeof(struct list) );
- 552 名前:デフォルトの名無しさん mailto:sage [2008/10/02(木) 21:17:49 ]
- >>549
.cppにすんな.cにしれ
- 553 名前:デフォルトの名無しさん mailto:sage [2008/10/02(木) 21:18:13 ]
- ありがとうございました。
キャストしたらできましたm(’_’)m
- 554 名前:kazu [2008/10/02(木) 22:38:31 ]
- 独学ではじめた者です。
練習問題 ・数値を複数回入力し、最後に"END"と入力された後、それぞれに対し 80以上なら"verygood"、80未満で60以上なら"good"、60未満なら"normal" と表示されるプログラムを作成しなさい。 例) 25(enter押下) 90(enter押下) 73(enter押下) END (enter押下) 25 normal 90 verygood 73 good という問題なんですが、 正解が分かりません。 本にはヒントとして 1 文字の入力にはgets()という標準関数を使用する。 2 "END"との比較にはstrcmp()という標準関数を使用する。 3 文字を数値に変換するには、atoi()という標準関数を使用する。 4 繰り返し文(for、while文)とbreak文 と載っていました。 どなたか教えていただけないでしょうか? よろしくお願いします。
- 555 名前:デフォルトの名無しさん mailto:sage [2008/10/02(木) 22:40:47 ]
- >>554
そういうのは宿題スレで聞け
- 556 名前:デフォルトの名無しさん mailto:sage [2008/10/02(木) 22:44:44 ]
- その本は模範解答載せてないのか
不親切だな
- 557 名前:デフォルトの名無しさん mailto:sage [2008/10/02(木) 22:51:08 ]
- >>554
char s[10000]; int x[10000]; int i, j; for (i = 0; i < 10000; ++i) { gets(s); if (strcmp(s, "END") == 0) break; x[i] = atoi(s); } for (j = 0; j < i; ++j) { if (80 <= x[j] ) { printf("%2d verygood\n", x[j]); } else if (60 <= x[j]) { printf("%2d good\n", x[j]); } else { printf("%2d normal\n", x[j]); } }
- 558 名前:kazu [2008/10/02(木) 23:35:55 ]
- >>557
親切にありがとうございます。
- 559 名前:デフォルトの名無しさん mailto:sage [2008/10/02(木) 23:52:06 ]
- >>558
死ねやゴミ
- 560 名前:デフォルトの名無しさん [2008/10/03(金) 00:42:03 ]
- stopppp4ststartcommandoperation2ppppppppppppppppppppppppppppppppppppppppppppppppppppppppPPPPpppp
stopp stack stack stack stack chr dir 2 sometime printf troff terminal fuu サーバーに接続します ターボコマンドをおねがいします cdプレイヤーの接続名をきにゅうしてください PL2 メーカーはマランツ 88 pl2の意味をおかきください 初期モデル プレイヤーの搭載位置をおかきください マウント22 日本製と認識しました ではくわしい おんしつを おかきください ひらがなでおかきください じどうにんしきソフトをきどうしてください きどうご じどうちょうせいに はいります。 おわります どうもありがとうございました。 eth:0 それでけっこうです エンファシスをクリヤモードにいたします。
- 561 名前:デフォルトの名無しさん mailto:sage [2008/10/03(金) 00:46:30 ]
- ., -、,. -─- 、⌒〉
{ } ヽ_ r'⌒) ヽ、 ,,-‐‐ ‐‐-、 iヽ、 J { 、_(o)_,: _(o)_ヽ/ ヽ/∪ ! >:: } / 丶 l /( [三] )ヽノ‐''> < つわぁぁぁああああ! i⊂}__ `二´‐'´__/__ ヽ ‐- 、二`ヽ/〉⊂ニニ⊃) | // ̄ ̄)j~U^∪ヽ ノ ` ‐-L!--‐''(´ ) `i''ー----‐ ''"´ ヽ、__/ ! } ` } !. , -‐- 、. ノ--─ ' はちみつだと思ったら味噌だった〜 ヽ、_{. `ヽi'⌒i `''‐- 、.. __,!
- 562 名前:デフォルトの名無しさん [2008/10/03(金) 03:51:38 ]
- すいません、LSI‐C86試食版を落として使ってるんですが
なぜかプログラムをコンパイルして実行すると日本語部分だけ 文字化けしてしまいます chcpでいろいろとコードいじったりしてみても効果なしです ググったりしたんですがそう言った情報はまったく載っていません どなたか教えてください ちなみにOSはVistaのホームベーシックです よろしくお願いします
- 563 名前:デフォルトの名無しさん mailto:sage [2008/10/03(金) 05:25:27 ]
- そんなもの使うな
VC++かMinGWを使え
- 564 名前:デフォルトの名無しさん mailto:sage [2008/10/03(金) 09:37:29 ]
- 文字化けする最小のコード貼ってみてよ
- 565 名前:デフォルトの名無しさん mailto:sage [2008/10/03(金) 10:44:00 ]
- makeが成功したら実行と言う場合
make && ./a と言うのが定石だと思うんですが./aを明示せずにmake自身に (開発中にテスト的に)実行させるような一般的な表記ってありますか? とりあえず make && make run ってやってます。
- 566 名前:デフォルトの名無しさん [2008/10/03(金) 10:49:32 ]
- make build test
- 567 名前:デフォルトの名無しさん [2008/10/03(金) 13:49:45 ]
- いまどきLSI-Cとかまだ使ってるんだ。。VC++のExpressEditionがあったり
意外としられてないけど、.NET FrameworkSDKはコマンドライン開発専用のコマンドラインがあるのにね。
- 568 名前:デフォルトの名無しさん mailto:sage [2008/10/03(金) 14:16:36 ]
- 入門書をそのままなぞってるんじゃない?
- 569 名前:デフォルトの名無しさん mailto:sage [2008/10/03(金) 14:39:11 ]
- int main(){
- 570 名前:デフォルトの名無しさん [2008/10/03(金) 14:40:38 ]
- int main(){
double hoge[256]; func(hoge); } int hoge(double data[]) } これはアドレス渡しですか?それとも配列のデータをコピーして渡していますか?
- 571 名前:デフォルトの名無しさん mailto:sage [2008/10/03(金) 14:43:31 ]
- int hoge(double data[]) {
} int main() { double fuga[256]; hoge(fuga); } だと思うんだが基本はアドレス渡し
- 572 名前:デフォルトの名無しさん mailto:sage [2008/10/03(金) 15:27:21 ]
- hogeはプロトタイプ宣言されていると考えてください。
アドレス渡しということはメモリの無駄は発生しないということですか?
- 573 名前:デフォルトの名無しさん mailto:sage [2008/10/03(金) 15:29:27 ]
- >>572
まあ、配列は内部的に見るとポインタで持ってるしなあ。
- 574 名前:デフォルトの名無しさん mailto:sage [2008/10/03(金) 15:31:57 ]
- 配列全体のコピーが作られるかと言う意味なら作られない。
逆に言えば関数内で不用意にいじると配列が破壊される。
- 575 名前:デフォルトの名無しさん mailto:sage [2008/10/03(金) 15:49:10 ]
- 配列の中身を見たいだけなので、書き換えたりはしないです
どうも!
- 576 名前:デフォルトの名無しさん mailto:sage [2008/10/03(金) 16:15:18 ]
- 571だけどプロトタイプ宣言に噛みついたんじゃなくて
配列名と関数名が一緒ってのが気になったのよ 納得できたようでなにより
- 577 名前:デフォルトの名無しさん mailto:sage [2008/10/03(金) 16:18:13 ]
- そもそも関数名が違うしなw
- 578 名前:デフォルトの名無しさん mailto:sage [2008/10/03(金) 16:20:36 ]
- >>576
すいません。適当に書いたんで一緒のなめえになっちゃいました
- 579 名前:デフォルトの名無しさん mailto:sage [2008/10/03(金) 16:22:20 ]
- なめえww
らめえww
- 580 名前:デフォルトの名無しさん mailto:sage [2008/10/03(金) 16:37:00 ]
- 中国人ですね。わかります
- 581 名前:デフォルトの名無しさん mailto:sage [2008/10/03(金) 16:43:39 ]
- >>575
書き換えないことが確定的ならconstをつけておけ
- 582 名前:デフォルトの名無しさん mailto:sage [2008/10/03(金) 16:46:02 ]
- int hoge(const double data[]) {
} int main() { double fuga[256]; hoge(fuga); } こうですか?
- 583 名前:デフォルトの名無しさん mailto:sage [2008/10/03(金) 17:09:17 ]
- >>582
そう >hoge(fuga); このときhogeに渡っているのは &fuga[0] つまり配列の先頭の要素のアドレス constを付けずにhoge内でdataの中身を変更するとfugaの中身も変更される
- 584 名前:デフォルトの名無しさん mailto:sage [2008/10/03(金) 17:31:43 ]
- アルゴリズム概論って言う授業で
システムを想定せよ、っていう宿題が でたんですが,何を書けばいいでしょうか?
- 585 名前:デフォルトの名無しさん mailto:sage [2008/10/03(金) 17:34:53 ]
- >>584
>>1を100回読んでからお帰りください
- 586 名前:デフォルトの名無しさん mailto:sage [2008/10/03(金) 17:35:13 ]
- それだけじゃ何を言ってるのかわからないから三倍に書き足して宿題スレで聞け
- 587 名前:デフォルトの名無しさん mailto:sage [2008/10/03(金) 19:18:33 ]
- WinLibD.lib(Misc.obj) : warning LNK4099: PDB 'vc80.pdb' が '..\WinLib\lib\WinLibD.lib' で、または 'c:\Documents and Settings\\デスクトップ\VS2005対応版\chapter5\Debug\vc80.pdb' に見つかりません。デバッグ情報がないものとして、オブジェクトにリンクします。
このエラーはどうすれば回避できますか・・・?
- 588 名前:デフォルトの名無しさん mailto:sage [2008/10/03(金) 19:19:42 ]
- 回避すべきエラーが存在しません
- 589 名前:デフォルトの名無しさん mailto:sage [2008/10/03(金) 19:21:46 ]
- エラーじゃなくて警告な
ライブラリにvc80.pdbが含まれてなかったなら諦めるしかない
- 590 名前:デフォルトの名無しさん mailto:sage [2008/10/03(金) 20:06:02 ]
- >>588 >>589
ありがとうございます
|

|