[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 1001- 2chのread.cgiへ]
Update time : 01/17 15:29 / Filesize : 215 KB / Number-of Response : 1002
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

C言語なら俺に聞け(入門篇) Part 54



1 名前:デフォルトの名無しさん mailto:sage [2009/10/06(火) 20:41:54 ]
C言語の*入門者*向け解説スレッドです。
初心者、初級者の方は他の質問スレのほうが良いかもしれません。

教えて欲しいのではなく宿題を丸投げしたいだけなら
↓宿題スレ↓へ行ってください。
C/C++の宿題片付けます 130代目
pc12.2ch.net/test/read.cgi/tech/1250204272/

・C++言語はスレ違いです。
・分からない事をなるべく詳しく書いて下さい。
・ソースコードを晒すと答えやすくなるかもしれません。
  # 抜粋/整形厳禁、コンパイラに渡したソースをそのまま貼ること
  # サイズが大きい場合は宿題スレのアップローダ等を利用してください
・開発環境や動作環境も晒すと答えが早いかもしれません。
・質問者は最初にその質問をした時のレス番号を名前欄に書いて下さい。

前スレ
C言語なら俺に聞け(入門篇) Part 53
pc12.2ch.net/test/read.cgi/tech/1253110182/

過去スレ
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

239 名前:デフォルトの名無しさん mailto:sage [2009/10/11(日) 17:38:51 ]
何とC99が関係あるんだ

240 名前:デフォルトの名無しさん mailto:sage [2009/10/11(日) 21:08:20 ]
C99はマルス券の万能取り消し符号

241 名前:デフォルトの名無しさん mailto:sage [2009/10/11(日) 22:49:12 ]
そもそもsizeof(void)なんかコンパイラを通るの?
voidはサイズなどなかったような…

242 名前:デフォルトの名無しさん [2009/10/11(日) 22:58:03 ]
> void **list = malloc(sizeof(void) * 2);

シムラ〜後ろ後ろ


> list[1] = malloc(sizeof(int) * 10);

本当にヤバいのは、むしろこっち

243 名前:デフォルトの名無しさん mailto:sage [2009/10/11(日) 23:15:44 ]
void(無形)として宣言してるものにint(有形)の型を代入してるもんな。
逆(void→int等)はキャストで可能だし普通に使うけど。

244 名前:デフォルトの名無しさん mailto:sage [2009/10/11(日) 23:33:08 ]
void*にint*を代入するのは全く問題ないだろう

245 名前:デフォルトの名無しさん [2009/10/11(日) 23:47:26 ]
malloc の戻りは常に void * なんだけどね
list[x] がホーキング放射みたいに特徴がなくなるんだよ

246 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 00:18:45 ]
複数の異なる型を保持したいなら配列じゃなくて構造体を使うべき。

247 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 00:19:27 ]
共用体だろ



248 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 00:25:22 ]
list[0]とlist[1]をまとめて1つの領域として扱いたがってるようには見えないが?

249 名前:230 [2009/10/12(月) 00:52:19 ]
mallocの質問した者です。
何故このようなことをしたいのかとうと、現在MySQL APIのラッパを作成しており、MySQLの仕様によると

select int_col1, int_col2, str_col3 from master;
のようなSQL結果を取得する場合、
int foo = int_col1;
int bar = int_col2;
char *baz = str_col3;

のようにテーブルの型に合ったCの型へ代入するべきとあるのです。
SQLはどのような型が渡されるか実行時でないと判別できないため、共用体ではなくmallocによる動的確保を考えました。
mallocの方法でもエラーは出ないのですが、より良い対応はありますでしょうか。


250 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 01:38:26 ]
> SQLはどのような型が渡されるか実行時でないと判別できない
普通SQLを実行する側がどのような型で取得すべきか知っているはず
なので取得したい型で準備するだけ

どんなラッパーを作ろうとしてるんだろ?

251 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 01:39:12 ]
>>249
発行するSQL文の種類だけ、ラッパーを個別に用意するのはダメなん?

>select int_col1, int_col2, str_col3 from master;

なら、MySQLにおけるテーブルの型が既知な訳で、SQL文も規定されている訳だから
代入すべき変数の型もプログラム作成時に決まるはずでない?

>SQLはどのような型が渡されるか実行時でないと判別できないため

