C言語なら俺に聞け( ..
513:デフォルトの名無しさん
08/10/01 20:02:46
>>509
プログラムが正しいかどうか、他人に聞くしかテスト技法を知らんのか
テスト項目の導き方はいろいろある
それが知りたければ便所の落書きより有料情報をあたったほうがいい
514:デフォルトの名無しさん
08/10/01 20:15:04
>>513
分かった。
515:デフォルトの名無しさん
08/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続き
08/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:デフォルトの名無しさん
08/10/01 20:48:33
ループ変数に対して
int main(void){
...
{
int i, j;
for(i...)
for(j...)
}
...
{
int i;
for(i...)
}
...
return 0;
}
見たいな感じでよく書くんだけど、これは機械のほうからすると無駄が多い処理なんでしょうか?
518:デフォルトの名無しさん
08/10/01 20:57:00
>515
そのシステムのエンディアンではない値をfloatとして返すのが間違い。
代入した直後に正規化されたりしてややこしいことになる。
519:デフォルトの名無しさん
08/10/01 21:13:07
>>515
代入というのは単にビット列をコピーすることではない
正しい内部表現を持たない値を実数として受け渡そうとしたら
場合によっては例外が送出されてプログラムが停まることもある
>>517
コンパイラの最適化次第
520:デフォルトの名無しさん
08/10/01 21:16:41
型のサイズを気にするのはコンパイルするまででおk?
521:デフォルトの名無しさん
08/10/01 21:23:41
意味不明
522:デフォルトの名無しさん
08/10/01 21:40:26
>>515
void test( float inVal )
{
EndianF32 ret = ConvertF32( &inVal );
fwrite( &ret, sizeof(float), 1, fp );
}
とやれば、希望する結果が出るのではなかろうか。
523:デフォルトの名無しさん
08/10/01 21:54:51
>>520
コンパイルしてから何かを気にしたとして、それでどうするつもりだ
524:デフォルトの名無しさん
08/10/02 00:57:10
いざ、リンクしてみたら、コンパイル済みのオブジェクトファイルが
おかしな変数宣言しすぎてメモリ不足になるとか気にしてるのかな?
525:デフォルトの名無しさん
08/10/02 01:02:05
そういう目に遭ったことがないのか? うらやましい
526:デフォルトの名無しさん
08/10/02 01:05:07
メモリ不足解消するのなら、標準関数は変数へいったん代入するとだいぶ変わるらすい。
527:デフォルトの名無しさん
08/10/02 01:17:56
int a = printf;
a("imi wakaran");
528:デフォルトの名無しさん
08/10/02 01:32:04
int(*a)(const char*, ...) = printf;
a("naniga kawarun daro");
529:デフォルトの名無しさん
08/10/02 01:34:13
>>527-528
え!そういう意味の代入なの?
530:デフォルトの名無しさん
08/10/02 02:27:15
void_No4様がきましたよ。
俺は天才、そしてIQは400↑、すげーだろ
531:デフォルトの名無しさん
08/10/02 03:13:57
すごいね
俺の半分もあるじゃん
532:デフォルトの名無しさん
08/10/02 03:35:21
またメンサか
533:デフォルトの名無しさん
08/10/02 11:21:28
>>515
エンディアン云々以前に、ポインタを学んだほうが。
>val.b[0] = ((Endian32 *)inData)->b[3];
inData が指してるのは float (多分4バイトしかない) なわけだが。
534:デフォルトの名無しさん
08/10/02 13:05:06
>>533
union
535:デフォルトの名無しさん
08/10/02 13:43:09
つmemrev
536:515
08/10/02 13:54:06
>>518>>519>>522
ありがとうございます。たいへんよく分かりました。
>>522さんのやり方で上手く行きましたー!
>>533
共用体を使うと、そういうことが出来ちゃうんです。
537:デフォルトの名無しさん
08/10/02 17:12:00
うにおんっていまいちクールなつかいかたがわからないよね
538:デフォルトの名無しさん
08/10/02 17:13:16
regs
539:デフォルトの名無しさん
08/10/02 17:17:48
企業秘密です
540:デフォルトの名無しさん
08/10/02 18:04:14
>>537
一つの領域を複数の型として使えることが共用体の意味だからそのように使えばいい
具体的にはサイズが同じ複数の型からなる配列などがある
intとfloatが不定間隔で現れるようなフォーマットのデータを扱うときに便利
541:デフォルトの名無しさん
08/10/02 18:09:50
でもそれって値を取り出すときにintなのかfloatなのかわからなくない?
542:デフォルトの名無しさん
08/10/02 18:11:37
floatにキャストしちゃえ
543:デフォルトの名無しさん
08/10/02 18:23:33
>>541
そういうフォーマットは、たいてい先行するintの値によって
その後いくつfloatが来るのか決まってる
544:デフォルトの名無しさん
08/10/02 18:34:42
たいていじゃなくて、規則性がなかったらどうするの?
545:デフォルトの名無しさん
08/10/02 18:39:36
何も手がかりが無いのにそんなことしないわw
546:デフォルトの名無しさん
08/10/02 18:41:05
>>544
規則性がなかったら無理
そうじゃなくて、floatが先行してintが混ざる場合もあるという意味
547:デフォルトの名無しさん
08/10/02 19:39:40
構造体のメモリ確保をしたいのですが、
コンパイルできません。
visual C++ 2008 express editionです。
ソース
struct list
{
int data;
struct list* next;
};
newcell = malloc( sizeof(struct list) );
548:デフォルトの名無しさん
08/10/02 19:43:20
>>547
問題の起こるソースコードとエラーメッセージを書けよ
549:デフォルトの名無しさん
08/10/02 21:15:01
>>548すいません
ここのソースコンパイルしようとしたのですが
URLリンク(www.geocities.jp)
1>z:\users\phenix1gou\documents\visual studio 2008\
projects\list\list\source.cpp(77) :
error C2440: '=' : 'void *' から 'LIST *' に変換できません。
って出ます。
550:デフォルトの名無しさん
08/10/02 21:15:58
newcell = (struct list*)malloc( sizeof(struct list) );
551:デフォルトの名無しさん
08/10/02 21:17:12
キャストすれば
newcell = (LIST *)malloc( sizeof(struct list) );
552:デフォルトの名無しさん
08/10/02 21:17:49
>>549
.cppにすんな.cにしれ
553:デフォルトの名無しさん
08/10/02 21:18:13
ありがとうございました。
キャストしたらできましたm(’_’)m
554:kazu
08/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:デフォルトの名無しさん
08/10/02 22:40:47
>>554
そういうのは宿題スレで聞け
556:デフォルトの名無しさん
08/10/02 22:44:44
その本は模範解答載せてないのか
不親切だな
557:デフォルトの名無しさん
08/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
08/10/02 23:35:55
>>557
親切にありがとうございます。
559:デフォルトの名無しさん
08/10/02 23:52:06
>>558
死ねやゴミ
560:デフォルトの名無しさん
08/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:デフォルトの名無しさん
08/10/03 00:46:30
., -、,. -─- 、⌒〉
{ } ヽ_ r'⌒)
ヽ、 ,,-‐‐ ‐‐-、 iヽ、 J
{ 、_(o)_,: _(o)_ヽ/ ヽ/∪
! >:: } / 丶
l /( [三] )ヽノ‐''> < つわぁぁぁああああ!
i⊂}__ `二´‐'´__/__
ヽ ‐- 、二`ヽ/〉⊂ニニ⊃)
| // ̄ ̄)j~U^∪ヽ
ノ ` ‐-L!--‐''(´ )
`i''ー----‐ ''"´ ヽ、__/
! } ` }
!. , -‐- 、. ノ--─ ' はちみつだと思ったら味噌だった〜
ヽ、_{. `ヽi'⌒i
`''‐- 、.. __,!
562:デフォルトの名無しさん
08/10/03 03:51:38
すいません、LSI‐C86試食版を落として使ってるんですが
なぜかプログラムをコンパイルして実行すると日本語部分だけ
文字化けしてしまいます
chcpでいろいろとコードいじったりしてみても効果なしです
ググったりしたんですがそう言った情報はまったく載っていません
どなたか教えてください
ちなみにOSはVistaのホームベーシックです
よろしくお願いします
563:デフォルトの名無しさん
08/10/03 05:25:27
そんなもの使うな
VC++かMinGWを使え
564:デフォルトの名無しさん
08/10/03 09:37:29
文字化けする最小のコード貼ってみてよ
565:デフォルトの名無しさん
08/10/03 10:44:00
makeが成功したら実行と言う場合
make && ./a
と言うのが定石だと思うんですが./aを明示せずにmake自身に
(開発中にテスト的に)実行させるような一般的な表記ってありますか?
とりあえず
make && make run
ってやってます。
566:デフォルトの名無しさん
08/10/03 10:49:32
make build test
567:デフォルトの名無しさん
08/10/03 13:49:45
いまどきLSI-Cとかまだ使ってるんだ。。VC++のExpressEditionがあったり
意外としられてないけど、.NET FrameworkSDKはコマンドライン開発専用のコマンドラインがあるのにね。
568:デフォルトの名無しさん
08/10/03 14:16:36
入門書をそのままなぞってるんじゃない?
569:デフォルトの名無しさん
08/10/03 14:39:11
int main(){
570:デフォルトの名無しさん
08/10/03 14:40:38
int main(){
double hoge[256];
func(hoge);
}
int hoge(double data[])
}
これはアドレス渡しですか?それとも配列のデータをコピーして渡していますか?
571:デフォルトの名無しさん
08/10/03 14:43:31
int hoge(double data[]) {
}
int main() {
double fuga[256];
hoge(fuga);
}
だと思うんだが基本はアドレス渡し
572:デフォルトの名無しさん
08/10/03 15:27:21
hogeはプロトタイプ宣言されていると考えてください。
アドレス渡しということはメモリの無駄は発生しないということですか?
573:デフォルトの名無しさん
08/10/03 15:29:27
>>572
まあ、配列は内部的に見るとポインタで持ってるしなあ。
574:デフォルトの名無しさん
08/10/03 15:31:57
配列全体のコピーが作られるかと言う意味なら作られない。
逆に言えば関数内で不用意にいじると配列が破壊される。
575:デフォルトの名無しさん
08/10/03 15:49:10
配列の中身を見たいだけなので、書き換えたりはしないです
どうも!
576:デフォルトの名無しさん
08/10/03 16:15:18
571だけどプロトタイプ宣言に噛みついたんじゃなくて
配列名と関数名が一緒ってのが気になったのよ
納得できたようでなにより
577:デフォルトの名無しさん
08/10/03 16:18:13
そもそも関数名が違うしなw
578:デフォルトの名無しさん
08/10/03 16:20:36
>>576
すいません。適当に書いたんで一緒のなめえになっちゃいました
579:デフォルトの名無しさん
08/10/03 16:22:20
なめえww
らめえww
580:デフォルトの名無しさん
08/10/03 16:37:00
中国人ですね。わかります
581:デフォルトの名無しさん
08/10/03 16:43:39
>>575
書き換えないことが確定的ならconstをつけておけ
582:デフォルトの名無しさん
08/10/03 16:46:02
int hoge(const double data[]) {
}
int main() {
double fuga[256];
hoge(fuga);
}
こうですか?
583:デフォルトの名無しさん
08/10/03 17:09:17
>>582
そう
>hoge(fuga);
このときhogeに渡っているのは &fuga[0]
つまり配列の先頭の要素のアドレス
constを付けずにhoge内でdataの中身を変更するとfugaの中身も変更される
584:デフォルトの名無しさん
08/10/03 17:31:43
アルゴリズム概論って言う授業で
システムを想定せよ、っていう宿題が
でたんですが,何を書けばいいでしょうか?
585:デフォルトの名無しさん
08/10/03 17:34:53
>>584
>>1を100回読んでからお帰りください
586:デフォルトの名無しさん
08/10/03 17:35:13
それだけじゃ何を言ってるのかわからないから三倍に書き足して宿題スレで聞け
587:デフォルトの名無しさん
08/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:デフォルトの名無しさん
08/10/03 19:19:42
回避すべきエラーが存在しません
589:デフォルトの名無しさん
08/10/03 19:21:46
エラーじゃなくて警告な
ライブラリにvc80.pdbが含まれてなかったなら諦めるしかない
590:デフォルトの名無しさん
08/10/03 20:06:02
>>588 >>589
ありがとうございます
最新レス表示スレッドの検索類似スレ一覧話題のニュースおまかせリスト▼オプションを表示暇つぶし2ch
4218日前に更新/128 KB
担当:undef