C言語なら俺に聞け(入門篇) Part 54at TECH
C言語なら俺に聞け(入門篇) Part 54 - 暇つぶし2ch300:デフォルトの名無しさん
09/10/13 03:00:52
インデントは8桁が正統

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

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

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

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

305:デフォルトの名無しさん
09/10/13 03:52:44
4桁が正義。
それだけ行っとく。

306:デフォルトの名無しさん
09/10/13 08:38:23
デフォルト8桁、お好みで4桁

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

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

309:デフォルトの名無しさん
09/10/13 15:06:10
タブの手前に紛れ込んでるスペースがクソw

310:デフォルトの名無しさん
09/10/13 15:08:23
整形ツール使えよ

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

312:デフォルトの名無しさん
09/10/13 16:14:51
>>308
そのマクロ公開してください><

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

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

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

316:デフォルトの名無しさん
09/10/13 18:45:47
indentは微妙に好みの設定にできないから嫌。

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

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

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

319:デフォルトの名無しさん
09/10/13 19:14:47
タブ厨氏ね

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

321:デフォルトの名無しさん
09/10/13 19:32:30
>>320
tabつかえ

322:デフォルトの名無しさん
09/10/13 19:38:21
>>317
printf("{");

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

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

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

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

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

326:デフォルトの名無しさん
09/10/13 19:55:48
>>321
偶然だけど、俺はShift-TABにdabbrev-expandを割り当ててる。
実際には、範囲選択中は別動作になるように、
URLリンク(wiki.livedoor.jp)
にしてるけど。

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

327:デフォルトの名無しさん
09/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:デフォルトの名無しさん
09/10/14 07:52:05
qsortつかえば

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


330:デフォルトの名無しさん
09/10/14 08:34:12
doxygen

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

332:デフォルトの名無しさん
09/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:デフォルトの名無しさん
09/10/14 10:01:23
まあそれだとNaNが含まれてるときソートできないな


334:デフォルトの名無しさん
09/10/14 10:04:10
NaNとかなる

335:デフォルトの名無しさん
09/10/14 10:17:48
NaNってC言語の比較内で判定できるのか

336:デフォルトの名無しさん
09/10/14 10:31:07
C99ならできる

337:デフォルトの名無しさん
09/10/14 10:36:07
C99なら △
C99では ○
C99においては ◎

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

339:デフォルトの名無しさん
09/10/14 11:05:31
>>337
それは意味が変わっているだろ。

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

340:デフォルトの名無しさん
09/10/14 11:52:04
>>339
素直にC89ではできないと述べれば良い

341:デフォルトの名無しさん
09/10/14 12:02:42
>>340
C90わすれてますよ

342:デフォルトの名無しさん
09/10/14 12:11:15
sizeof(long)==sizeof(float) なら、これでも比較できる

int float_compare(const void *a, const void *b){
const long *p, *q;

p=a;
q=b;
if(*p<*q) return -1;
if(*p>*q) return 1;
return 0;
}

343:デフォルトの名無しさん
09/10/14 12:15:55
floatのときとlongのときとで大小関係が一致することは確実なの?

344:デフォルトの名無しさん
09/10/14 12:30:58
float のフォーマットに依存しないかい?
IEEE754 だと、上位から 符号 指数部 仮数部 の並びだけど… うまくいくのかな?

345:デフォルトの名無しさん
09/10/14 12:35:08
10分置きに実行するってのは
Sleep(600000);でいいの?

346:デフォルトの名無しさん
09/10/14 12:44:10
だめ
それだと10分+αになる
αの長さは不定

347:デフォルトの名無しさん
09/10/14 13:44:10
>>342-343
駄目に決まってるだろ

348:デフォルトの名無しさん
09/10/14 13:48:02
ソート順なんでもいいみたいだからいいんじゃね
処理系依存の何らかの順番でソートされるであろう

349:デフォルトの名無しさん
09/10/14 13:53:59
大小関係に矛盾があると未定義の動作だぜbaby

350:デフォルトの名無しさん
09/10/14 14:47:41
>>349
数値としての大小関係に一致するかはともかく、
大小関係を定義するcompare関数としての動作に矛盾はないかと?

351:デフォルトの名無しさん
09/10/14 14:57:51
>>349
compare(p1,p2) が 正の値を戻すとき
compare(p2,p1) が負の値を戻さないのなら そうだろうね

352:デフォルトの名無しさん
09/10/14 19:46:18
#define TEST 1
#define TEST2 2
#define TEST3 3

こんなことをして
プログラムの中で、TEST3 を使ってみたのですが
期待通りTEST3は3に置き換えられていました。

ふと、TESTは1に置き換えられるから、TEST3は13になったりしないのかと
思ったのですが、なぜ大丈夫だったのでしょうか?

353:デフォルトの名無しさん
09/10/14 19:47:57
>>352
識別子単位だから

354:デフォルトの名無しさん
09/10/14 19:52:54
cppはちゃんと考えて置換してくれるんだよ

355:デフォルトの名無しさん
09/10/14 20:12:08
今まで色んなライブラリを作ってきたんだけど、それらの機能を統合したライブラリを作りたいんだ。
でも、ただ一緒にしようとしたら、.libファイルが無駄に多くなって使いづらくなっちゃって…
この多くの.libファイルを一つの.libファイルにまとめたいのだが、何か方法はないかな?

開発環境はVisual Studio 2008 (Visual C++)で、出来れば嬉しい。
前作ったプロジェクトは、ライブラリが完成した後にHDDの整理で消してしまってるから、もうないんだ。

356:デフォルトの名無しさん
09/10/14 21:46:36
>>352
1パスだから

357:デフォルトの名無しさん
09/10/14 23:32:48
URLリンク(codepad.org)
教科書どおりに書いたらエラー出やがった。
マジ糞だろ俺の頭

ちなみに作りたいものがあってかなりすっ飛ばしたため
自分でも意味がわかっておりません。

誰か解説してください

358:デフォルトの名無しさん
09/10/14 23:38:01
>>357
教科書のタイトルと、今使ってる処理系の名前かけよ

359:デフォルトの名無しさん
09/10/14 23:42:57
>>357
どんなエラーが出たのかも言わずに解説しろとな?
codepadのエラーからエスパーすると「conio.hが無い」ってエラーが出てるじゃんとしか言いようがありません。


360:357
09/10/14 23:46:09
よっしゃ
教科書
「すぐわかるC/C++」塚越一雄

エラー
「error C3861: 'get_charset': 識別子が見つかりませんでした」

ちなみに環境はvisualc++2008exedition

361:デフォルトの名無しさん
09/10/14 23:48:12
知らんけど、本のどこかにget_charsetの定義あるだろ。探せよ

362:デフォルトの名無しさん
09/10/14 23:50:11
そうだね、飛ばすという発想がそもそも間違っていたと反省中。
地道に勉強します

363:デフォルトの名無しさん
09/10/14 23:53:14
飛ばすとかじゃなくてコピペしてくるコードが足りないだけだろうが……

364:デフォルトの名無しさん
09/10/15 00:21:28
C++ スレの二の舞か
答えない奴は説教もするな

365:デフォルトの名無しさん
09/10/15 00:24:13
整数値を入力してください:33

3-->6-->9-->12-->15-->18-->21-->24-->27-->30-->33-->

って感じのプログラムを書かないけないんだが誰か教えてくれ。
for?とかなんかそういうのを使ったりしてるんだが全くできねえ。
33ってのは入力した数で、その入力した数までの三の倍数が表示されないといけないらしい・・・



366:デフォルトの名無しさん
09/10/15 00:25:26
>>365
そんな事は無いよ、表示されなくていいよ。

367:デフォルトの名無しさん
09/10/15 00:32:41
宿題なら宿題スレへ

368:デフォルトの名無しさん
09/10/15 00:45:40
ふつーに、
3から始めて、33以下である間、3ずつインクリメント

369:デフォルトの名無しさん
09/10/15 01:09:42
最近の小学校ってこんな高度な授業があるのか。
大変だな。

370:デフォルトの名無しさん
09/10/15 01:10:49
マイクロソフトロックされるのですがどうしたらいいでしょうか?

371:デフォルトの名無しさん
09/10/15 01:11:13
scanf("%d",&a);

a = a/3;
for(b=1;b<=a;b++){
printf("%d-->",b*3);
}

372:デフォルトの名無しさん
09/10/15 01:24:49
できたぜ!
まさか答えてくれる人がいるとは・・・
本当にありがとうございます!!!

373:デフォルトの名無しさん
09/10/15 01:37:52
int i, n;
scanf("%d", &n);
for(i=3; i<=n; i+=3) printf("%d-->", i);

374:デフォルトの名無しさん
09/10/15 01:57:02
setvbuf()ってどういうときに使うの?

375:デフォルトの名無しさん
09/10/15 01:59:57
>>374
man setbuf

376:デフォルトの名無しさん
09/10/15 03:13:49
>>375
vが抜けてる?

377:デフォルトの名無しさん
09/10/15 07:13:23
基本の教科書の内容をクリアして、応用に入るためのわかりやすい参考書あったら教えてください。

378:デフォルトの名無しさん
09/10/15 08:13:42
何に応用しようとしてるのかが分からないと、勧めようがない。

379:デフォルトの名無しさん
09/10/15 10:01:40
>>376
あってるだろ

380:デフォルトの名無しさん
09/10/15 13:37:14
specificationとusageは別物だと思うが

381:デフォルトの名無しさん
09/10/15 19:27:54
>>378
特に無いんですが、もっとCに詳しくなりたくて・・・

382:デフォルトの名無しさん
09/10/15 19:35:20
>>381
オラ入りでも買っとけ

383:デフォルトの名無しさん
09/10/15 23:01:53
>>381
実際に何かソフトを作ってみれば自然と詳しくなる
何か便利なツールが欲しくなったとき、誰かが作ったフリーウェアを探すんじゃなくて自分で作ることをまず考える

384:デフォルトの名無しさん
09/10/15 23:18:14
CではCPUをOCするソフトは作れないんですよね?

385:デフォルトの名無しさん
09/10/15 23:31:29
ちょっとハードいじる必要があるが不可能ではない

386:デフォルトの名無しさん
09/10/15 23:38:37
そうんですか。インターフェースって雑誌でそれが出来ないのがCの弱点みたいなことが
書いてあったんで。まだレベル的に意味がよく分からないんですけど

387:デフォルトの名無しさん
09/10/15 23:44:20
その雑誌だとどの言語ならそれができると書かれていたの?

388:デフォルトの名無しさん
09/10/15 23:45:43
Pascalです

389:デフォルトの名無しさん
09/10/15 23:46:04
いや、C入門の特集だったんで。大学の図書館のやつで
まだ組み込みはやる気ないんでちゃんと読んではいないです

390:デフォルトの名無しさん
09/10/15 23:48:07
コンピュータの中、ソフトウェアのレベルでは何でも出来るんだけどって話かな。
個人的にはC言語で飯が炊ければと・・・

391:デフォルトの名無しさん
09/10/16 00:03:44
最近のOCって、BIOSで設定変えるだけだったりするよね。
昔はハード的に別クロック入れてたけど。

392:デフォルトの名無しさん
09/10/16 00:33:00
正確にはOCとは書いてなかったんですけど、たぶん>>390みたいな話だと思います

393:デフォルトの名無しさん
09/10/16 01:43:09
Pascalだとできるというのがよく分からんのだけど、まあそうなんでしょう

394:デフォルトの名無しさん
09/10/16 01:53:32
>>388は違う人です