というのがイマイチ理解不能。動的に変化する検索結果のレコード数を気にして
mallocするならともかく。変数の型を抽象化する必要があるってことは、つまり
動的なSQL文にも対応できる、汎用的なラッパーを作りたいってこと?

252 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 02:58:28 ]
>>251
説明不足ですいません、汎用的なフレームワークを作ろうとしてます。
そのため、どのようなクエリ(型)が送られてくるかは実行時まで不明です。

フレームワーク内で適切な型にオートマッピングさせておきたいのです。


253 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 03:06:33 ]
好きなようにすればいいんじゃね?
そこは C の問題じゃないだろ。


254 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 10:38:17 ]
特定の変数をマクロで無効にする方法ってないですか?

int 型の a という変数があって
a はプログラムの色んな所(数百箇所)で参照されています。
この変数を「Debug時には使う、
        Release時には使わない(変数自体無い)」という風にしたいんです。

一応、#ifdefで良さそうなんですが
結構、あちこちで参照されているので#ifdefで囲むと
手間がかかり、ソースも読みづらくなりそうです。

こんな時、あまりソースの変更をせずに変数を無効にすることって出来ますか?
(例えば、変数の宣言の所だけを変えるだけで
 変数の参照の部分も無効(コンパイルしない)にするなど・・・)

#ifdefで一つ一つ書いてくしかないんでしょうか?

255 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 10:54:05 ]
無効ってどういう意味だ


256 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 10:57:02 ]
>>254
int a;
もし仮にこれをRelease時だけ消えるようにしたとしたら
このaを使ってる部分がエラーになるんだが

257 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 10:59:43 ]
>254
どういう状況か今ひとつ把握できないのだが
aを評価している式や式文も同じように(「Debug時には使う、Release時には使わない」)しないといけないと思うのですが
式や式文自体をマクロで囲っておいてコンパイルフラグ一発とかやったりはする

#ifdef NDEBUG
# define foo(expression) /* foo bar comment */
#else
# define foo(expression) expression
#endif /* NDEBUG */

int bar(int x) { x += 128; foo(fprintf(stderr, "x : %d\n", x)); return x; }
みたいなのか



258 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 11:49:43 ]
>>254
assert

259 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 12:05:45 ]
>>252
どういうフレームワークを作ろうとしているのかいまいちわからんが、
とりあえず全部文字列にして取得しとけばいいんじゃないの?

260 名前:デフォルトの名無しさん [2009/10/12(月) 12:39:17 ]
int *p;
p = &p;
*p = 3;
printf("%p = %d\n",p,*p);
ポインタ変数にもアドレスがあるのでそこを利用してpに&pを代入することで通常のローカル変数のように扱うことができる。
動かしてないのでわからんが、うちの脳内ではそれがうまくいくと信じてる。

261 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 12:44:06 ]
>260
それはない

262 名前:デフォルトの名無しさん [2009/10/12(月) 13:10:49 ]
お前にはいってない

263 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 13:17:03 ]
お前にはいりたい

264 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 13:18:09 ]
お前に入れたい

265 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 13:22:21 ]
お前にいれた

266 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 13:40:43 ]
お前らいらね

267 名前:デフォルトの名無しさん [2009/10/12(月) 13:41:23 ]
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■

2ちゃんねるの有志の皆様へ

ただいまVIPで例のサイバーテロ集団の本拠地VANKに攻撃をしかける作戦を立てています

ただいま人数不足、不利な戦況となっております。

現在技術者部門の方も募集しています。よろしくお願いします。

下記日時に間に合うように準備し、作戦に参加してくれたら幸いです

作戦決行日時:10月12日 18時00分

現行スレ→【yutori7.2ch.net/test/read.cgi/news4vip/1255316576/
まとめwiki(要編集)www20.atwiki.jp/vipvsvank/pages/1.html

■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■





268 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 13:46:49 ]
コピペ君って馬鹿だな、まで読んだ。

269 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 13:49:50 ]
"無効にしたい"って考えるから難しくなる。
"必要なときだけ有効にしたい"と考えればいい。

270 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 14:48:37 ]
>>260
*p = 3 によって pがpのアドレスから3に書き換わるため、
*pでそこを参照しようとするのは危険。

271 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 14:59:14 ]
0点 p = 3 と *p = 3 の違いからやりなおし

272 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 15:02:15 ]
Or2=3;

273 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 15:16:10 ]
>271
一般的なセマンティクスはそうだろうけど、>260ではint *にint **を代入している
暗黙の型変換でint **はint *に変換されて問題なく代入できる
しかし、実際にはint **であるので、int *を間接参照してもそれはintではなくint *である
正確に言えば、シンタックス上はintであるが、>260のセマンティクス上はint *であるのだ
よって、>270は正しいことを言っていると僕は考える

あくまでセマンティクス上の話だからね、実行した場合は未定義動作だな

274 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 16:14:01 ]
int** とint*暗黙的型変換が出来ることを好んでいるか否かは
CPUによるから、一般的にはあんまりしないほうが良いだろな
たとえ出来た場合でも、そのソースをその環境から出さないとい
うのならともかくよそで使われることを想定するのなら
本質的に処理系依存であることを明示する為に
キャスト演算子の直書きは避け
例えば
int **pint2ppint_80x86(int *)
int **pint2ppint_PowerPC_G5(int *)
とか使うべきだろうな(マクロでも良いが)

C++でクラスの場合は、直系クラス間でのポインタの相互運用性
は保証されている(できなければC++コンパイラと名乗る資格は
無い)からルールに沿って行うべきだが

275 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 18:48:40 ]
BCCのフリー版では getopt() がつかえないみたいなんですが、
コマンドライン引数は一般的にどのように処理しているのでしょうか?


276 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 18:52:19 ]
argvの内容を一つずつ取り出して評価していけばいいのでは?

277 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 18:58:26 ]
>>276
今までそのようにしていたんですけど、getopt() を使う方が見た目も
すっきりしてわかりやすいので使ってみようと思いました。

BCCになかったので、何か代替のものがあるのかと思って質問しました。




278 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 19:12:15 ]
getopt()は非標準

279 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 19:51:22 ]
posixにあるのに?

280 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 20:26:40 ]
posixはposix

281 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 21:52:13 ]
CHAR_BITSってcharのbit数ですよね?
charが8bitでintは12bitといった処理系も世の中にはあるらしいんですが、この場合1byteのbit数っていうのは何bitなんでしょうか?
そもそもこのintは2byte?それとも1.5byte?

282 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 21:57:39 ]
intは最低16ビットなければいけない
いや、16ビットというふうに決まっているわけではないが、
少なくとも -32767 〜 +32767 の値を表現できなければならないので、
16ビット以上なければおかしい

283 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 22:33:53 ]
int main(void)
{
char buf[LINE_BUF];
char buf2[LINE_BUF];
char *log[10];
char *log2[10];
FILE *fp = fopen("a.txt", "r");
FILE *fp2 = fopen("b.txt", "r");

while(fgets(buf, sizeof buf, fp))
{
//printf("bufだよ%s",buf);
//printf("%s", log[0]);
while(fgets(buf2, sizeof buf2, fp2))
{
//printf("buf2だよ%s",buf2);
if(strncmp(buf,buf2,3)==0)
{
break;
}
else if(strncmp(buf,buf2,3)>0)
{
printf("%s",buf);
break;
}
}
}
fclose(fp);
return 0;
}


284 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 22:40:21 ]
int main(void)
{
char buf[LINE_BUF];
char buf2[LINE_BUF];
char *log[10];
char *log2[10];

FILE *fp = fopen("a.txt", "r");
FILE *fp2 = fopen("b.txt", "r");

while(fgets(buf, sizeof buf, fp))//NULLが返ってくるまで・・・
{
while(fgets(buf2, sizeof buf2, fp2))//NULLが返ってくるまで・・・
{
if(strncmp(buf,buf2,3)==0)//先頭から3文字が一致したらbreak
{
break;
}
else if(strncmp(buf,buf2,3)>0)//a.txtの行の値のほうが大きくなった=つまりb.txtにはもう存在しないため抜き出す
{
printf("%s",buf);
break;
}
}
   }
fclose(fp);
return 0;
}
ファイルは降順にソートされています。
a.txtにあってb.txtない行を抜き出すプログラムのつもりですが、当然正常に処理されていません。
2重目のwhile文で、抜けるたびに行を先頭から見るいくにはどうしたらよいでしょうか?(今のプログラムだと抜けるたびに次の行へ移動してしまいます)


285 名前:284 mailto:sage [2009/10/12(月) 22:41:42 ]
見やすくそろえたつもりですが、左揃えになってますね。。。

286 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 22:47:39 ]
>>285
Tabは削除されます
スペースはデータ上は残りますがブラウザの仕様で表示されません
長いソースを詠みやすい状態で貼り付ける時は別の方法を使うしかありません

287 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 23:00:40 ]
codepad.org/
ここ使えば問題ないさ



288 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 23:15:31 ]
>>286
そうでしたか。
1つ目のwhileの{の終わりがfcloseの上です。
2つ目のwhileの中にほとんどの処理が入っています。
見にくいと思いますが解読お願いします。。

289 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 23:31:42 ]
>>284
#include<stdio.h>
#include<stdlib.h>
#include<string.h>

#define LINE_BUF 1024

int main(void)
{
char buf[LINE_BUF];
char buf2[LINE_BUF]="";

FILE *fp = fopen("a.txt", "r");
FILE *fp2 = fopen("b.txt", "r");
if(fp==NULL || fp2==NULL) exit(1);
while(fgets(buf, sizeof buf, fp))
{
if(feof(fp2) || strncmp(buf, buf2, 3)<0)
{
printf("%s",buf);
}
else
{
while(fgets(buf2, sizeof buf2, fp2) && strncmp(buf, buf2, 3)>=0)
;
}
}
fclose(fp);
fclose(fp2);
return 0;
}

290 名前:284 mailto:sage [2009/10/12(月) 23:40:08 ]
>>289
インデントのないコードは読まない事にしている

291 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 23:41:46 ]
>>290
ちょっと面白かったw
専ブラでポップアップ表示しな

292 名前:288 mailto:sage [2009/10/12(月) 23:47:37 ]
>>289
細かい部分も修正ありがとうございます。
実行してみたのですが、a.txtの先頭行以外がすべて表示されるプログラムとなっています。。。


293 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 23:47:42 ]
2chブラウザ開発しているやつって暇なの?
エラー処理も満足に実装できない糞APIなのに、どうして頑張っちゃうの?
ドカタ根性ってやつ?

294 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 23:58:17 ]
>>292
#include<stdio.h>
#include<stdlib.h>
#include<string.h>

#define LINE_BUF 1024

int main(void)
{
char buf[LINE_BUF];
char buf2[LINE_BUF];

FILE *fp = fopen("a.txt", "r");
FILE *fp2 = fopen("b.txt", "r");
if(fp==NULL || fp2==NULL) exit(1);
fgets(buf2, sizeof buf2, fp2); // 追加
while(fgets(buf, sizeof buf, fp))
{
if(feof(fp2) || strncmp(buf, buf2, 3)>0) // 不等号の向きを変えた
{
printf("%s",buf);
}
else
{
while(fgets(buf2, sizeof buf2, fp2) && strncmp(buf, buf2, 3)<=0) // 不等号の向きを変えた
;
}
}
fclose(fp);
fclose(fp2);
return 0;
}

295 名前:デフォルトの名無しさん mailto:sage [2009/10/13(火) 00:00:19 ]
>>294
完璧です!神!

296 名前:デフォルトの名無しさん mailto:sage [2009/10/13(火) 01:35:07 ]
暗黙の型変換される訳ね―だろksg

297 名前:デフォルトの名無しさん mailto:sage [2009/10/13(火) 02:22:59 ]
アンカーつけろよ



298 名前:デフォルトの名無しさん mailto:sage [2009/10/13(火) 02:36:36 ]
Turbo C++ 1.01 のパッケのなかに getopt.c があるからそれ使えば?


299 名前:デフォルトの名無しさん mailto:sage [2009/10/13(火) 02:50:09 ]
インデントが1桁ってありえないわー
最低でも2桁だろう

300 名前:デフォルトの名無しさん mailto:sage [2009/10/13(火) 03:00:52 ]
インデントは8桁が正統

301 名前:デフォルトの名無しさん mailto:sage [2009/10/13(火) 03:06:28 ]
はい、またインデントは何桁がいいかが始まりましたが、
雑談は雑談スレでお願いします

302 名前:デフォルトの名無しさん mailto:sage [2009/10/13(火) 03:22:17 ]
そうそう。
今インデントを決める大事な話をしてるんだから、雑談なんかで邪魔するんじゃないぞ。

303 名前:デフォルトの名無しさん mailto:sage [2009/10/13(火) 03:30:26 ]
4タブや2タブは、画面の幅が640しかなかった時代の苦肉の策。
今は1920もあるんだから8タブに戻すべき。

304 名前:デフォルトの名無しさん mailto:sage [2009/10/13(火) 03:39:38 ]
変数名なども長くなる傾向にあるから、いくら画面の幅が広くてもあまりソースの幅が広がると単純に読みづらくなる
ソースだけでなくプロパティウィンドウやデバッグ出力など色々なペインも並べなくちゃならないし
5-10-15…が適当

305 名前:デフォルトの名無しさん mailto:sage [2009/10/13(火) 03:52:44 ]
4桁が正義。
それだけ行っとく。

306 名前:デフォルトの名無しさん mailto:sage [2009/10/13(火) 08:38:23 ]
デフォルト8桁、お好みで4桁

307 名前:デフォルトの名無しさん mailto:sage [2009/10/13(火) 14:41:34 ]
>>305
インデントに使うキャラクタをいろいろ混在させないことだけが正義だろw



308 名前:デフォルトの名無しさん mailto:sage [2009/10/13(火) 14:52:37 ]
たしかに、半角スペースとハードタブが入り混じったソースを見るとイラっと来るわ
それでもインデントが整ってればまだいいんだけど(エディタのマクロでハードタブに一括置換すればいいから)、
たまに半角スペースが1個足りなかったり多かったりする行とかあるのな

309 名前:デフォルトの名無しさん mailto:sage [2009/10/13(火) 15:06:10 ]
タブの手前に紛れ込んでるスペースがクソw

310 名前:デフォルトの名無しさん mailto:sage [2009/10/13(火) 15:08:23 ]
整形ツール使えよ

311 名前:デフォルトの名無しさん mailto:sage [2009/10/13(火) 16:11:57 ]
>>308
ネットからコピペするとそうなりやすい。。
俺はそういうの気になるから一つ一つ既存のコードにあわせて修正してるけどな。

312 名前:デフォルトの名無しさん mailto:sage [2009/10/13(火) 16:14:51 ]
>>308
そのマクロ公開してください><

313 名前:デフォルトの名無しさん mailto:sage [2009/10/13(火) 18:16:44 ]
>>312
自分で作ったわけじゃない
どっかで公開されてたのを拾っただけ

314 名前:デフォルトの名無しさん mailto:sage [2009/10/13(火) 18:32:21 ]
>>312
エディタが何かも判らずクレクレ言うような奴には
つ彡テイッ! [map T 1G!Gunexpand -a -t 4^V^M]

315 名前:デフォルトの名無しさん mailto:sage [2009/10/13(火) 18:39:01 ]
昔は GNU indent とか使って整形したこともあったけど
今はxyzzy上でワンキーで自分好みに整形するだけだな。読むときは。

316 名前:デフォルトの名無しさん mailto:sage [2009/10/13(火) 18:45:47 ]
indentは微妙に好みの設定にできないから嫌。

317 名前:デフォルトの名無しさん mailto:sage [2009/10/13(火) 18:52:42 ]
・n x { ごとに、行頭からisgraph()が真になるまでの0個以上の半角スペースおよびタブを、n x 1個のタブに置き換える。
・{ ごとに、n++する。
・} ごとに、n--する。

っていう整形ツールでも作ればいいじゃない。



318 名前:デフォルトの名無しさん [2009/10/13(火) 18:55:45 ]
で } が多すぎた瞬間に自爆とか、楽しそう

319 名前:デフォルトの名無しさん mailto:sage [2009/10/13(火) 19:14:47 ]
タブ厨氏ね

320 名前:デフォルトの名無しさん mailto:sage [2009/10/13(火) 19:30:08 ]
注意していても誤字脱字が多くて困っています。
少なくする方法を知りませんか?

321 名前:デフォルトの名無しさん mailto:sage [2009/10/13(火) 19:32:30 ]
>>320
tabつかえ

322 名前:デフォルトの名無しさん mailto:sage [2009/10/13(火) 19:38:21 ]
>>317
printf("{");

まぁ、gg=Gとかですませる。

>>321
いや、そこはなんかちが、、、
tabでキーワード補完しろという意味じゃないよね?

323 名前:デフォルトの名無しさん mailto:sage [2009/10/13(火) 19:39:07 ]
ちょっとスレチかもしれんが、みんなは「自分だけが使う小物ツール」とかよく作るほう?
自分がC初心者の頃は、学習を兼ねて例え同じようなものがフリーであっても作ってみたりしてた。

324 名前:デフォルトの名無しさん mailto:sage [2009/10/13(火) 19:45:39 ]
>>323
作るよ。
問題解決のためにふつーにプログラミングできるようになって一人前。

325 名前:デフォルトの名無しさん mailto:sage [2009/10/13(火) 19:48:35 ]
自分だけの環境を構築するなら、プログラミング必須だろ。

326 名前:デフォルトの名無しさん mailto:sage [2009/10/13(火) 19:55:48 ]
>>321
偶然だけど、俺はShift-TABにdabbrev-expandを割り当ててる。
実際には、範囲選択中は別動作になるように、
wiki.livedoor.jp/kogo77/d/xyzzy%A4%CE%C0%DF%C4%EA
にしてるけど。

IDEの方が、意味を考えながら補完してくれるという意味でずっと便利なんだけど
同じキーを繰り返すだけで選択できて、かつ他のキーを使わずに確定して
そのまま先の入力に進めるのがなかなか。

327 名前:デフォルトの名無しさん mailto:sage [2009/10/14(水) 06:28:52 ]
float型の配列のソート方法が分からなくて困っています.

配列の数は9個で,降順,昇順どちらでも構いません.
中身は,float f_hairetu[9] = {145.20, 55.32, 33.20, 55.55, 348.99, 12.01, 1.29, 88.29, 0.98} などのデータが入っています.




328 名前:デフォルトの名無しさん mailto:sage [2009/10/14(水) 07:52:05 ]
qsortつかえば

329 名前:デフォルトの名無しさん [2009/10/14(水) 08:14:38 ]
ソースファイルから、
 define、グローバル変数、関数名
などなどの情報を抜き出して一覧化してくれるフリーソフトがありましたら教えてください。


330 名前:デフォルトの名無しさん [2009/10/14(水) 08:34:12 ]
doxygen

331 名前:327 mailto:sage [2009/10/14(水) 09:18:10 ]
>>328
ありがとうございます。qsort関数は、検索してint型のソートなら良さげなサンプルが見つかったのですが、float型のものは見つからず仕様も良く分からなくて困っています。

332 名前:デフォルトの名無しさん mailto:sage [2009/10/14(水) 09:57:31 ]
int compare(const void *p1, const void *p2) |
 float f1 = *(float *)p1, f2 = *(float *)p2;
 if (f1 == f2)
  return 0;
 return f1 > f2 ? -1:1;
}
int main() {
 float data[] = { ... };
 qsort(data, sizeof(data)/sizeof(data[0]), sizeof(data[0]), compare);
 ...
}

333 名前:デフォルトの名無しさん mailto:sage [2009/10/14(水) 10:01:23 ]
まあそれだとNaNが含まれてるときソートできないな


334 名前:デフォルトの名無しさん mailto:sage [2009/10/14(水) 10:04:10 ]
NaNとかなる

335 名前:デフォルトの名無しさん mailto:sage [2009/10/14(水) 10:17:48 ]
NaNってC言語の比較内で判定できるのか

336 名前:デフォルトの名無しさん mailto:sage [2009/10/14(水) 10:31:07 ]
C99ならできる

337 名前:デフォルトの名無しさん mailto:sage [2009/10/14(水) 10:36:07 ]
C99なら △
C99では ○
C99においては ◎



338 名前:デフォルトの名無しさん mailto:sage [2009/10/14(水) 10:45:48 ]
>int型のソートなら良さげなサンプル
2項を引き算してたりしてw

339 名前:デフォルトの名無しさん mailto:sage [2009/10/14(水) 11:05:31 ]
>>337
それは意味が変わっているだろ。

「C89ではNaNを正しく扱えないが、C99において*なら*できる」
の省略としての「C99なら」なのだから「なら」を取ってしまってはいけない。






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<215KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef