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


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

C言語なら俺に聞け(入門編)Part 101



1 名前:デフォルトの名無しさん [2012/05/04(金) 04:05:26.52 ]
C言語の入門者向け解説スレッドです。

★前スレ
C言語なら俺に聞け(入門編)Part 100
toro.2ch.net/test/read.cgi/tech/1333108892/
★過去スレ
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
★教えて欲しいのではなく宿題を丸投げしたいだけなら
  ↓宿題スレ↓へ行ってください。
C/C++の宿題片付けます 157代目
toro.2ch.net/test/read.cgi/tech/1335517816/
★C++言語については避けてください。C++対応明記スレへどうぞ
★分からない事をなるべく詳しく書いて下さい。
★ソースコードを晒すと答えやすくなるかもしれません。
  # 抜粋/整形厳禁、コンパイラに渡したソースをそのまま貼ること
  # サイズが大きい場合は宿題スレのアップローダ等を利用してください
★開発環境や動作環境も晒すと答えが早いかもしれません。
★質問者は最初にその質問をした時のレス番号を名前欄に書いて下さい。

長くなりそうなコードはcodepadに貼り付けてもいいでしょう
codepad.org/
ideone.com/

357 名前:デフォルトの名無しさん mailto:sage [2012/05/13(日) 14:19:07.76 ]
>>354
>>342

358 名前: ◆QZaw55cn4c mailto:sage [2012/05/13(日) 14:26:54.04 ]
>>355
hibari.2ch.net/test/read.cgi/tech/1289715349/
hibari.2ch.net/test/read.cgi/tech/1295273862/
hibari.2ch.net/test/read.cgi/tech/1309527259/
toro.2ch.net/test/read.cgi/tech/1313183984/

359 名前:デフォルトの名無しさん [2012/05/13(日) 14:33:20.32 ]
そんなうんこスレばかり貼るな。

360 名前:デフォルトの名無しさん [2012/05/13(日) 14:38:34.38 ]
C言語プログライング能力試験1級のコツ

361 名前:デフォルトの名無しさん mailto:sage [2012/05/13(日) 16:17:30.15 ]
ttp://codepad.org/azeRjUXt

362 名前:デフォルトの名無しさん [2012/05/13(日) 17:21:53.86 ]
>>346
それは「goto だけは使わない」人が自らを詰ませている滑稽な図式だ
for の continue に代わる動作くらいどうにでも作れるさ

363 名前:デフォルトの名無しさん mailto:sage [2012/05/13(日) 17:29:30.75 ]
オナニストに子作りの方法語られてもニントモカントモ

364 名前:デフォルトの名無しさん mailto:sage [2012/05/13(日) 17:40:06.66 ]
main.cpp(40) : warning C4996: 'fopen': This function or variable may be unsafe. Consider using fopen_s instead.
To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
1>c:\program files\microsoft visual studio 9.0\vc\include\stdio.h(237) : 'fopen' の宣言を確認してください。

#include <stdio.h>を宣言してあるのにfopenしたらこんなのが出てくるんだけど何が原因でしょうか?

365 名前:デフォルトの名無しさん mailto:sage [2012/05/13(日) 17:41:06.82 ]
>>364
読めよ



366 名前:デフォルトの名無しさん [2012/05/13(日) 17:48:36.26 ]
子作りの方法は全然ちがうんだが

よっぽどひどい育てられ方をしたんだな
そんなに重篤な精神分裂を来すとは

367 名前:はちみつ餃子 ◆8X2XSCHEME mailto:sage [2012/05/13(日) 17:52:12.34 ]
>>364

> This function or variable may be unsafe. Consider using fopen_s instead.
この関数、または変数は安全ではありません。 かわりに fopen_s を使うことを検討して下さい。

> To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
非推奨を無効にするには _CRT_SECURE_NO_WARNINGS を使って下さい。 詳細はオンラインヘルプを参照のこと。

368 名前:デフォルトの名無しさん mailto:sage [2012/05/13(日) 18:24:22.48 ]
>>364
そもそもスレ違いだ。

369 名前:デフォルトの名無しさん mailto:sage [2012/05/13(日) 19:07:37.73 ]
c言語ってスレ違いなの?

370 名前:344 mailto:sage [2012/05/13(日) 19:17:44.18 ]
MS独自拡張はスレ違いじゃね?

371 名前:デフォルトの名無しさん mailto:sage [2012/05/13(日) 19:23:20.02 ]
             /)
           ///)
          /,.=゙''"/
   /     i f ,.r='"-‐'つ____   こまけぇこたぁいいんだよ!!
  /      /   _,.-‐'~/⌒  ⌒\
    /   ,i   ,二ニ⊃( ●). (●)\
   /    ノ    il゙フ::::::⌒(__人__)⌒::::: \
      ,イ「ト、  ,!,!|     |r┬-|     |
     / iトヾヽ_/ィ"\      `ー'´     /

372 名前:デフォルトの名無しさん mailto:sage [2012/05/13(日) 19:24:34.61 ]
その切り分けが可能な人はここに聞きに来ないよ。

373 名前:デフォルトの名無しさん [2012/05/13(日) 19:46:19.68 ]
>>372
んだ

374 名前:デフォルトの名無しさん mailto:sage [2012/05/13(日) 23:52:35.63 ]
いや、C++がスレ違いだ。

375 名前:デフォルトの名無しさん mailto:sage [2012/05/14(月) 04:44:35.22 ]
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
int t;
system("cls");
for(t=0;t<12;t++){printf("\n");}
for(t=0;t<19;t++){printf(" ");}
printf("中心");
for(t=0;t<12;t++){printf("\n");}
for(t=0;t<40;t++){printf("_");}
return 0;
}
DOS画面の真ん中に「中心」って文字を表示するのに
変数tを複数のforで使いまわして作ってみたんだけど
コンパイルでエラーは出ないものの使い方としてはどうとかあるかな?
検索でダメってのは見かけないけど大丈夫とも見なくて不安がある



376 名前:デフォルトの名無しさん mailto:sage [2012/05/14(月) 04:55:37.65 ]
問題ないお

377 名前:デフォルトの名無しさん mailto:sage [2012/05/14(月) 06:39:56.53 ]
curses

378 名前:デフォルトの名無しさん mailto:sage [2012/05/14(月) 06:41:54.72 ]
PDCurses (Public Domain Curses)は
UNIX以外の DOS、Windows、OS/2など向けに作られた curses とほぼ同じ機能を提供するライブラリである

curses - Wikipedia

379 名前:デフォルトの名無しさん mailto:sage [2012/05/14(月) 06:44:15.35 ]
>for(t=0;t<19;t++){printf(" ");}
>printf("中心");
for(t=0;t<19;t++){printf(" ");}
printf("%*s", 42, "中心");

380 名前:デフォルトの名無しさん mailto:sage [2012/05/14(月) 06:50:41.70 ]
IBM PC やその互換機では、BIOSとMS-DOSシステムコールが画面に文字を出力する手段を提供しており、
ANSI.SYSドライバでANSIエスケープシーケンスを処理できる

ja.wikipedia.org/wiki/テキストユーザインタフェース

381 名前:デフォルトの名無しさん mailto:sage [2012/05/14(月) 06:58:57.89 ]
Windowsならここらへんを使うんだけど
面倒だから位置とか色とかは考えないほうがいいよ
msdn.microsoft.com/ja-jp/library/cc429123

382 名前:デフォルトの名無しさん mailto:sage [2012/05/14(月) 07:06:40.45 ]
単にループ変数の使いまわしについてしか聞いてないのに、
そこまでして知ったかぶりたいものかねえ

383 名前:デフォルトの名無しさん mailto:sage [2012/05/14(月) 07:38:19.66 ]
>>375
構文としては意図した意味になっているし、
賢いコンパイラを使うのであれば、性能上の問題はないと期待できる

だからあとは、書き方としてお行儀がいいのかという問題だが、
「スコープは最大限狭める」という原則に従うなら、こう書くこともできる

for(int t=0;t<12;t++){printf("\n");}
for(int t=0;t<19;t++){printf(" ");}
printf("中心");
for(int t=0;t<12;t++){printf("\n");}
for(int t=0;t<40;t++){printf("_");}

しかし、これはC89ではできない書き方であるし、
ほとんど差がないのも間違いないので、提示のように書いたとしても問題ないと思う

384 名前:デフォルトの名無しさん mailto:sage [2012/05/14(月) 08:14:46.00 ]
衒学的に考えるなら、桁方向のループ制御変数と行方向のループ制御変数を分けるべきと言う意見もありそうだ。

385 名前:デフォルトの名無しさん mailto:sage [2012/05/14(月) 09:42:15.15 ]
エスケープシーケンスでカーソル移動は駄目なの?



386 名前:デフォルトの名無しさん mailto:sage [2012/05/14(月) 09:52:06.33 ]
>>380 「ANSI.SYSドライバでANSIエスケープシーケンス」

387 名前:デフォルトの名無しさん mailto:sage [2012/05/14(月) 09:56:58.23 ]
CにもRubyにもcursesライブラリがあるよ

388 名前:デフォルトの名無しさん mailto:sage [2012/05/14(月) 11:38:47.53 ]
マジックナンバーをどうにかしる!

389 名前:デフォルトの名無しさん mailto:sage [2012/05/14(月) 14:28:45.45 ]
for文の条件式の部分で、例えば
int i,a;

scanf("%d",&a)

for(i=1;i<=a;i++){
}
とかってできないんですか?エラーがでてしまいます。
これができれば指定した数分の掛け算表ができて便利なんですが...

やっぱり一々ソースを書き直したりしないといけませんか?

390 名前:デフォルトの名無しさん [2012/05/14(月) 14:32:07.77 ]
エラーなのはお前の頭だろう。

391 名前:片山博文MZボット ◆0lBZNi.Q7evd mailto:sage [2012/05/14(月) 14:33:47.41 ]
>>389 ;がない。

392 名前:デフォルトの名無しさん mailto:sage [2012/05/14(月) 14:42:47.50 ]
あ、セミコロン(´;ω;`)
教えてくれてありがとうございます!

393 名前:デフォルトの名無しさん mailto:sage [2012/05/14(月) 15:11:35.82 ]
いえいえ

394 名前:デフォルトの名無しさん mailto:sage [2012/05/14(月) 15:43:56.26 ]
>>390みたいに煽るだけのカスはいらね

395 名前:デフォルトの名無しさん mailto:sage [2012/05/14(月) 15:53:16.68 ]
お前みたいなただのカスのがもっといらねぇだろwww



396 名前:デフォルトの名無しさん mailto:sage [2012/05/14(月) 15:55:30.48 ]
質問です。
画像を移動したいんですが、真横や真縦はx,yをそれぞれの値になるまで足して描画を繰り返すのは分かるんですが、
少しずれたところに移動させるのはどういう式になるんでしょうか。
例えば、x0,y0からx200,y0は出来ますが、x0,y0からx200,y45が分かりません。


397 名前:デフォルトの名無しさん mailto:sage [2012/05/14(月) 16:07:24.69 ]
わからないぷー

398 名前:デフォルトの名無しさん mailto:sage [2012/05/14(月) 16:10:58.46 ]
0,0と200,45を結ぶ直線の傾きは?
yを1増やすにつき、xをいくつ増やせば良い?
少数が必用なので、少し頭を使うかもしれんが。
プログラムじゃなくて、算数の問題。

399 名前:デフォルトの名無しさん mailto:sage [2012/05/14(月) 16:12:36.28 ]
>>396
簡単にするには座標を浮動小数点で持って1回に動かしたい量をそれぞれに
足しこんでいけばいい。

400 名前:デフォルトの名無しさん mailto:sage [2012/05/14(月) 17:01:08.69 ]
ああ、やっぱり小数点の公約数なんですね…特別な関数があるかと思ってました。
ありがとうございます。

401 名前:デフォルトの名無しさん mailto:sage [2012/05/14(月) 17:13:25.28 ]
おまえらってC言語に関しては天才なの?

402 名前:デフォルトの名無しさん mailto:sage [2012/05/14(月) 17:16:55.21 ]
今時は小数点に公約数があるのか...

403 名前:デフォルトの名無しさん mailto:sage [2012/05/14(月) 17:32:07.36 ]
>>401
天才じゃないと答えられないような質問あったか?

404 名前:デフォルトの名無しさん mailto:sage [2012/05/14(月) 17:42:43.52 ]
>>400
いえいえ

405 名前:デフォルトの名無しさん mailto:sage [2012/05/14(月) 18:14:43.31 ]
最近は
A:xxxについて教えて。
B:yyyだよ
A:ありがとうございます
C:いえいえ

という返信をする変人がいるらしい。



406 名前:デフォルトの名無しさん mailto:sage [2012/05/14(月) 18:19:49.22 ]
>>396
(0, 0)から(200, 45)に滑らかに移動したいと言うこと?
(200, 0)を経由していいなら横と縦に分割できるじゃん。

407 名前:デフォルトの名無しさん mailto:sage [2012/05/14(月) 19:13:05.98 ]
x+20、y+4,5とかね

408 名前:デフォルトの名無しさん [2012/05/14(月) 19:48:15.34 ]
一様乱数教えてくださいな

409 名前:デフォルトの名無しさん [2012/05/14(月) 20:00:06.95 ]
randam()

410 名前:デフォルトの名無しさん [2012/05/14(月) 20:14:45.18 ]
混合合同法ってなんですか

411 名前:デフォルトの名無しさん mailto:sage [2012/05/14(月) 20:15:12.90 ]
>>408
Mersenne Twister: A random number generator
www.math.sci.hiroshima-u.ac.jp/~m-mat/MT/mt.html

412 名前:デフォルトの名無しさん mailto:sage [2012/05/14(月) 20:49:48.61 ]
#include <stdio.h>

int sum(int,int);

int main (void)
{
int value,Left,Right;

scanf("%d,%d",Left,Right);

value = sum(Left,Right);
printf("%d\n",value);
return 0;
}


int sum(int min,int max)
{
int num;
num = (min + max) * (max - min + 1) / 2;
return num;
}

scanf("%d,%d",Left,Right); この部分にエラーが出ました...
何が悪いのでしょうか?

413 名前:デフォルトの名無しさん mailto:sage [2012/05/14(月) 20:57:05.22 ]


414 名前:デフォルトの名無しさん mailto:sage [2012/05/14(月) 20:58:38.72 ]
あ、&(´;ω;`)
またまた凡ミスしていまいました
どうもです...

415 名前:デフォルトの名無しさん mailto:sage [2012/05/14(月) 21:01:49.12 ]
いえいえ



416 名前:デフォルトの名無しさん mailto:sage [2012/05/14(月) 22:38:53.08 ]
いえいえ禁止!

417 名前:デフォルトの名無しさん [2012/05/14(月) 22:58:41.47 ]
C言語で円周率を10桁求めるプログラム作りたいです。
ソースコード教えてください。

このプログラム作るの簡単ですか?初心者です。

418 名前:デフォルトの名無しさん mailto:sage [2012/05/14(月) 23:00:10.55 ]
>>417
ググって貼り付けるだけ

419 名前:デフォルトの名無しさん mailto:sage [2012/05/14(月) 23:00:47.54 ]
>>417
マクローリン展開 円周率でぐぐる

420 名前:デフォルトの名無しさん mailto:sage [2012/05/14(月) 23:04:27.38 ]
printf(”3.141592653”);

421 名前:デフォルトの名無しさん mailto:sage [2012/05/14(月) 23:07:50.29 ]
>>417
ぐぐってこぴぺ。マチンの公式、うっふぇ。
ttp://ideone.com/cebSY


422 名前:デフォルトの名無しさん mailto:sage [2012/05/14(月) 23:12:42.67 ]
>>420
それだめらしいです。


もう一つ
二次方程式の解を√つきで実数だけ全て求めるプログラムも教えてください。

実行例
a.out
x^2 ? ←出力
1    ←入力
x ?  ←出力
1    ←入力
定数 ? ←出力
-1 ←入力

x^2+x-1の解は ←出力
y=(-1+√5)/2
y=(1+√5)/2


みたいな感じのプログラムです。

期限は円周率とこの二次方程式のプログラムセットで3週間です。
後4日です...徹夜で考えてるけど特に二次方程式のプログラムは
思いつきません...



423 名前:デフォルトの名無しさん mailto:sage [2012/05/14(月) 23:16:11.09 ]
>>422
アホかお前
出直してこい
何もわかっちゃいねーーーーーーー
プログラムの前に中学生の数学からやり直せ
ミジンコ

424 名前:デフォルトの名無しさん mailto:sage [2012/05/14(月) 23:18:07.10 ]
徹夜ワロタwww

425 名前:デフォルトの名無しさん mailto:sage [2012/05/14(月) 23:20:53.07 ]
πの計算は、>>421が終わると、今度は多倍長計算がやってみたくなる
ライブラリ一切使わずに加減乗除だけで自力で組んでみるとなかなか面白いよ



426 名前:デフォルトの名無しさん mailto:sage [2012/05/14(月) 23:23:49.34 ]
円周率は、可能なら10桁ってことで、3.14以上、つまり4桁以上を出せれば
とりあえずOKらしいです。(という噂)

二次方程式は、解が無しなら、この解無しみたいな出力もするプログラムです。

後4日。お願いします'--'(手)

427 名前:422 mailto:sage [2012/05/14(月) 23:24:51.29 ]
y=(-1+√5)/2
y=(-1-√5)/2

でしたね。すいません

428 名前:デフォルトの名無しさん mailto:sage [2012/05/14(月) 23:37:42.49 ]
>>422
くっそ適当wwwwwwwww
間違いがあったら自分で直してねwwwwwwwww
ttp://ideone.com/z1q8Z

429 名前:デフォルトの名無しさん mailto:sage [2012/05/14(月) 23:39:27.29 ]
>>428
お前も勉強しなおし

430 名前:428 mailto:sage [2012/05/14(月) 23:41:01.12 ]
ソースみりゃわかるとおもうが、例えば√4とか平気で表示すっからなwww
あと、小数(分数)になっても、小数点以下完全無視だからwww

それがいやなら、これをベースに徹夜するのだwww

431 名前:428 mailto:sage [2012/05/14(月) 23:52:28.29 ]
それから重解表示もふつーに√0なwww
まあ、がんばれwww

もしかしたら、プロさんがすばらしい式整形盛りこんだやつ作ってくれるかもね

432 名前:デフォルトの名無しさん mailto:sage [2012/05/15(火) 00:13:10.26 ]
>>431
根本的に間違ってるよw

433 名前:428 mailto:sage [2012/05/15(火) 00:18:27.64 ]
>>432
wwwwwwwwwww

くっそソースをくそ修正wwwwwwww

ttp://ideone.com/jBBTX

434 名前:デフォルトの名無しさん mailto:sage [2012/05/15(火) 00:42:26.71 ]
>>433
どこへ向かってるんだwww

435 名前:428 mailto:sage [2012/05/15(火) 00:44:59.36 ]
>>434
>>428で、>>427の答えを出すにはどう式を立てればいいかちょっと悩んだぞwwwwww



436 名前:デフォルトの名無しさん mailto:sage [2012/05/15(火) 01:20:13.92 ]
#include <stdio.h>

void check(int y[])
{
printf("check : %d\n", sizeof(y) / sizeof(y[0]));
}

int main()
{
int x[5];

printf("main : %d\n", sizeof(x) / sizeof(x[0]));
check(x);

return 0;
}

両方とも5が出力されると思っていたのですが
mainは5でcheckが1になります。
check関数のyはmainのxそのものを別名でアクセス出来るものかと思っていたのですが
checkが1になる理由は何なのでしょうか。よろしくお願いします。

437 名前:デフォルトの名無しさん mailto:sage [2012/05/15(火) 01:21:16.66 ]
>>436
ポインタだから

438 名前:436 mailto:sage [2012/05/15(火) 01:29:13.51 ]
>>437
なるほど。そうなるとmainの中のxは配列を指しているわけではないという事でしょうか
sizeof(x)ってやって5になるってことはそうなんですよね・・・
今まで配列の名前自体は配列を指してるってイメージだったんでちょっと頭こんがらがってきました
解答ありがとうございます

439 名前:436 mailto:sage [2012/05/15(火) 01:31:09.17 ]
ポインタだと思ってるんだったら1になるのが当たり前って思うべきなんですよね
なんか言ってる事めちゃくちゃでごめんなさい。

440 名前:デフォルトの名無しさん mailto:sage [2012/05/15(火) 01:47:24.31 ]
>>438
main の中では配列だけど
関数の引数で渡された時点でポインタになる

441 名前:436 mailto:sage [2012/05/15(火) 01:52:10.42 ]
>>440
すいません。ありがとうございました。
勉強し直してきます。

442 名前:デフォルトの名無しさん mailto:sage [2012/05/15(火) 20:50:20.17 ]
>>438>>441
いえいえ、お礼は結構ですよ

443 名前:デフォルトの名無しさん mailto:sage [2012/05/15(火) 21:20:18.65 ]
VisualStudio2010
ver 10.0.40219.1 sp1relを使用しています。
少しポインタを復讐しようと思いまして、入力した文字から最大値と最小値を出力するプログラムを書きました。
ソース(きたなくてすいません)
#include<stdio.h>
void maxmin(int *array,int *max,int *min);
int main(void){
int array[10];
int max,min,i=0;
do{
scanf("%d",&array[i]);i++;
}while(array[i-1]!=-1 && i<10);
maxmin(array,&max,&min);
printf("最大値:%d\n最小値:%d\n",max,min);
}

void maxmin(int *array,int *max,int *min){
*max=0;*min=100;
for(int i=0;*(array+i)!=-1 && i<10;i++){
*max = (*(array+i) > *max) ? *(array+i) : *max;
*min = (*(array+i) < *min) ? *(array+i) : *min;
}
return;
}
これをVisualStudioで実行すると構文エラーが起きてしまいます。ただ、bcc?ではエラーは起きませんでした。
maxmin関数内のiの宣言をforの中ではなく、一番上で宣言するとVisualStudioでもエラーは起きませんでした。
少し良くわからないので、教えてくれる方いたらお願いします。

444 名前:デフォルトの名無しさん mailto:sage [2012/05/15(火) 21:34:09.11 ]
>>443
ANSI-Cでは変数の宣言は複文の先頭にしかかけません。
これは予想ですけどVC++ではCとしてコンパイル、BCCではC++としてコンパイル
しているのでは?

もう一つ、mainが戻り値を設定していないので、警告が出ます。
コードの中身はチェックしていませんので、悪しからず。

445 名前:デフォルトの名無しさん mailto:sage [2012/05/15(火) 21:40:08.01 ]
>>443
VS側はコンパイラのオプションでエラーを出さない様に出来る。



446 名前:デフォルトの名無しさん mailto:sage [2012/05/15(火) 21:40:29.59 ]
>>438
配列名は式中では配列の先頭要素へのポインタとなる。
ただしsizeof, &のオペランドになったときは例外。

447 名前:デフォルトの名無しさん mailto:sage [2012/05/15(火) 21:59:34.84 ]
>>444
すべて仰るとおりです。すごいですね!!
VisualStudioでcppで作成し、mainにreturn 0;を追加したところコンパイルできました。ありがとうございました。

>>445
ありがとうございます。
オプションがどこにあるかよくわからなかったので、cppとして作成しました(^_^;)

448 名前:デフォルトの名無しさん mailto:sage [2012/05/15(火) 23:01:41.01 ]
いえいえ

449 名前:デフォルトの名無しさん mailto:sage [2012/05/15(火) 23:32:19.49 ]
いいぇいいぇ


450 名前:デフォルトの名無しさん mailto:sage [2012/05/15(火) 23:35:06.28 ]
イェイイェイ

451 名前:デフォルトの名無しさん mailto:sage [2012/05/15(火) 23:36:05.52 ]
君と ウェイ! ウェイ! ウェイ! ウェイ!


452 名前:デフォルトの名無しさん mailto:sage [2012/05/15(火) 23:57:44.68 ]
いっつだってワークワーク

453 名前:デフォルトの名無しさん [2012/05/16(水) 04:02:50.68 ]
通常正であるコストを、無限のコストとして-1を設定したときに
コスト同士の比較で、コストが最小となるものを求めるときに
//cost1,cost2,minはint
min=cost1;
if ((unsigned)min > cost2) min=cost2;・・・(1)
上のif文と(完全にではないですが)同等の条件として
if(min == -1 || (min > cost2 && cost2 != -1) ) min = cost2;・・・(2)

(1)のような(unsigned)-1 = INT_MAXを使った書き方は推奨してよいものなのでしょうか?
標準Cでは、符号あり→符号なしの変換はbit列を維持することが保証されているようですが、
具体的には(unsigned)-1のような使い方は、一般的に使われているのかが知りたいです

454 名前:デフォルトの名無しさん mailto:sage [2012/05/16(水) 04:08:33.93 ]
Cの仕様としては保証されないが使われてるね。

455 名前:デフォルトの名無しさん mailto:sage [2012/05/16(水) 04:09:27.02 ]
そもそも
(unsigned)-1 = INT_MAX
が成り立つ保証がない。



456 名前:デフォルトの名無しさん mailto:sage [2012/05/16(水) 04:40:31.68 ]
>>454
裏技みたいなものなのですかねえ

手持ちのC参考書には
signed X → unsigned Yにおいて
X=Y、x < 0 のとき y=x + (1 + Y_MAX)
と書かれており、
調べてみたら
JIS X3010 www.jisc.go.jp/app/pager?id=90394
6.3.1.3項にも同様のことが書かれているのですが
JIS規格と、Cの仕様って必ずしも一致しないのですかね

457 名前:デフォルトの名無しさん mailto:sage [2012/05/16(水) 11:06:09.34 ]
entryの宿命はよ。






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

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

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