395:デフォルトの名無しさん
09/10/16 07:13:35
>>390
炊飯ジャーのプログラムはCだっったりするんじゃないの


396:デフォルトの名無しさん
09/10/16 08:27:03
>>395
現状自分でプログラムできないよねってこと。
外出先から携帯でもつかって、自宅の飯の支度ができたら楽だと思うんだ。

397:デフォルトの名無しさん
09/10/16 08:37:53
おいしく炊くのは難しいかもしれないけど、
ちょっと古いタイプの炊飯器なら個人でも制御できると思うよ
高校の時にポケコンで制御してるやつがいた

398:デフォルトの名無しさん
09/10/16 09:10:21
「CPUをオープンコレクタする」って何じゃい、と一瞬考えてしまった。

399:デフォルトの名無しさん
09/10/16 09:38:21
cosの計算をするプログラムなんですけど
#include <stdio.h>
#include <math.h>

main(){


double a,b;


scanf("%lf",&a);
b=cos(a);
printf("b=%lf",b);

}
正確に計算してもらえません
どこがいけないのでしょうか?

400:デフォルトの名無しさん
09/10/16 09:49:13
>>399
単位が何なのかわかってないだろ

401:デフォルトの名無しさん
09/10/16 10:41:45
>>399
取り敢えず、0を入れたら1が出力されるのは確認した?

402:デフォルトの名無しさん
09/10/16 12:49:08
正確じゃないのは仕方ないよ

403:デフォルトの名無しさん
09/10/16 13:27:30
何を入力して何を期待して何が出力されたのかくらい書けよ

404:デフォルトの名無しさん
09/10/16 13:35:48
>>396
Cだとそれができないというのは変な話だな

405:デフォルトの名無しさん
09/10/16 13:46:09
炊飯器のボタンの上にアームをつけてそれを制御すればいいじゃん

例のジョークRFCを実装したコーヒーポットとかそんな感じだろ

406:デフォルトの名無しさん
09/10/16 13:51:24
ぐぐったら 本当に実装してるのなw

RFC URLリンク(www.studyinghttp.net)
実装 URLリンク(alpha.mixi.co.jp)

407:デフォルトの名無しさん
09/10/16 13:56:43
良く読むと HTCPCP準拠の実装じゃなかった

408:デフォルトの名無しさん
09/10/16 14:17:42
◆宣伝、広告◆
腕に自信のあるプログラマは、以下のコンピュータ大富豪大会に参加しましょう。

ひろゆき杯コンピュータ大富豪大会
URLリンク(uecda.nishino-lab.jp)


○What's UECda?

大貧民(または大富豪)は、我が国で最もポピュラーなトランプ・ゲームのひとつでしょう。
このゲームは、1960年頃に日本で生まれたと言われており、海外では、ほとんどプレイされていないようです。
本大会は、その日本固有の人気トランプ・ゲームである大貧民を、人が直接プレイするのではなく、
プレイするコンピュータ・プログラムを作成して持ち寄り、対戦させる大会です。

主催

電気通信大学

409:デフォルトの名無しさん
09/10/16 14:37:38
でたらめ言うな
中国でも有名なゲームだ

410:デフォルトの名無しさん
09/10/16 16:27:54
ふつう海外に中国は入らない

411:デフォルトの名無しさん
09/10/16 16:57:48
>>401
したよ
πいれても1になっちゃったけどね
ほかにもπ/3なんかも1になる

412:デフォルトの名無しさん
09/10/16 17:03:19
πを3.14・・・にしたらなんかできました
なんでπだとだめだったんだろう

413:デフォルトの名無しさん
09/10/16 17:05:22
( ゚д゚)ポカーン

414:デフォルトの名無しさん
09/10/16 17:30:33
なるほど、数値入力の場面で「π」を入力したのか。
んで、たまたまaの初期値が0だったから1になったんだな。
当然、「π/3」を入れても同じ結果なわけだ。

415:デフォルトの名無しさん
09/10/16 18:28:32
PIと入れればよかったのに

416:デフォルトの名無しさん
09/10/16 18:29:26
scanfが数式を勝手に変換してくれると思ってたのか

417:デフォルトの名無しさん
09/10/16 18:35:22
>>415
お前はなにを言ってるんだ

418:デフォルトの名無しさん
09/10/16 18:40:26
まあ言いたいことは分かるけどね…

419:デフォルトの名無しさん
09/10/16 19:46:51
>>414
クソワロタ

420:デフォルトの名無しさん
09/10/16 20:42:20
int i = 3;
このとき
i=i+1;やi++;や++i ;
の意味は分かっていますが、
i = i++;
は未定義の動作になるのですね。
i = ++i;
はどうでしょうか?
これも未定義の動作になりますか?



421:デフォルトの名無しさん
09/10/16 20:54:13
未定義です。

422:デフォルトの名無しさん
09/10/17 00:03:50
ポインタを勉強中なんですが、voidポインタに一度格納したlong値を
表示するにはどうやれば良いのでしょうか。
下記例ではコンパイルが通りません。

long a = 10;
void *p = &a;
printf("%f", *p);

423:デフォルトの名無しさん
09/10/17 00:05:29
ポインタを勉強中です。
voidポインタに格納したlong値を表示するにはどうやれば良いのでしょうか。
次の実装ではエラーが起きてしまいます。

long a = 3.14;
void *p = &a;

printf("%f", *p);


424:デフォルトの名無しさん
09/10/17 00:11:46
>>423
printf("%ld", *((long*)p));


425:デフォルトの名無しさん
09/10/17 00:20:25
なんだか、2ちゃんねるがおかしい。
重くてやってらんね。
もう寝る...

426:デフォルトの名無しさん
09/10/17 01:00:54
重くないのだが・・・

427:デフォルトの名無しさん
09/10/17 01:02:45
>>426
>>425
韓国から攻撃

428:327
09/10/17 01:04:39
レス下さった皆様ありがとうございました.
いつもこのスレにはお世話になってます.m(_ _)m

429:デフォルトの名無しさん
09/10/17 01:07:18
重いよ

430:デフォルトの名無しさん
09/10/17 01:08:34
>>410
でたらめ言うなゴミ


431:デフォルトの名無しさん
09/10/17 01:22:06
>>424
ありがとうございました!

432:デフォルトの名無しさん
09/10/17 02:19:28
どういたしまして

433:デフォルトの名無しさん
09/10/17 03:23:07
(´・ω・`)←さっきポイ捨てされたこれを踏んだ。祝日。

434:デフォルトの名無しさん
09/10/17 03:34:24
今から学ぶとしたらC/C++/Javaどれが一番最初がいい?

435:デフォルトの名無しさん
09/10/17 05:58:02
次に書き込んだときの秒数が1~3ならC、4~6ならC++、7~9ならJava、0なら全部

436:デフォルトの名無しさん
09/10/17 08:44:03
最初はインタプリタの方がなじみやすいと思う


437:デフォルトの名無しさん
09/10/17 08:47:36
Cだったな

438:デフォルトの名無しさん
09/10/17 09:14:04
これか
URLリンク(root.cern.ch)

439:デフォルトの名無しさん
09/10/17 12:20:59
short x;


x = (x+0x4000) >> 15;

このコードの意味を教えてください

440:デフォルトの名無しさん
09/10/17 12:27:49
>>439
if(x+0x4000>=0) x=0;
else x=-1;

441:デフォルトの名無しさん
09/10/17 12:42:07
xたす0掛ける4000が15より十分大きいかどうかの真偽値をxに代入

442:デフォルトの名無しさん
09/10/17 12:44:39
>>はビットシフトで切り捨ての処理だと思うんですが,0x4000 を加算する理由がわかりません

443:デフォルトの名無しさん
09/10/17 12:49:10
実装依存だからこのコードに確かな意味は無いよ

444:デフォルトの名無しさん
09/10/17 12:50:38
>>442
上位1ビットが整数部、下位15ビットが小数部の固定少数で、
四捨五入してんじゃね?

445:デフォルトの名無しさん
09/10/17 13:14:09
classのprivateにしたら、そのクラス以外アクセスできないと聞いていたが
ポインタでメンバーにアクセスできんぞ、いいのかこれ

446:デフォルトの名無しさん
09/10/17 13:18:32
設計上良いか悪いかはあるけど、仕様の上では問題ない

447:デフォルトの名無しさん
09/10/17 13:18:41
>>445
なんか無理やりなことをしないとアクセスできないだろ?
それにここ、Cのスレだし。

448:デフォルトの名無しさん
09/10/17 13:27:48
ぐぐってみたらコンパイル前にしかprivate,publicは影響しないんだな

449:447
09/10/17 13:32:07
よく考えたら、無理やりじゃなくても、メンバ変数のポインタを外にだすメンバ関数があればそうなるのか。

メンバ変数のナマのハンドルやら外にだすなってのは、オブジェクト指向のお作法本によく書いてあるな。

450:デフォルトの名無しさん
09/10/17 14:00:00
>>439
int main(void)
{
short x;
short y;
for(x=-32768;x<=32767;x++)
{
y=(x+0x4000)>>15;
printf("x=%d y=%d\n",x,y);
}
return 0;
}

451:デフォルトの名無しさん
09/10/17 14:03:37
double型の変数にビットシフトはできないですか?

値を2倍、4倍,8倍としたいんですが

452:デフォルトの名無しさん
09/10/17 14:26:32
円周率を出力するプログラムpi.exeがあったとして、これを一度pi.datに出力して

double pi =
#include "pi.dat"
;

とすればpiには円周率が入りますが、一度ファイルに出力をせずにそのままほかのプログラムの出力結果をincludeするといったことはできないでしょうか?

453:デフォルトの名無しさん
09/10/17 14:27:56
指数部があるからね

454:デフォルトの名無しさん
09/10/17 14:34:55
>>452
doubleに入れるくらいの桁数なら、ソースに直書きでいいんじゃね?

455:デフォルトの名無しさん
09/10/17 14:36:22
円周率ってmath.hで定義されてなかったけ

456:452
09/10/17 14:38:24
>>454
すいません円周率は例で、ファイル経由せずにプログラムの出力をincludeする方法が知りたいんです

457:デフォルトの名無しさん
09/10/17 14:38:44
# define M_PI           3.14159265358979323846  /* pi */

458:デフォルトの名無しさん
09/10/17 14:41:34
>>456
sedとか使って、置換すれば

459:お願い!
09/10/17 14:44:02
URLリンク(ha.ckers.org)

このスクリプトをC言語で書き直してください

460:デフォルトの名無しさん
09/10/17 15:01:06
こんにちは。どなたかC♯でBMI計算プログラムをvisual studio 2008 もしくは2005 で作成してアップしてくださいませんか・・・?
そのプロジェクトフォルダ全部をアップお願いします。

461:デフォルトの名無しさん
09/10/17 15:08:27
いつからここは丸投げスレになったんだ?

462:デフォルトの名無しさん
09/10/17 15:10:14
マルチしてるバカがいるんだよ

463:デフォルトの名無しさん
09/10/17 15:19:59
>>456
昔のIOCCCのエントリにこんなのがあった
URLリンク(www0.us.ioccc.org)

同様に、ネームドパイプをうまく使えばできるんじゃないかね

464:デフォルトの名無しさん
09/10/17 16:20:10
#include "/dev/tty○○"
とかしたら

465:デフォルトの名無しさん
09/10/17 16:28:09
何となく書いたら1レス前に既出だった……

466:デフォルトの名無しさん
09/10/17 17:29:57
const float *const hoge;


これはどういったポインタなんでしょうか?;

467:デフォルトの名無しさん
09/10/17 17:31:54
>>451
*2, *4, *8でおk。

468:デフォルトの名無しさん
09/10/17 18:23:44
>>466

const float *hoge;
*hoge = 1.0; //エラー
hoge = NULL; //OK

float const *hoge;
同上

float * const hoge;
*hoge = 1.0; //OK
hoge = NULL; //エラー

469:デフォルトの名無しさん
09/10/17 18:32:38
>>468

ポインタがさす実体は変えれない。
さすところは変えれます

const float *hoge;
*hoge = 1.0; //エラー
hoge = NULL; //OK



float const *hoge;
同上


float * const hoge;
*hoge = 1.0; //OK
hoge = NULL; //エラー

よくわかりません。 *がどこに関連するのかが見えません

470:デフォルトの名無しさん
09/10/17 18:39:53
基数ソートの勉強をしています。

16ビット長の値(unsigned short)を4ビットずつ分割して、その分布を調べて
ソートする、というアルゴリズムらしいのですが、ちょっとわからない点があります。

2^4 = 16 ですから、分布を数えるために使う配列は int count[16] と宣言しました。
16ビット長の値を4ビットずつ分割して(分割された値を A とします)、その分布を調べるわけですが、
教科書にあるコードは

count[A & 0x0f]++;

となっています。
ここで、A & 0x0f するのはどうしてでしょうか?
A は4ビット長なわけですから、大きさ16の配列 count に収まるはずです。

なぜ、わざわざ 0x0f との論理積を求めるのか謎です。
よろしくお願いします。


471:デフォルトの名無しさん
09/10/17 18:41:34
じゃあ
float other = -1.0;
const float *hoge1 = &other;
float const *hoge2 = &other;
float * const hoge3 = &other;
const float * const hoge4 = &other;
のように直してそれぞれコンパイルしてみろ。

472:デフォルトの名無しさん
09/10/17 18:41:36
>>466
float型のconst変数を指すポインタ型のconst変数

float a; // float型の変数
const float b; // float型のconst変数
const float *c; // float型のconst変数を指すポインタ型の変数
const float *const d; // float型のconst変数を指すポインタ型のconst変数

473:デフォルトの名無しさん
09/10/17 18:43:49
>>470
unsignedで4bitに収まる保証があるなら論理積とらなくてもいいよ

474:デフォルトの名無しさん
09/10/17 18:49:37
>>470
それだけじゃ分からん。Aの時点ではまだ4bitに分割しきれてないとか。

475:デフォルトの名無しさん
09/10/17 18:50:39
>>473
あ、すみません。。
ソース読み直してみたら、僕が勘違いしていますた。

忘れてください。

476:デフォルトの名無しさん
09/10/17 21:37:57
低水準ファイル入出力を使うメリットを教えてください

477:デフォルトの名無しさん
09/10/17 21:39:11
>>476
それを聞くような人にとってはメリットはありません

478:デフォルトの名無しさん
09/10/18 03:40:33
C言語始めたばかりでまだifとforぐらいしか使えません
2で割れる数、5で割れる数、2と5で割れる数を1000個目まで出力したいのですがうまくカウントできません

for ( k = 1 ,count =1 ; count <= 1000 ; k++, count=count+1) {
if( k%5==0 && k%2==0){
printf("%dは5,2で割り切れます。%d回目 \n" , k,count) ;
}else if(k%2==0){
printf("%dは2で割り切れます。 %d回目 \n" , k ,count) ;
}else if(k%5==0){
printf("%dは5で割り切れます。 %d回目 \n" , k,count ) ;
} }

こんな感じで書いたのですがどこが悪いんでしょうか?

479:デフォルトの名無しさん
09/10/18 03:45:05
別に悪くないよ?

480:デフォルトの名無しさん
09/10/18 04:14:04
for ( k = 1 ,count =1 ; count <= 1000 ; k++) {
if( k%5==0 && k%2==0){
printf("%dは5,2で割り切れます。%d回目 \n" , k,count++) ;
}else if(k%2==0){
printf("%dは2で割り切れます。 %d回目 \n" , k ,count++) ;
}else if(k%5==0){
printf("%dは5で割り切れます。 %d回目 \n" , k,count++) ;
} }

よくわからんが、こういうこと?

481:デフォルトの名無しさん
09/10/18 12:18:09
if( k%5==0 && k%2==0){

これはこうも書けるな
if( k%10==0 ){

482:デフォルトの名無しさん
09/10/18 12:26:23

数学厨おつ

483:482
09/10/18 12:27:37
あ、なんでもないっす^^
さーせん w

484:デフォルトの名無しさん
09/10/18 12:32:03
なんでもないことないだろう
そこんとこ詳しく教えてくれないかな

485:デフォルトの名無しさん
09/10/18 12:33:56

a='d'
b='h'

fprintf(file,"abc%c efg%c",a,b);
とすると出力が

abcd
efgh

といった具合に自動で開業されてしまいます。
させな方法はありますか?

abcd efgh
と出力させたい

486:デフォルトの名無しさん
09/10/18 12:34:43
>>480
ありがとうございます
望んでいたような結果が出力されました

ちなみに丁度1000個目だけを出力することってできますか?
if(count==1000)のときだと違う結果が出力されてしまいます。

487:デフォルトの名無しさん
09/10/18 12:44:20
>>485
改行されてるのはどうやって確認したの?
実際に入ってる改行コードは何

488:デフォルトの名無しさん
09/10/18 12:48:45
>>487
windows、VC++でコンパイルしてできた.exeを実行しました。
改行コード \n,\rとかですか?


489:デフォルトの名無しさん
09/10/18 12:58:28
fscanfで読もうとしている、に1000ペリカ

490:デフォルトの名無しさん
09/10/18 13:02:29
fscanfはつかってないのに?ww

491:toya
09/10/18 13:12:59
wikibooksでC言語の教科書を執筆しています。協力者求む。
URLリンク(ja.wikibooks.org)

492:デフォルトの名無しさん
09/10/18 13:13:29
全角スペース。


493:デフォルトの名無しさん
09/10/18 13:14:56
C体験記じゃんw

494:デフォルトの名無しさん
09/10/18 13:29:25
>>488
いやいや、実行してできたファイルをダンプしたりしてみてよ
デバッガは使えないのかな?

495:デフォルトの名無しさん
09/10/18 13:32:34
その実際のコード貼れよ。
その例みたいに全角スペースなのか?


496:デフォルトの名無しさん
09/10/18 13:41:22
>>486
for(k=1,cnt=1; ; k++) if(k%2==0 || k%5==0) if(cnt++ == 1000) break;

printf("%d", k);

497:デフォルトの名無しさん
09/10/18 13:47:32
>>485
別のプロセスで出力ファイルが開かれてたりして、実際には書き込まれてないんじゃないかな。

498:デフォルトの名無しさん
09/10/18 13:56:09
>>496
そのプログラムちょっとミスって
fork(k=1,cnt=1; ; k++) if(k%2==0 || k%5==0) if(cnt++ == 1000) break;
printf("%d", k);
ってやったら大変なことになっちゃったんだけど。
絶対落ちないって有名なLinuxが二度と起動しなくなった。

499:デフォルトの名無しさん
09/10/18 13:58:58
コンパイル通るのか?

500:デフォルトの名無しさん
09/10/18 13:59:53
アホか。
ゾンビプロセスが増えただけで、カーネルは落ちてないだろ。
死ねよマルエツマカ。

501:デフォルトの名無しさん
09/10/18 14:01:28
コンパイルできない

502:デフォルトの名無しさん
09/10/18 14:01:28
>>498
はいはい、面白い面白い。
これで満足?

503:デフォルトの名無しさん
09/10/18 14:14:13
>491
間違っている部分は、直してあげた方がいいのか。

>498
俺様fork()ならたぶんコンパイルできると思うけど、一般的なfork()ではコンパイルできないと思われる。

504:デフォルトの名無しさん
09/10/18 14:26:38
またマルエツマカが荒らしてる

505:485
09/10/18 14:38:59
全角はたまたまみすた
URLリンク(oshiete1.goo.ne.jp)
ぐぐったけどたぶんこういうことだとオモワレ。

それにしても自動改行ってなんだ?・・・

506:485
09/10/18 14:42:58
全角はたまたまミスた
URLリンク(oshiete1.goo.ne.jp)
ググったけどたぶんこういうことだと思われ。

それにしても自動改行ってよくわからん

507:デフォルトの名無しさん
09/10/18 14:54:14
コード貼れっつーの。
勝手に改行なんてしねえよ。
何かミスってるだけだろ。

508:デフォルトの名無しさん
09/10/18 15:13:54
>>506
どうやって改行してることを確認したかってのはまさにそのことが知りたかったのだけど。
使ってるエディタやコントロールが、自動で折り返したんじゃないかと。
だからファイルに出力したらダンプやバイナリエディタで改行コードが入ってるのか調べてみなさいよ、と。

509:デフォルトの名無しさん
09/10/18 17:59:04
Q1:
QUESTION1;        ←ヘッダーにあるdefineで問題呼び出し
fgets (buf, sizeof (buf), stdin);
sscanf (buf, "%d", &ans);

if (1 <= ans && ans <= 3 ){
if (ans == 2){
printf("正解\n");
point++;
}else{
printf("はずれ\n");
}
}else{
printf("1~3の数字おして。もっかい。\n");
goto Q1;
}

Q2:
ans = 0;
QUESTION2;
以下ループ

3択クイズ形式学習プログラムを作ったのですが、fgets→sscanfのところで数字を入力してEnterを押すと、
次の問題のif文のelseが1度実行される(1~3を押せエラー→Gotoで問題が2回表示される)のですが、
なぜそうなるのかわからず対処できません。
単純にエンターを1回押してるのに入力を2回(複数回)受け付けてるだけなんでしょうか・・?
もし、そうならどのように対処すればいいのでしょうか。


510:デフォルトの名無しさん
09/10/18 18:14:28
これの前後の部分に問題ありってことだね。
「問題」ってのは question じゃなくて problem な。

511:デフォルトの名無しさん
09/10/18 18:17:07
>>510

?

3択クイズの問題 = question

512:デフォルトの名無しさん
09/10/18 18:28:28
すげえ読解力だな。

513:デフォルトの名無しさん
09/10/18 20:10:08
const char * name[] = {"aaa" , "bbb" , "ccc" , "ddd" , "eee" , "fff"};
このとき、
name
の要素数を取得するにはどうすれば良いでしょうか?


514:513
09/10/18 20:12:38
すみません。
ちょっと撤回します。

失礼しました。



515:デフォルトの名無しさん
09/10/18 20:23:19
>>119
for (cnt = 0; cnt < no; ++cnt) {}の方が見慣れてるって本当?
入門書ってだいたい
for(cnt = 0; cnt < no; cnt++){}ってかいてあるけど

516:デフォルトの名無しさん
09/10/18 20:32:56
>>515
「見慣れてる」ってのは0からカウントするってところだろ。

517:デフォルトの名無しさん
09/10/18 20:47:42
> cnt++

その世代に言わせると整数は i だろ

518:デフォルトの名無しさん
09/10/18 20:54:28
cntならiのほうがいいな。

519:デフォルトの名無しさん
09/10/18 21:06:16
>>515
C++の流儀だな。
cnt++より++cntの方が、オブジェクトを生成しない分高速。

520:デフォルトの名無しさん
09/10/18 21:36:59
>>496
できました
ありがとうございました

521:デフォルトの名無しさん
09/10/18 21:37:46
usage: command.exe ~みたいなコマンドのヘルプを表示させるとき、決まった構文ルールはあるの?
省略可能なオプションは[]とか、必須オプションは<>とか。

522:デフォルトの名無しさん
09/10/18 21:48:53
正規表現の簡易型みたいな感じだろ。

523:デフォルトの名無しさん
09/10/18 23:24:16
char型の変数の中身を参照するときに文字コードとして扱いたいときは
if(moji[0] == 115)
のような形でいいんでしょうか?

524:デフォルトの名無しさん
09/10/18 23:28:04
はい
ただし char は符号付きの場合があるので 128 以上の値の扱いに気をつけて

525:デフォルトの名無しさん
09/10/19 02:08:01
stdinの中身を確認する方法ないですか?
空かどうかわかるだけでもいいです。

526:デフォルトの名無しさん
09/10/19 02:19:08
>>525
環境依存しない方法は無い

527:デフォルトの名無しさん
09/10/19 02:19:32
空とはどういう状態か?

528:デフォルトの名無しさん
09/10/19 02:25:11
feof() 辺りかな?
つーか、これを使う機会って無いよな。

529:デフォルトの名無しさん
09/10/19 02:27:10
ああ、もしかして stdin の接続先のことなのかな?
質問が曖昧で難しいな。


530:デフォルトの名無しさん
09/10/19 02:29:10
エスパーに期待してるんだよ

531:デフォルトの名無しさん
09/10/19 02:37:59
「中身」ってなんだよ?
普通に getchar() で読めば良いだろ。


532:デフォルトの名無しさん
09/10/19 03:21:48
エスパーすると、kbhit

533:デフォルトの名無しさん
09/10/19 03:33:50
入力した数字が素数かどうか判別するプログラム作ったんだけど2と3が判別できない
どこが違ってる?

for(b = 2 ; b<=a/2 ; b=b+1){
if(a%b == 0){
printf("%dは素数ではありません。" ,a);
break;
} else {
printf("%dは素数です。" ,a);
break;
}
}

534:デフォルトの名無しさん
09/10/19 03:45:08
判別の基準が間違ってる。

535:デフォルトの名無しさん
09/10/19 03:50:45
4とか5なら判別できるのか?それ


536:デフォルトの名無しさん
09/10/19 03:53:19
9とか15とか

537:デフォルトの名無しさん
09/10/19 04:16:55
b = 2 ; b<=a/2

ってaが2や3の時はね

538:デフォルトの名無しさん
09/10/19 04:43:11
ループの意味がないw

539:デフォルトの名無しさん
09/10/19 06:47:26
||って一つ目左が真なら右の判定を行うってこと?
偽なら右判定はしないのか?

540:デフォルトの名無しさん
09/10/19 06:56:31
||は左が真の時点で右の判定を行わない。
&&は左が偽なら右の判定を行わない。

541:デフォルトの名無しさん
09/10/19 07:24:30
ありがとう

542:525
09/10/19 07:49:18
void sgets(char *buf,int n)
{
int i;
char c;
for(i=0;i<n;i++){
c=getchar();
if(c=='\n'){
break;
}
buf[i]=c;
}
/*入力バッファを空読みする*/
if(i==n){
while(getchar()!='\n');
}
/*文字数が一文字以外は最後に'\n'を加える*/
if(i!=1){
buf[i]=NULL;
}
}
525です。
上の関数を呼び出した後、入力バッファが空読みされたかどうかをmainで確認
する方法を教えてください。

543:デフォルトの名無しさん
09/10/19 08:31:14
>542
ひどいコードだ

544:デフォルトの名無しさん
09/10/19 09:04:39
>>542
空読みする方法は無いと思え。
初心者なら尚更

545:デフォルトの名無しさん
09/10/19 17:00:38
再帰を使わないで処理する方法はありますか?

546:デフォルトの名無しさん
09/10/19 17:04:12
>再帰を使わないで処理する方法はありますか?
再帰を使わないで処理する方法はないと思うのですか?

547:デフォルトの名無しさん
09/10/19 17:15:05
>>542
EOFで確認するとか?

548:デフォルトの名無しさん
09/10/19 17:31:13
総ての再帰は展開できるはずなんだっけか

549:デフォルトの名無しさん
09/10/19 17:35:27
再帰ってなんですか?
まだ勉強をはじめたばかりなのでわかりません。


550:デフォルトの名無しさん
09/10/19 17:41:03
void func()
{
func();
}

↑みたいなのが再帰です

551:デフォルトの名無しさん
09/10/19 18:00:31
数学的帰納法のなかまです

552:デフォルトの名無しさん
09/10/19 18:02:56
>>547
EOFは読もうとしないと意味がない。
従って、入力が空かどうかは「読み出そうとしたときは空だったかどうか」わかるというだけ。

553:デフォルトの名無しさん
09/10/19 20:05:40
箱の中の猫は見ようとしたときだけ生きてるか死んでるかわかるというだけ。

554:デフォルトの名無しさん
09/10/19 20:06:13
うぜえよお前。

555:デフォルトの名無しさん
09/10/19 20:32:04
>>553
え?
見ようとしなければ生きてるか死んでるか分からないが、どっちかだと言っている?

556:デフォルトの名無しさん
09/10/19 21:30:11
箱の中の猫に心拍計を取り付けて、遠隔でモニタすれば箱を開けなくても生死の別は判断可能


557:デフォルトの名無しさん
09/10/19 21:33:23
それは箱に覗き窓が付いてるのと同じこと

558:デフォルトの名無しさん
09/10/19 21:37:54
それが量子的な現象の影響だとしても
確率的だと言うのはマクロスケールでは現実的ないと思うよ

559:デフォルトの名無しさん
09/10/19 21:55:52
>>547
改行まで空読みしてるだけだろ?
なんでEOFが関係あるんだ。

上のほうの「空読みする方法はない」とか、なんか空読みが
別のものと勘違いされる。

560:デフォルトの名無しさん
09/10/19 22:10:25
542にEOFのチェックがないんだけど

561:デフォルトの名無しさん
09/10/19 22:15:03
>>556
心拍計が壊れている可能性がある
心拍計が正常かどうかを確かめる装置を用意してもそれが壊れているかもしれない
以下無限ループ


562:デフォルトの名無しさん
09/10/19 22:25:16
つサーモグラフィー

563:デフォルトの名無しさん
09/10/19 22:29:49
だからそういう話しじゃないが
サーモグラフィーで観測した瞬間に猫の生死状態が確定するというお話。

564:デフォルトの名無しさん
09/10/19 23:25:35
そもそも箱の中に猫が存在しているかどうかや箱の中に猫が入るような空間が本当に存在しているかどうかなんかも観測しなければ未確定。

565:デフォルトの名無しさん
09/10/19 23:35:50
物理板でやれぼけども

566:デフォルトの名無しさん
09/10/19 23:39:09
物理学者とは犬猿の仲だろjk

567:デフォルトの名無しさん
09/10/19 23:42:03
>>565
×ぼけども
○ぼけ

×物理板
○50代板

568:デフォルトの名無しさん
09/10/20 00:30:25
そのジョーク、いまいち面白くない。

569:デフォルトの名無しさん
09/10/20 00:37:05
ぼけは、私が見ているときにしか、そこにいないのか

570:デフォルトの名無しさん
09/10/20 00:47:18
じゃあ人間が箱の中に入れば良いだろ馬鹿が

571:デフォルトの名無しさん
09/10/20 01:49:45
>>559
お前こそ質問者の意図を分かってるか?

要するに、これを訊いてるわけ
URLリンク(www.nurs.or.jp)



572:デフォルトの名無しさん
09/10/20 02:00:05
それを訊いてるんじゃないでしょ?
> 実際に文字を読み込まずに読む文字があるかどうか確かめ
られたかどうかを訊いてるんじゃないの

573:デフォルトの名無しさん
09/10/20 03:35:23
#if defined(DEBUG) | defined(_DEBUG)

#if defined(DEBUG) || defined(_DEBUG)
の違いってわかります?要は|と||なんですが。。。

574:デフォルトの名無しさん
09/10/20 04:16:52
× Apple II
○ Apple ][

575:デフォルトの名無しさん
09/10/20 04:22:40
Xeno091017 正式版
URLリンク(koreawatcher.at.infoseek.co.jp)
・正式版として最初のリリース。
・Jane終了時の挙動のみ091015試作品から変更された。
────────────
予告どおり、正式版をリリースしました。×ボタンのツールチップ
ヒントに関して、真魚のソースを参考にして修正を試みました。
JaneNidaの開発は事実上終了です。2chの仕様変更などで
対応するかもしれません。

576:デフォルトの名無しさん
09/10/20 05:27:19
>>575
スレリンク(tech板)
こいつ、ここでも宣伝していやがる。
こりゃあ通報かな。

577:576
09/10/20 05:28:53
スレリンク(tech板)
ごめんこっちだった。


578:525
09/10/20 07:45:46
525です。
いろいろ回答ありがとうございます。
自分の意図としては>>571で言っている通りで、それをmainで確かめる
方法を探していたんですけど、難しいのであきらめて違う方法を探してみます。
わかりづらい質問ですいませんでした

579:523
09/10/20 12:05:26
>>524
ありがとうございます
unsigned charを使えば問題なさそうでした

トリップ生成プログラムなんかを試しに作ってみたいんですがgccでコンパイルしたところ以下のエラーが出ます
trip.c:36: error: parse error before "salt"
trip.c:79: error: incompatible types in assignment
79行目のエラーに関してはきっと自分がcrypt関数についてよくわかってないだけな気がするんですが、
36行目のエラーの原因がいまいちわかりません
今までこういう構文エラーの原因は大体前の行に;を忘れていたくらいだったのですが・・・
URLリンク(f50.aaa.livedoor.jp)

どうかよろしくお願いします

580:デフォルトの名無しさん
09/10/20 12:09:56
> else(salt[i] == '`')

このような構文は無い
elseに条件式は付かない

581:デフォルトの名無しさん
09/10/20 13:23:33
>>573
|はビット演算のORで||は論理演算のORじゃなかろか

582:デフォルトの名無しさん
09/10/20 13:35:35
][ 表記は10kBASICからだな

583:579
09/10/20 14:01:41
>>580
参考書引っ張ってきて読んだのにこんなミスするなんて・・・
どうもありがとうございました

584:デフォルトの名無しさん
09/10/20 15:18:47
>>581
俺もそう思う。
上は必ず両辺が評価され、下は必ずしも両辺が評価されないという差も出てくるが、
それがこの場合にどう影響するかがわからん

585:デフォルトの名無しさん
09/10/20 15:30:56
事実上、全く同じだね。

586:デフォルトの名無しさん
09/10/20 21:38:46
3項演算子に空文は使えないんですか。そういう場合はif文で冗長にやるしかないんですか
(aaa == bbb) ? flag = true : ; ;

587:デフォルトの名無しさん
09/10/20 21:52:35
>>586
flag = (aaa == bbb) ? true : flag ;

というかそこに代入処理を書くのはif文が冗長だと思える人から見てスマートな記述なの?

588:デフォルトの名無しさん
09/10/20 21:54:45
(aaa == bbb) ? flag = true : 0 ;


589:デフォルトの名無しさん
09/10/20 22:04:25
いまどきのコンパイラなら3項演算子もif文(処理が一行)もかわらない



ってことはないですか?

590:デフォルトの名無しさん
09/10/20 22:12:38
コンパイラの短縮処理は異常

591:デフォルトの名無しさん
09/10/20 22:19:44
>>589
「かわらないから、読みやすいifのほうがいいじゃん」ってこと?

592:デフォルトの名無しさん
09/10/20 22:27:14
短い場合は3項のほうがifより見やすい俺

593:デフォルトの名無しさん
09/10/20 22:32:57
今読んでるOCamlの本は、

if x < 30 then kihonkyu + x * jikyu
      else kihonkyu + x * yugu_jikyu

より

kihonkyu + x * (if x < 30 then jikyu else yugu_jikyu)

のほうを薦めてるな。

594:デフォルトの名無しさん
09/10/20 22:45:51
>>593
そここそ3項演算子だと思うが、その本ではifですか

595:デフォルトの名無しさん
09/10/20 22:48:44
OCamlっていう言語だたのね。
3項演算子が無い言語ってことかな。

596:デフォルトの名無しさん
09/10/20 22:50:59
値を持ってるifと条件演算子は同じだろ。


597:デフォルトの名無しさん
09/10/20 22:52:57
>>593
これ見て「うわifだ、条件演算子がない言語って不便ね」みたいな
感想をもつやつは、たぶん条件演算子も使えてない。

598:デフォルトの名無しさん
09/10/20 22:54:13
そんな感想持ってるやつは今のところいなさそうだが、誰に向けてレスしてんだ?

599:デフォルトの名無しさん
09/10/20 22:59:35
レスじゃないよ。
>>593 を見て、ifと条件演算子の脳内置き換えができないやつを評してる。

600:デフォルトの名無しさん
09/10/20 23:01:20
いるかどうかもわからないヤツを想像してまで叩きたいのかw

601:デフォルトの名無しさん
09/10/20 23:03:53
話がずれてるな。
処理したくない場合、どう書くかについての話だろ?
>>593はななめってる

602:デフォルトの名無しさん
09/10/20 23:05:42
>>594だけ見るとそう思っているかのように見えるけど>>595で理解してるようだしな
>>597は3項演算子に特別な思い入れでもあるのかねぇw

603:デフォルトの名無しさん
09/10/20 23:07:03
こんなマヌケな書き込みしといて、まだバレてないとか、ごまかせるとか思ってるのか。



604:デフォルトの名無しさん
09/10/20 23:09:32
>>601
いやぜんぜんななめじゃないよ。
条件演算子を効率のためにつかってるって思ってるやつに、
そうじゃないって例を示しただけ。

605:デフォルトの名無しさん
09/10/20 23:10:24
>>591-603
誰にレスしてるかくらいはっきりさせろ蛆虫共

606:デフォルトの名無しさん
09/10/20 23:11:23
>>604
>>593の下の方がいい理由を言ってみろ

607:デフォルトの名無しさん
09/10/20 23:13:06
こんな簡単な例じゃどっともかわらねぇよ

608:デフォルトの名無しさん
09/10/20 23:13:08
>>586
使えない。値を返す必要があるから空文があったら困るだろ。
どうしてもってことなら適当な変数でx=xとか入れときゃいいんじゃね?

609:デフォルトの名無しさん
09/10/20 23:17:04
>>586
> (aaa == bbb) ? flag = true : ; ;
つーか、式を返す形で使わなきゃダメだろ。色々と。

610:デフォルトの名無しさん
09/10/20 23:19:33
>>606
みて分かれよ。
プログラミングの基礎って本に載ってるぞ。
サイエンス社2300円。

611:デフォルトの名無しさん
09/10/20 23:22:37
高い

612:デフォルトの名無しさん
09/10/20 23:25:00
>>604
> 条件演算子を効率のためにつかってるって思ってるやつに、
> そうじゃないって例を示した
だから、ななめじゃん

613:デフォルトの名無しさん
09/10/20 23:26:04
三項演算子は値を返すから

変数 = 条件?成功:失敗;
return 条件?成功:失敗;

みたいな形でよく使われる。
良く使われるということは、そう書くとみんな理解しやすい。
コンパイラ的に見ると

if ( 条件 ) 変数=成功 else 変数=失敗;

と吐き出されるコードは多分一緒。
逆に言えば、値を返す必要のないときに
三項演算子を使うのは理解しにくい?

614:デフォルトの名無しさん
09/10/20 23:27:15
C++だと初期化でたまに使いたくなる

615:デフォルトの名無しさん
09/10/20 23:30:50
>>612
「ななめじゃん」って一言レスしてれば、ななめだってことにできると思ってるのか。

616:デフォルトの名無しさん
09/10/20 23:31:49
いまだに三項演算子なんて言う人がいるとは

617:デフォルトの名無しさん
09/10/20 23:33:46
if ( 条件 ) 変数=成功 else 変数=失敗;
より
( 条件 ) ? 変数=成功 : 変数=失敗;
の方がコード量減るからいいじゃん。
プロはこの辺の効率も求めていかなければならない。

618:デフォルトの名無しさん
09/10/20 23:34:57
七行スレから来ました

619:デフォルトの名無しさん
09/10/20 23:48:36
ご教授お願い致します。

以下のような文字列から数字部分(10桁)の「1111111112」だけを抜き出したいと思います。
但し以下のような条件があります。
・数字の前は必ず「AAA」があります。
・下記はカンマ区切りだけど、カンマ区切りとは限りません
-------------------------------------
あいうえお,AAA1111111112,かきこけこ
-------------------------------------

strstr関数など、いろいろ試してみたのですがどうもうまくいきません。
皆様、よろしくお願い致します。

こんなのもわからなくて恥ずかしいです。。。。

620:デフォルトの名無しさん
09/10/20 23:49:49
宿題は宿題スレへ

621:デフォルトの名無しさん
09/10/20 23:49:57
>>617
> ( 条件 ) ? 変数=成功 : 変数=失敗;
変数 = ( 条件 ) ? 成功 : 失敗;
普通こうでしょ…?


622:デフォルトの名無しさん
09/10/20 23:50:49
>>619
頑張れ

623:デフォルトの名無しさん
09/10/20 23:55:02
了解。宿題すれにいきマイケル。

624:デフォルトの名無しさん
09/10/21 00:07:20
>>621
同じ変数だとはどこにも…

625:デフォルトの名無しさん
09/10/21 00:10:42
>>624
代入するのは成功か失敗かなのに?
あとから二ヶ所でチェックするんですか?(笑)


てか"文"を書くなと。


626:デフォルトの名無しさん
09/10/21 00:10:50
>>624
>>587

627:デフォルトの名無しさん
09/10/21 00:11:39
>>619
sscanfについてもう少し調べる

628:デフォルトの名無しさん
09/10/21 01:00:46
>>586
aaa == bbb && flag = true;


629:デフォルトの名無しさん
09/10/21 01:03:33
if ( aaa == bbb || (flag = false,0) ) flag = true;


630:デフォルトの名無しさん
09/10/21 01:12:10
アホだw

631:デフォルトの名無しさん
09/10/21 01:21:36
>>628
括弧が不足してる

632:デフォルトの名無しさん
09/10/21 02:22:07
>>629
なぜfalseにしたし

633:デフォルトの名無しさん
09/10/21 03:09:30
ちょっとした質問なんですが
scanf関数で数字を入力する際に
数字を打ち込みエンターキーを押すと改行してしまいます
もう一度数字を入力すると、前に打ち込んだ数字が認識されます
二度目の数字を入力しないと、ずっと改行しつづけます

この仕様はどうにかならないんでしょうか

634:デフォルトの名無しさん
09/10/21 03:12:02
scanf()の使い方を間違ってる

635:633
09/10/21 03:14:31
>>634
えっ

636:633
09/10/21 03:17:40
今見たら、>>634さんの言うとおり
scanf()の中に\nを混ぜてしまっていました

お粗末な質問に答えていただき有難うございました

637:デフォルトの名無しさん
09/10/21 07:09:37
うむ

638:634
09/10/21 07:49:24
お前が言うなw

639:デフォルトの名無しさん
09/10/21 09:59:16
よきにはからえ

640:デフォルトの名無しさん
09/10/21 10:05:31
条件演算子を三項演算子と呼んで疑問を感じないようではいけないな。
単項、二項、三項は項の数を問題にしているのであって条件式であることは無関係でしょ?

641:デフォルトの名無しさん
09/10/21 10:15:03
ふーん

642:デフォルトの名無しさん
09/10/21 12:34:34
どっちでもいいや

643:デフォルトの名無しさん
09/10/21 14:39:25
Aのプログラムから数秒後にBのプログラムに切り替えたいです。
そういった時にはtime関数で現在時刻を取得してからでないとだめなんですか?
プログラムの組み方がよくわからないので教えてください


644:デフォルトの名無しさん
09/10/21 14:50:06
>>643
標準関数だけでは無理があるので、環境依存スレでどうぞ。

645:デフォルトの名無しさん
09/10/21 14:50:50
現在時刻は要らないだろ。
開始からの経過時間さえ判ればよい。
だから普通は clock() を使う。

646:デフォルトの名無しさん
09/10/21 14:54:39
>>644


647:デフォルトの名無しさん
09/10/21 15:02:19
>>646
time()だけでやるのは待ちループが必要になって現実的でないということは理解している?

>>645
あんたも同類か。ついでに言えば、clock()だからと言ってtime()と手間がさして変わるわけではないが。

648:デフォルトの名無しさん
09/10/21 15:03:00
sleepしてexecすればいいのでは

649:デフォルトの名無しさん
09/10/21 15:27:53
それは標準ではないだろ。

650:デフォルトの名無しさん
09/10/21 16:05:25
とはいえ、POSIXに準拠しとけば初心者が使う大抵の環境で動くんじゃなかろうか。

651:デフォルトの名無しさん
09/10/21 16:21:56
ポインタ変数の勉強しています。初心者です。
int i;
int *ip = &i;
2行目のコードの記述がおかしいです。
ipはアドレスを保持するポインタ変数で、*ipはポインタが指し示す領域の内容ですよね?
*ipには3とか-1といった整数値が入るものだと思っていましたが上の例ではアドレスを代入しています。
アドレスも整数に分類される値ということでしょうか。
これでもコンパイルが通るので何が何だかさっぱりです…

652:デフォルトの名無しさん
09/10/21 16:26:46
int *ip は、 int* ip と思えばわかりやすいかな。
int* という型なのだ。でも int* p1, p2とかやるとはまるから注意な。

653:デフォルトの名無しさん
09/10/21 16:29:35
宣言時の代入は、初期化の利便性のために少し特殊になっている。
コンパイルの結果は変わらないから、気に入らなければ宣言時代入は使わなくてもいい。

654:デフォルトの名無しさん
09/10/21 16:30:49
>>652
ほざけ。

655:デフォルトの名無しさん
09/10/21 16:35:17
分かったようで分からないようではっきりしませんが、つまり
int *ip = &i;
は置き換えると
int *ip
ip = &i;
ですか。

656:デフォルトの名無しさん
09/10/21 16:36:36
もしかしたらスレ違いかもしれませんが質問させてください。
 
C言語を始めたばかりの初心者です。
LSI C-86 Ver3.30c 試食版というものを使っています。
コンパイルをして、コードをコマンドプロンプトで表示させると、
日本語が文字化けしてしまいます。
コンパイルもできているし、アルファベットや数字はきちんと出るのですが……。
どうすれば日本語が表示できるようになるのでしょうか?
ぐぐってもよく判らなかったため、質問させていただきました。
どうかよろしくお願いします。

657:デフォルトの名無しさん
09/10/21 16:37:32
>>656
悪いことは言わないから、そのコンパイラは捨てなさい。
それはもう、10年以上も前のパソコン通信時代の代物だ。

658:デフォルトの名無しさん
09/10/21 16:43:00
>>655
です。

659:デフォルトの名無しさん
09/10/21 16:48:58
>>658
ありがとう。あやうく誤解するところでした。。

660:デフォルトの名無しさん
09/10/21 16:50:22
>>656
文字コード体系が違う。
以前の Windows では CP-932 が使われていたが、
最近は UTF-16LE に変わってきている。
古いソフトなどを使うと、それらが混在するので文字化けすることがある。

ソースコードと表示系の文字コードを同じものに揃えれば問題ない。


661:デフォルトの名無しさん
09/10/21 16:57:50
個人的には Turbo-C 2.01 がオススメ。
軽量・高速で使いやすく、変な制限もない。


662:デフォルトの名無しさん
09/10/21 17:01:08
>>657
>10年以上も前のパソコン通信時代
20年前ですw

663:デフォルトの名無しさん
09/10/21 17:04:55
16ビットのコンパイラはおすすめ出来ません。
32ビットよりも難しいです。

664:デフォルトの名無しさん
09/10/21 17:16:27
selectでSleepの代わりに出来ない?

665:デフォルトの名無しさん
09/10/21 17:30:56
>>664
できなくはありませんが、厳密には違う動作です。POSIXならusleep()という選択肢もありますが。

666:デフォルトの名無しさん
09/10/21 17:41:34
UTF16でもコンパイラ通るの?
エラー出るだろ?

667:デフォルトの名無しさん
09/10/21 17:42:13
そりゃ環境による

668:デフォルトの名無しさん
09/10/21 20:10:15
文字列をセットする関数を作りたいのですが、どうすればいいですか?
下のソースは間違ってますが、
やりたいことは、値によって、aaa、bbbを出力したいのです。
コンパイラに依存しない?標準のC言語の範囲でお願いします。

void hoge(){
char s[256];
setText(0,s);
printf("%s\n",s); // aaa を出力したい
settext(1,s);
printf("%s\n",s); // bbb を出力したい
}
void setText(int n , char *str){
if (n == 0) {
strcpy(str,"aaa");
}else{
strcpy(str,"bbb");
}
}

669:デフォルトの名無しさん
09/10/21 20:13:39
それで良いじゃん。

670:デフォルトの名無しさん
09/10/21 20:14:37
>>668
setTextがsettextになってる以外は別に間違ってないぞ

先頭に
#include <stdio.h>
void hoge();
void setText(int n , char *str);
int main(){ hoge(); return 0; }
を付ければ問題なく動く

671:デフォルトの名無しさん
09/10/21 20:32:14
>>669-670
これでよかったんですね。
どうもありがとう。

672:656
09/10/21 22:15:16
みなさま本当にありがとうございます……。
コンパイラが古いのですね。
Turbo-C 2.01というものをダウンロードしてみることにします。
本当にありがとうございました。

673:デフォルトの名無しさん
09/10/21 22:31:22
せっかくMicrosoftがVisualStudioを無料で配布してるのに、なんで初心者は使わないんだ?
BCCとかLSI-Cよりよっぽど使いやすいのに。
どうしてもコマンドラインがいいっていうんならLinux入れてgcc使うべき。

674:デフォルトの名無しさん
09/10/21 22:33:58
mingwでいいよ.古いけど

675:デフォルトの名無しさん
09/10/21 23:55:53
Cマシンとかいう奴を使え。

676:デフォルトの名無しさん
09/10/22 00:02:31
つーマシン作れよ

677:デフォルトの名無しさん
09/10/22 00:03:34
VisualStudioはごちゃごちゃしてるからだよ
分厚い、単なる取扱説明書みたいなものが本屋に溢れてる

678:デフォルトの名無しさん
09/10/22 00:12:01
VCはC++標準への準拠度は低いし
Cライブラリがグローバル名前空間を汚染してるし
勉強には向いてないよ。

679:デフォルトの名無しさん
09/10/22 00:12:33
つーか、学習段階なら日本語周りは後回しにしたほうが良いんじゃね。
とりあえず ASCII 文字だけで一通りやってみたら?


680:デフォルトの名無しさん
09/10/22 00:14:55
C言語の学習にはBCC+cpadが理想的

681:デフォルトの名無しさん
09/10/22 00:19:08
お手軽ではあるが、理想的ではない

682:デフォルトの名無しさん
09/10/22 01:15:22
関数の引数に構造体を渡す場合に値を書き換えない場合は値渡しにするのが一般的ですか。ポインタ渡しの方がデータのコピー量が少ないのでどっちがいいのか悩みます。

683:デフォルトの名無しさん
09/10/22 01:22:26
ポインタ渡ししましょう。

684:デフォルトの名無しさん
09/10/22 01:34:44
好きな方にすれば良いよ。

685:デフォルトの名無しさん
09/10/22 01:43:45
>682
foo_t foo(const struct foo *foo);
最後のfooは、foo()の名前(シンボルへのポインタ)を関数のスコープで別の型のシンボルfooで上書きしているから、barの方がいいか。
まぁ、なんだ、const修飾しとけと言いたかったんだ。

686:デフォルトの名無しさん
09/10/22 02:59:51
>>685
つまりなんだ、関数名と構造体名と変数名は同時におなじものを使えるが、いまいちよくないということか

687:デフォルトの名無しさん
09/10/22 03:14:28
構造体のタグは名前空間が違うからどうでもいいよ

688:デフォルトの名無しさん
09/10/22 03:20:18
>687
そんなことはわかっているんだよ
関数名と変数が同じ名前だから、再帰呼び出しや関数ポインタが使えないと言っているわけで。

689:デフォルトの名無しさん
09/10/22 03:22:01
>>688
おまえへのレスじゃねえよアホが

690:デフォルトの名無しさん
09/10/22 03:25:10
粘着するつもりは無いが、
>688の変数というと語弊があるので、s/変数/仮引数/としておく。
まぁ、そうはいっても関数スコープのちょっと上で宣言された変数なんだけどね。
スタックですね、わかります。

691:686
09/10/22 03:29:00
>>687
なるほど。ありがとう
ちなみにtypedefしちゃうとだめだよね?

>>688
あぁー、そういう弊害が出てくるんですね。為になります。

692:デフォルトの名無しさん
09/10/22 04:39:15
func(&kouzoutai);
const付けたとしてもこの関数呼び出しの後でkouzoutaiのメンバが書き換わるのかどうかわからないすよね。
func(kouzoutai);
だったら書き換わらないことがわかるけど。
キャストすればいいのかな。。


693:デフォルトの名無しさん
09/10/22 06:26:12
funcのシグネチャによるだろ

694:デフォルトの名無しさん
09/10/22 10:31:59
>const付けたとしてもこの関数呼び出しの後でkouzoutaiのメンバが書き換わるのかどうかわからないすよね。
「呼び出しの後」が呼び出した関数内の話なら自己責任だろ。
「呼び出しの後」が呼び出した先の呼ばれた関数内の話ならその関数の宣言でconstポインタなら書き換わらないだろ。

695:デフォルトの名無しさん
09/10/22 10:48:08
あえてconstをはがさない限りは変えられないんじゃないの?

696:デフォルトの名無しさん
09/10/22 12:13:14
func()
{
  Kouzoutai kouzoutai;

  kouzoutai.member = 100; //func()では書き換えたい
  func2(&kouzoutai); //func2()では書き換えたくない。関数呼び出しからそれを明記できないか。
}

697:デフォルトの名無しさん
09/10/22 12:18:59
>>696
void func2(const Kouzoutai * parameter);
func2()自体が書き換え可能なのだとしたら、呼び出すこと自体が無茶。

698:デフォルトの名無しさん
09/10/22 12:23:49
func()
{
  Kouzoutai kouzoutai;
const Kouzoutai *kouzoutai_constptr = &kouzoutai;

  kouzoutai.member = 100;
  func2(kouzoutai_constptr);
}

699:デフォルトの名無しさん
09/10/22 12:38:38
C++でも
func(const T &in, const T &in2, T *out) //定義
func(in, in2, &out) //呼び出し
みたいにして、呼び出しの記述を見て関数内で変更されうることが類推しやすくしたりするね

そういう意味では
func2((const Kouzoutai *)&kouzoutai)
でいいのかも知れんが、全部それやらないと本末転倒

700:デフォルトの名無しさん
09/10/22 13:11:12
値渡しでいいだろ。速度も落ちねえよ。

701:デフォルトの名無しさん
09/10/22 13:38:47
なんでそんな無茶を言い出すの

702:デフォルトの名無しさん
09/10/22 15:14:48
無茶ではない。
値渡しこそ正義。

703:デフォルトの名無しさん
09/10/22 17:42:25
参照渡しがいいの!

704:デフォルトの名無しさん
09/10/22 17:54:44
値渡しだろ

705:デフォルトの名無しさん
09/10/22 18:01:02
間を取って、コピーしたもののアドレスを渡す、でどうか

706:デフォルトの名無しさん
09/10/22 18:08:33
とるなし

707:デフォルトの名無しさん
09/10/22 21:47:21
fuck()

708:デフォルトの名無しさん
09/10/22 21:52:38
>>698
なるほど。天才ですね。

709:デフォルトの名無しさん
09/10/22 22:09:02
よく言われる

710:デフォルトの名無しさん
09/10/23 01:34:00
いつも神様って呼ばれてる。天才と言われることは滅多にない

711:デフォルトの名無しさん
09/10/23 10:56:55
いつも旧神って呼ばれてる。ノーデンスと言われることは滅多にない

712:デフォルトの名無しさん
09/10/23 12:15:02
神様にもいろいろいるしね
貧乏神や疫病神でないことを祈る

713:デフォルトの名無しさん
09/10/23 12:30:38
死神だろ。

714:デフォルトの名無しさん
09/10/24 10:26:40
func()
{
  Kouzoutai kouzoutai;

  kouzoutai.member = 100; //func()では書き換えたい
  func2(&kouzoutai); //func2()では書き換えたくない。関数呼び出しからそれを明記できないか。
  kouzoutai.member = 100; //func()では書き換えたいんだってば
}


715:デフォルトの名無しさん
09/10/24 10:40:45
 func2(kouzoutai); //func2()で書き換えても平気。値渡しだから。call by valueだから。

716:デフォルトの名無しさん
09/10/24 13:21:32
return fuck(you);

717:デフォルトの名無しさん
09/10/24 15:36:03
メイン関数でポインタを宣言し、関数Aに引数でポインタを渡し動的にメモリを確保するとともにデータをセット
次に関数Bでそのデータを処理、みたいな事をしたいのですがうまくいきません。
どうも関数Aで確保したメモリがmainに戻ってくると解放されているようす・・・なにか方法はないですか?

void main(void)
{
  char *p;

  関数A(p);
  関数B(p);
}

void 関数A(char *p)
{
//ここで*pに動的メモリを割り当て&データセット
}

void 関数B(char *p)
{
//*pのデータを処理
}


718:デフォルトの名無しさん
09/10/24 15:39:29
動的にメモリを割り当てられてないんでしょ。

719:デフォルトの名無しさん
09/10/24 15:41:22
>>717
void 関数A(char **p)

じゃないと p@main が書き換わらないよ

720:デフォルトの名無しさん
09/10/24 15:45:57
そしてmain内では
関数A(&p);
にする

普通の変数を関数内で書き換えるときと同じ。

721:デフォルトの名無しさん
09/10/24 16:05:42
こうしろ。

void main(void)
{
  char *p;

  p = 関数A();
  関数B(p);
}

char *関数A(void)
{
//ここで動的メモリを割り当て&データセット
}

void 関数B(char *p)
{
//*pのデータを処理
}


722:717
09/10/24 16:14:34
ありがと書き換えてみるわ

723:toya
09/10/24 17:01:57
>>503
よろしくおねがいいたします。

724:デフォルトの名無しさん
09/10/24 17:28:44
>>723
インデントを説明するための例なので、内容については説明しません
int foo(){return 0;}
int bar(){return 0;}
int main(){int a,b;for(a=0;a!=5;a++){b=((b+a)*b+a)/a;foo();bar();}return 0;}

せめてバグがない物を提示しないか

725:デフォルトの名無しさん
09/10/24 17:29:59
上のプログラムはコンパイラに掛けると、エラーはなく実行できるコードを返してくれます。

と続いてるわけだし。

726:デフォルトの名無しさん
09/10/24 18:07:45
>723
多くの人によって編集されていくと、スタイルがバラバラになる可能性があるので、
最低限は決めておいた方がいいと思う。
また、説明などに使う用語やどの規格に準拠して書くかなども。

これ以上はスレチなので、新しくスレを立ててからお願いします。

727:デフォルトの名無しさん
09/10/25 04:03:48
free() や fclose() に NULL を渡したらどうなりますか?

728:デフォルトの名無しさん
09/10/25 04:18:37
どうもならない。

729:デフォルトの名無しさん
09/10/25 04:30:29
>>727
fclose に NULL を渡すのはダメ

730:デフォルトの名無しさん
09/10/25 14:55:59
「車輪の再発明はするな」という言葉で車輪の再実装を阻む行為は、
「車輪を実装した」という経験をもたせないようにして、先行者利益を確保するという、孔明の罠なのです。

731:デフォルトの名無しさん
09/10/25 15:05:44
車輪の調子が悪い時にメンテナンスできないしな

732:デフォルトの名無しさん
09/10/25 15:40:14
実装の仕方がまちがっているのに得意げな車輪の再実装は
止めてやるべき

733:デフォルトの名無しさん
09/10/25 15:44:35
自作の暗号アルゴリズムほど恐ろしいものはない

734:デフォルトの名無しさん
09/10/25 15:47:33
実験を一人でやれない奴は発明するな

735:デフォルトの名無しさん
09/10/25 15:52:50
日本に航空機製造をさせない某国のような

736:デフォルトの名無しさん
09/10/25 16:17:07
再発明と再開発・再生産とは違う。
発明するのが無駄ってことだろ。


737:デフォルトの名無しさん
09/10/25 16:19:56
孔明の罠??


738:デフォルトの名無しさん
09/10/25 16:45:53
やらない言い訳に使うなってことでもあるな。
ありもしないライブラリを再発明になるといけないので探してます、とかな。

739:デフォルトの名無しさん
09/10/25 17:24:10
>>737
巧妙なトリック

740:デフォルトの名無しさん
09/10/25 17:39:11
光明の罠

741:デフォルトの名無しさん
09/10/25 18:13:11
あなたに自分の好きなことをする自由な時間を取り戻す20の方法
URLリンク(gigazine.net)

10.「それは受けられません」と言うことを学びなさい
12.最も大きなタスクを一番最初に処理しなさい
13.人に任せる
14.気を散らすあらゆるものを視界から取り除きなさい
15.インターネットから切断する
16.外部委託する


742:デフォルトの名無しさん
09/10/25 18:50:31
>>737
げぇ!

743:デフォルトの名無しさん
09/10/25 19:55:57
1. その本を閉じる
2. 2chviewer をアンインストールする


744:デフォルトの名無しさん
09/10/26 02:48:27
方向キー押すと1づつ大きくなるカウンタってどうやって作りますか?
押している間じゃないです
お願いします

745:デフォルトの名無しさん
09/10/26 03:03:15
処理系依存

746:toya
09/10/26 06:15:16
>>726

準拠する規格は『JISX3010:2003 プログラム言語C』で
URLリンク(www.jisc.go.jp) 」→「JIS検索」→
「JIS規格番号からJISを検索」で「X3010」と入力し
「一覧表示」→「JISX3010」→「規格の閲覧」で閲覧できます


747:デフォルトの名無しさん
09/10/26 06:27:28
c99かよ

748:デフォルトの名無しさん
09/10/26 11:04:50
int func(){
 for(;;){
 }
 return 0;
}

こういうスタイルって、紙の本で行数が間延びしないためのものだろ。
実機での記述でこのスタイルにしてる奴って、それを理解してないんじゃないのか?


749:デフォルトの名無しさん
09/10/26 11:14:43
昔の画面全体で25行しか無い時も有効だったかもな。

750:デフォルトの名無しさん
09/10/26 11:18:30
FDD全盛のころは改行コードすらもったいなかったんだよ

751:デフォルトの名無しさん
09/10/26 11:53:35
>>748
ディスプレイで見たときにも間延びするとかっこわるい。

752:デフォルトの名無しさん
09/10/26 12:03:07
詰まってる方がかっこわるいだろ

753:デフォルトの名無しさん
09/10/26 12:34:43
int foo(int n, int m)
{
  int i, j, k, something;

  for ( i = 0; i < n; ++i )
    if ( i != m ) {
      (void)something;
      for ( j = 0; j < n; ++j )
        for ( k = 0; k < n; ++k ) {
          (void)something;
          if ( k != m )
            (void)something;
          {
            int a, b;
            (void)(something = a + b);
            (void)something;
          }
        }
    } else
      (void)something;
  (void)something;

  return 0;
}

関数化しろとかインデントが2カラムと言うのは無しで、こういうソースはできれば見たくない

754:デフォルトの名無しさん
09/10/26 12:36:40
>>753
見なきゃいい
エディタ起動時に必ず整形ツールを通すようにすればいいだけだ

755:デフォルトの名無しさん
09/10/26 12:38:01
この形に美しさを感じられない奴は
コンピュータプログラミングには向いていないよ。

756:デフォルトの名無しさん
09/10/26 12:43:13
>>753
別に悪くないと思うが。
じゃあどんなスタイルが良いんだ?

定番で悪いが
Linux流プログラム書法
URLリンク(www.linux.or.jp)

757:デフォルトの名無しさん
09/10/26 12:51:07
プログラムの途中でコアを吐く?のだけど、そんなエラー見たことないし、
調べても何か特定の原因があるってわけでもなさそうなのでさっぱり意味がわかりません。
一つ一つの処理ごとにprintfを挟んでみたところ以下のようでした。

#define _XOPEN_SOURCE

#include <stdio.h>
#include <string.h>
#include <unistd.h>

main(void)
{
int i, j, len;
unsigned char tripkey[11] = "";
unsigned char salt[3] = "";
unsigned char trip_f[256] = "";
unsigned char trip[11] = "";

printf("トリップキーを入力:");
scanf("%u", &tripkey);

printf("トリップキー入力"); ←これが表示されずにコアを吐く

758:デフォルトの名無しさん
09/10/26 12:54:03
>>757
> scanf("%u", &tripkey);

scanfの使い方調べろよ

759:デフォルトの名無しさん
09/10/26 12:54:36
>>753
Java見たいで嫌だ書き直す
int foo(int n, int m){
  int i, j, k, something;

  for(i = 0; i < n; ++i){
    if(i != m){
      (void)something;
      for(j = 0; j < n; ++j){
        for(k = 0; k < n; ++k){
          (void)something;
          if(k != m) (void)something;
          {
            int a, b;
            (void)(something = a + b);
            (void)something;
          }
        }
      }
    }else (void)something;
  }
  (void)something;
  return 0;
}
漏れが許せる隙はこれが限界だ

760:デフォルトの名無しさん
09/10/26 12:54:48
制御にくっつく単文でもブレースで括ってくれと言いたかったんだ
ブレースだけの行があるのが嫌な人もいるんだろうけどね
もう慣れているからどちらでもいいんだけど、修正時のエンバグ対策に{}付けていた体質を改めようかな、はっはっはぁ

761:デフォルトの名無しさん
09/10/26 13:00:43
>>753
インデントついてるからまだましだけど
その書き方でインデントめちゃくちゃなやつもいた

if(k != m) (void)something; {
  int a, b;
  (void)(something = a + b);
  (void)something;
  }

とかもう

762:デフォルトの名無しさん
09/10/26 13:10:11
関数は

int
foo(int n, int m)
{
}

って書く方が好みだ。
関数名を検索するときに、/^foo\(/でジャンプできるからな。
'{'を独立した行に置くのは、K&R第1版の頃の
foo(n, m)
 int n;
 int m;
{
}
からの慣れかな。

763:デフォルトの名無しさん
09/10/26 13:13:37
>>753
他人が読むことを想定していないコードだな

764:デフォルトの名無しさん
09/10/26 13:14:21
>>763
具体的にどこがそうなのか挙げてみれ

765:デフォルトの名無しさん
09/10/26 13:16:07
スタイル議論してるスレがあるはず。

766:デフォルトの名無しさん
09/10/26 13:16:56
関数は

/*!
 * @brief fuga
 *
 * hoge
 *
 * @return piyo
 */
int
foo(
    int n, /*!< [in] bar */
    int m /*!< [in] baz */
) {
}

って書く方が好みだ。
ただの似非Doxygenスタイルだけど。

767:デフォルトの名無しさん
09/10/26 13:17:47
>>764
わかってるくせに

768:デフォルトの名無しさん
09/10/26 13:18:59
>>759
Java みたいなのはお前の方だw

769:デフォルトの名無しさん
09/10/26 13:20:59
int foo(int n, int m){
int i, j, k, something;

for(i=0; i<n; ++i){
if(i != m){
(void)something;
for(j = 0; j < n; ++j){
for(k = 0; k < n; ++k){
(void)something;
if(k != m)
(void)something;{
int a, b;
(void)(something = a + b);
(void)something;
}
}
}
}
else
(void)something;
}
(void)something;
return 0;
}


770:デフォルトの名無しさん
09/10/26 13:23:52
>>767
>>753は、非難されるほどひどいスタイルには見えん。
ひどい点があるなら、教えてくれないか

771:デフォルトの名無しさん
09/10/26 13:26:58
>>770
全角スペース

772:デフォルトの名無しさん
09/10/26 13:28:11
スタイルじゃなくて、これが紛らわしいってこと

if ( k != m )
(void)something;
{
int a, b;
(void)(something = a + b);
(void)something;
}


773:デフォルトの名無しさん
09/10/26 13:29:38
if ( k != m ){
  (void)something;
}
{
  int a, b;

  (void)(something = a + b);
  (void)something;
}

774:デフォルトの名無しさん
09/10/26 13:31:01
#define BEGIN do{
#define END }while(0)

if ( k != m ){
  (void)something;
}
BEGIN
  int a, b;

  (void)(something = a + b);
  (void)something;
END;

775:デフォルトの名無しさん
09/10/26 13:32:17
>>771
htmlでインデントを表現するために、わざと全角空白をつかってるんじゃないか?

776:デフォルトの名無しさん
09/10/26 13:36:39
>>775
 
使え

受け取った方がコピペでコンパイル出来るようになる

777:デフォルトの名無しさん
09/10/26 13:54:13
>>775
&nbsp;
使え

消えてたorz

778:デフォルトの名無しさん
09/10/26 14:02:01
&amp;を忘れたのねw

779:デフォルトの名無しさん
09/10/26 14:10:58
>>776
一部の専ブラでは書き込まれた&nbspをコピペすると化ける。


780:デフォルトの名無しさん
09/10/26 14:12:27
>>758
なんだかよくわからなかったのでgetsを使ってみたけれどそれでもダメでした

781:デフォルトの名無しさん
09/10/26 14:13:57
なんだかよくわからないものをなんだかよくわからないまま使っても
なんだかよくわからない結果にしかならないと思うんだ

782:デフォルトの名無しさん
09/10/26 14:23:26
>>780
scanfのフォーマット指定子とそれに対応する引数を考えてみて。
つかあまりにも適当に指定してるようにしか見えないから、
正解をズバリ書くのもはばかられるわ

783:デフォルトの名無しさん
09/10/26 14:47:18
>>782
%sと%cを試してみたけど変わりませんでした


784:どちらが正統?
09/10/26 14:58:45
char s[6]="INTEL";
sは長さ6の文字列へのポインタで、その値は変更不能な文字列
(リテラル)"INTEL"を指すポインタ値

なのか

sは長さ3の文字列へのポインタで、その値は変更可能な文字配列
を指すポインタ値で、変更可能な文字列配列はあらかじめ
コンパイラによって変更不能な文字列"INTEL"を複製したもの
が設定されている。

785:デフォルトの名無しさん
09/10/26 15:03:19
>>783
へぇ

786:デフォルトの名無しさん
09/10/26 15:19:05
>>784
どちらも間違い。 sはポインタではなく配列

787:どちらが正統?
09/10/26 16:20:53
char s[7]="foobar";

sは長さ7の変更不能な文字配列である"foobar"の名前である

のか

sは長さ7の変更可能な文字配列で(コンパイラにより)
変更不能な文字配列(リテラル)"foobar"の複写で初期化された
ものの名前である。

788:デフォルトの名無しさん
09/10/26 16:29:32
PHPをかなりやってきて、
プログラミングの基本とか
だいたい理解したと思うので
そろそろCをはじめようかと
思うのですが、Cをはじめる
前に、これを先にPHPで勉強
しておいたほうがいい、
っていうの、何かありますか?

一応、PHPで、

print文で画面に文字とかを出力、表示する

ifでの分岐
switch文での分岐

for、while、foreachでのループ

ユーザー定義関数
関数への値渡し、引数渡し

includeで他のファイルを読み込んで使う

配列、連想配列(ハッシュ)

ファイルへの読み書き

OOP基礎
----------------------------------------------
↑こんくらいはマスターしました。
Cに移行する前に、何かもっと
勉強しておいたほうがいい知識はありますか?

789:デフォルトの名無しさん
09/10/26 16:30:35
別に真っ白な状態からCを学んでも良いと思うけど。

790:デフォルトの名無しさん
09/10/26 16:34:11
>>788
PHP→Cは結構苦労するってなんかの本に書いてあったな
逆にC→PHPは3日で覚えられるって事も

791:デフォルトの名無しさん
09/10/26 16:37:48
PHPで、

セッションやら、
クッキーやら、
サニタイズやら、
BASIC認証やら、

やらされたので、Cだと
そういうのないので、
かえって勉強しやすいかなー
と思ってます。

792:デフォルトの名無しさん
09/10/26 16:40:33
>>787
後者。
でも「変更不能な文字配列(リテラル)"foobar"の複写で」がなんか違和感あり。

char s[6] = "INTEL";
は、
char s[6] = {'I', 'N', 'T', 'E', 'L', 0};
と全く同じよ。

793:デフォルトの名無しさん
09/10/26 16:51:19
リテラルの複写とは全く違うから後者も間違いだろw

794:デフォルトの名無しさん
09/10/26 16:54:29
>>783
引数もちゃんと考えようぜ。
例を見て&つけてるんだろうけど、何で&がついてるかわかるか?
配列の[]無しはどういうものかも。

795:デフォルトの名無しさん
09/10/26 17:06:55
>>791
C-CGI作るならもちろんその辺もやらないとだめだよ

796:デフォルトの名無しさん
09/10/26 17:09:37
CでCGIなんか作るわけねーだろ。あほか?
USBで外部デバイスを接続して
パソコンでプログラム組んで
ROMライターで焼いて、、、
ってやるんだよ。

お掃除ロボットのルンバの
プログラム組んだりとか
ロボット作ったりとかしてーんだよ。

空気よめよwww

797:デフォルトの名無しさん
09/10/26 17:44:30
Cのコンパイラーは
どっからダウンロードするんにゃ~~

おしえれ~~

798:デフォルトの名無しさん
09/10/26 17:45:57
2chのread.cgiはcだそうだ

799:デフォルトの名無しさん
09/10/26 17:55:47
>798
どっかのFlashで見たなそういえば、
zlibとか使って圧縮して通信容量減らして危機を救ったとかなんとか

十分慎重に組めばセキュアなCGIも作れるわけだが
CでCGI作るというウェブサイトや書籍にろくなものが無い気がしないでもない

800:デフォルトの名無しさん
09/10/26 18:05:38
文字解析以外はCもperlのようなものも一緒でしょ
というか、2chのC化自体はあまり効果が無かったような

801:デフォルトの名無しさん
09/10/26 18:10:22
2chブラウザのおかげね。

802:デフォルトの名無しさん
09/10/26 18:59:07
今はむしろ2chブラウザのせいで通信量が増えてるわけだが

803:デフォルトの名無しさん
09/10/26 19:26:03
どうして?

804:デフォルトの名無しさん
09/10/26 19:39:48
>>803
タブをたくさん開きーのそいつらをいっせいにリロードしーの
あまつさえ自動でリロードしーの

805:デフォルトの名無しさん
09/10/26 19:44:08
多くの専ブラはそれの対応したはずだが

806:デフォルトの名無しさん
09/10/26 19:57:13
対応といっても更新間隔に制限を設けただけだからな
100タブ単位で開いてると馬鹿にならない

807:デフォルトの名無しさん
09/10/26 20:20:00
それって専ブラの起因した問題じゃないと思うが

808:デフォルトの名無しさん
09/10/26 20:24:17
というか量増えちゃだめなの?PCの能力あがったんだからたくさんの情報をロードできるから仕方ないじゃん。


809:デフォルトの名無しさん
09/10/26 20:25:09
人間の能力はあがってないだろ

810:デフォルトの名無しさん
09/10/26 20:27:51
読もうとしてないスレもリロードしたりするじゃん。
なのにそのスレ読むときにまたリロードしたりして。
専ブラに起因した問題じゃないってのはタブ型ブラウザのことでも指してるのかなぁ

811:デフォルトの名無しさん
09/10/26 20:29:46
あれはリロードじゃなくてDATの量を見てるだけだし読むときは差分だけだし
なにか勘違いしてない?

812:デフォルトの名無しさん
09/10/26 20:31:23
URLリンク(f30.aaa.livedoor.jp)
昔話

813:デフォルトの名無しさん
09/10/26 20:31:28
なら転送量は増えないの?

814:デフォルトの名無しさん
09/10/26 20:40:01
いま仕様みてきたけど、次回dat読み込むときは
HTTPリクエストヘッダに
Range: bytes=

で差分を指定できるみたいだね。(この場合は gzip 圧縮はされない)

ただ、リクエストしまくるとバーボン規制やボボン規制を食らう可能性もある。

815:デフォルトの名無しさん
09/10/26 20:40:24
説明するのは面倒なので URLリンク(monazilla.org) の資料でも読んでください

816:デフォルトの名無しさん
09/10/26 21:42:38
URLリンク(kansai2channeler.hp.infoseek.co.jp)

実行して出力したときに、
countを1000にするとうまく表示されるのですが、
countを100にしたときに、どうして壁を突き破るのか教えてください。
また、100にしても壁を突き破らない方法を教えてください。



817:デフォルトの名無しさん
09/10/26 22:01:03
>>792
char s[]="書き換えてはならない文字列";
s[2]='¥0';

この場合コンパイルは通る?動作は保証される?

818:デフォルトの名無しさん
09/10/26 22:13:19
>>817
大丈夫
保証される

819:デフォルトの名無しさん
09/10/26 22:39:18
>>817
解釈ルール上からは大丈夫な筈であるが
char *s="書き換え禁止文字列";
とかと混同使用されている現実から安全対策の為、
強く警告を出して事実上禁止している処理系が
多いのでやらないほうが良い。

820:デフォルトの名無しさん
09/10/26 22:45:52
>>819
そんなのがあるとは…
ちなみに処理系の名前を教えて欲しいです

821:デフォルトの名無しさん
09/10/26 22:57:47
>>819
混同してるのも安全対策が必要なのもてめーだけだ
何を禁止or警告されているかくらい読めぼけ

822:デフォルトの名無しさん
09/10/26 23:06:02
VC++2008で見てみたけど、警告レベル最高でもべつに警告はでなかった。

823:デフォルトの名無しさん
09/10/26 23:10:19
>>822
>>817 の時点ではおkだが、>>819 が痛いんだよ

824:デフォルトの名無しさん
09/10/26 23:16:37
リテラルに関しては特別である件について

int array[]={0,1,2,3,4,5,};
の要素がLValueになれない処理系はモグリだが
char array[]="012345";
の要素がLvalueになれない処理系がモグリだと
決めつけられないとオモ
char array[6]="012345";
でLValue禁止はモグリだが

825:デフォルトの名無しさん
09/10/26 23:18:10
>>824
そういう処理系がある可能性もあるから
名前が知りたいだけですよ

826:デフォルトの名無しさん
09/10/26 23:20:33
GCCやらVCみたいなメジャーなやつで警告でないなら、べつに気にしない。

827:デフォルトの名無しさん
09/10/26 23:20:49
>>824
> 決めつけられないとオモ
何が「特別」なのかどう頑張っても足掻いても完璧にわかってないな

828:デフォルトの名無しさん
09/10/26 23:32:44
char s[]="12345"
がconst char s[6]={'1','2','3','4','5',0}と
等価だって保証されてる?

829:デフォルトの名無しさん
09/10/26 23:35:06
>>828
constはつかないんじゃないの?

830:解説
09/10/26 23:49:59
>>824とか
リテラル表現を見つけるとCコンパイラは機械的にそれを
void *型のconst ポインタ値に置換するというウワサ
(void*)の(char*)のキャスト省略は認容されているからprintfとかに
与えても文法上合法だし、その処理系に付属しているライブラリ関数
ならば期待した動作をする。

問題はvoid*が指しているアドレスに実際に何が書かれているかに
ついての規定が不可能になってきていること。
エンコーディング(フォントの種類とかサイズランク
(微妙に書体が変わるんで)まで規定できる新しいコード体系とか)
によっては連続したメモリ領域にマップしないほうが良い場合もあり
得るし実際しないだろうし。
そいった状況になったらchar s[]="うんたらかんたら";
がchar s[]={ 文字配列要素定義列 };
という解釈をしてもらえるという保証が無くなる可能性がある

831:デフォルトの名無しさん
09/10/26 23:52:37
Cの規格上ではつかないよ。

char s[]="12345"; は左辺のために新たに確保された領域に
右辺の値がコピーされるから、つける必要もないし。


次ページ
最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch