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

このエントリーをはてなブックマークに追加
701デフォルトの名無しさん
髪に見放されたんでしょ
702デフォルトの名無しさん:2011/03/02(水) 22:01:11.80
sleep(3153600000);
puts("生え際って何だっけーー?!");
703295:2011/03/03(木) 00:06:42.51
while(0)ってやったらどうなるんですか?(・v・)
704702:2011/03/03(木) 00:26:47.40
どうなるんでしょうね?(-v-)
705デフォルトの名無しさん:2011/03/03(木) 00:31:35.26
>>703
飛ばされる
706デフォルトの名無しさん:2011/03/03(木) 00:33:51.85
コンパイルされないかもな
707デフォルトの名無しさん:2011/03/03(木) 03:24:53.87
実行するコードは吐かれないかもしれんがコンパイルはされる
708デフォルトの名無しさん:2011/03/03(木) 03:27:09.74
コードを吐かないってことはコンパイルされないってことだろ
709デフォルトの名無しさん:2011/03/03(木) 04:22:31.61
コンパイル後に最適化された結果コードを吐かないが正しい
コンパイルされないと言うことは、while(0)のあとに
コンパイルエラーが発生するコードを書いてもコンパイルできてしまうことを意味する
710デフォルトの名無しさん:2011/03/03(木) 07:53:26.68
いや、「コンパイルされない」のに「コンパイルできてしまう」っておかしいだろよ。
711デフォルトの名無しさん:2011/03/03(木) 08:26:32.59
710の読解力が足らないだけじゃね?
712デフォルトの名無しさん:2011/03/03(木) 08:42:13.32
「(該当箇所に)コンパイルエラーが発生するコードを書いても」
「(該当箇所は)コンパイルされない」から
「(全体は)コンパイルできてしまう」ってことだ。
だから、それは>709の1行目の主張とは反するので、
>709の1行目が正解ってことだろ。
713デフォルトの名無しさん:2011/03/03(木) 09:38:57.54
for()にするとどうなる
714デフォルトの名無しさん:2011/03/03(木) 09:42:00.53
教えろks
715デフォルトの名無しさん:2011/03/03(木) 09:49:58.93
while(0)st
for(;0;)st
同じ
716デフォルトの名無しさん:2011/03/03(木) 10:07:19.42
(;0;)泣き顔に見える
717デフォルトの名無しさん:2011/03/03(木) 12:38:57.72
beep音がでなんですけど
なぜでしょうか
718デフォルトの名無しさん:2011/03/03(木) 12:49:06.76
スピーカーの音量のつまみをゼロにしてるんじゃない

とりあえず、どんなプログラムを書いたのかと、どういった環境で動かしたのかを、書くべきではないかと思う
719デフォルトの名無しさん:2011/03/03(木) 15:46:11.65
printf(%a); でおk
720デフォルトの名無しさん:2011/03/03(木) 18:11:31.12
猫Cの高度なプログラミングの章の説明が適当すぎてわからん
721デフォルトの名無しさん:2011/03/03(木) 18:30:39.38
質問なんですが

for(; 略 略)
みたいな形の;だけの部分があるんですがどういう意味ですか?
;だけで意味あるんですか?
722デフォルトの名無しさん:2011/03/03(木) 19:02:39.23
forは
for( 初期化 ; 判定式 ; 加算式 )だったかな

for( ; ; )で無限ループになるbreakで抜ければOK
723デフォルトの名無しさん:2011/03/03(木) 19:02:41.12
>>721
for( i = 0; i < 10; i++ ) // iが10になるまでループ
for( i = 0; ; )      // iを0にして無限ループ
for( ; i < 10; )     // iが10になるまでループ
for( ; ; i++ )      // iをインクリメントしながら無限ループ
for( ; ; )        // ただの無限ループ
724デフォルトの名無しさん:2011/03/03(木) 19:05:15.89
>>721
for (初期化式; 継続条件式; 再初期化式) 文;
それぞれの式は省略可能。省略されてたらそこでは何もしないだけ。
条件が省略されてたら真と評価される。
forの()内には;が必ず2つ必要。
725デフォルトの名無しさん:2011/03/03(木) 19:09:15.91
>>724
文の後のセミコロンはいらないと思われ
726デフォルトの名無しさん:2011/03/03(木) 19:20:42.98
>>722>>723>>724>>725
ありがとうございます。

forカッコ内の最後は;いらないんですか?
for(略; 略; 略(;)←いらないんですか?)
727デフォルトの名無しさん:2011/03/03(木) 19:23:34.41
for(;;)←二つあればいいよ
728デフォルトの名無しさん:2011/03/03(木) 19:25:24.30
floatの値で

0.01から0.01ずつインクリメント++していく時に、
1.00000とかなるはずなのに、0.9998とかなるのは何故ですか?
729デフォルトの名無しさん:2011/03/03(木) 19:34:29.33
浮動小数点でぐぐれ
730デフォルトの名無しさん:2011/03/03(木) 19:38:01.23
> 0.01ずつインクリメント
とは言わないよ
731デフォルトの名無しさん:2011/03/03(木) 20:05:35.46
>>728
そういう使い方は奨励されない

intをその都度100で割って使うようにしましょう

特にfor文のループカウンタにfloatやdoubleを使うのはやめましょう
意図しない動作をする事があります(終了条件、累積誤差)
732デフォルトの名無しさん:2011/03/03(木) 20:12:42.86
int 型だと

9000から1ずつ増やしていったら、9001・・・9997・・・9998・・・9999 10000
とちゃんと正確に出ますよね?

なのに、なんでfloatは

1.0000にならないといけないのに、0.9989とかなるんですか?
733デフォルトの名無しさん:2011/03/03(木) 20:15:45.11
IEEE 754でぐぐれ
734デフォルトの名無しさん:2011/03/03(木) 20:33:36.82
じゃぁ、3.2942×3.4127を計算するプログラムってどうなるんですか?
float型でお願いします。
735デフォルトの名無しさん:2011/03/03(木) 20:39:27.35
floatのことは忘れろ
アイツはもう死んだんだ
736デフォルトの名無しさん:2011/03/03(木) 20:41:06.45
と、頭が short してる人がおっしゃいます
737デフォルトの名無しさん:2011/03/03(木) 20:41:51.33
でもプログラムとかのソース見てると、floatとか出てきますよ?
どういった利用価値あるんでしょうか?またdoubleとはどう違うんですか?
738デフォルトの名無しさん:2011/03/03(木) 20:43:37.01
だからググれよ
739デフォルトの名無しさん:2011/03/03(木) 20:55:46.15
float型って6桁までしか正確に値を出さないのに、
0.10000か0.99989とか、6桁以前に4桁くらいで正確じゃなくなってますよ?
どうしたらいいのですか?

ググレといっても、広すぎて調べれません。教えてください。

簡単なfloatが役に立ってるっぽいプログラム教えてください。
740デフォルトの名無しさん:2011/03/03(木) 20:56:58.49
そういうもんなんだよ
741デフォルトの名無しさん:2011/03/03(木) 20:58:27.44
別に広くないだろ
742デフォルトの名無しさん:2011/03/03(木) 21:00:26.80
>>739
int i = 1e20;
float f = 1e20;
printf("i=%d f=%g\n", i, f);
743デフォルトの名無しさん:2011/03/03(木) 21:02:53.70
>>739
floatのでてくるコードを見たことがあるなら、そのコードでヤクにたってるんだろ。
744デフォルトの名無しさん:2011/03/03(木) 21:11:20.25
>>739
だから昔メモリが高価だった頃は記憶容量が少なくて済むfloatがよく使われたんだよ
それとWindowsのGDIも座標系がfloatだしな
745デフォルトの名無しさん:2011/03/03(木) 21:13:44.49
数値ずれるのに、float何の役に立つんですか?
ずれないようにするにはどうプログラム書けばいいんですか?
こういうダイレクトな質問は、リアルですると恥ずかしいんですよ。
リアルでは分かってることばかり質問してしまいます。
746デフォルトの名無しさん:2011/03/03(木) 21:13:46.55
>>744
GDIって座標は整数じゃなかったっけ。
747デフォルトの名無しさん:2011/03/03(木) 21:15:22.73
>>745
ネットでお前みたいな質問してるやつを見ると、
寂しいヤツが他人となれあいたくて、分かってて質問してるんだろうなって
思っちゃうよ。
748デフォルトの名無しさん:2011/03/03(木) 21:16:42.52
まぁコレぐらいなら検索すればすぐ分かるしな
749デフォルトの名無しさん:2011/03/03(木) 21:18:14.06
>>747
そこまで気持ちの悪い人間じゃないです。
純粋に分からないんで。後ぐぐって分かる事ならここで質問しませんよ?
ここで聞いたほうが手っ取り早いし、知恵袋だと補足でしかレスできないし。
750デフォルトの名無しさん:2011/03/03(木) 21:19:18.99
>>746
おっとすまん
C#はfloatなんだ
多分ワールド座標系かと
751デフォルトの名無しさん:2011/03/03(木) 21:27:28.59
>>745
じゃ、double使っとけ。ズレるって騒ぎ出すのが暫く収まるからw
752デフォルトの名無しさん:2011/03/03(木) 21:27:41.20
>>739
10進で循環しない小数でも、2進だと循環小数になるものはいっぱいあるんだ。
Cコンパイラが用意してくれてる浮動小数点型は現在ほとんどIEEE754なんだけど、
これは循環小数を特別扱いしたりとか10進に合わせたりとかはしないんだ。

循環小数をまともに扱うなら有理数型、10進に合わせるならBCDだけど、
需要がたいしてないから用意されてないんだ。ライブラリ探せば見つかると思うよ。
753デフォルトの名無しさん:2011/03/03(木) 21:27:46.67
>>745
ずれない少数を扱いたいならBCDでぐぐれ
754デフォルトの名無しさん:2011/03/03(木) 21:30:17.79
そもそもfloatで何したいんだよ?
755デフォルトの名無しさん:2011/03/03(木) 21:44:00.78
>>754
円周率を100ケタまで表示するプログラムソースが書きたい。
ライブラリいちいちDLする必要あるんですか?gccだけじゃ足りないのですか?
756デフォルトの名無しさん:2011/03/03(木) 21:45:52.05
必要なのは頭脳
757デフォルトの名無しさん:2011/03/03(木) 22:02:06.30
>>755
「円周率」だからといって
浮動小数点演算に拘る必要はない。

そこをもっと柔軟に考える事こそが
ある意味「プログラミングの極意」
なのだろうと俺は思っている。
758デフォルトの名無しさん:2011/03/03(木) 22:05:16.35
>>755
floatかんけーねー!!!!
つーかプログラムじゃなくて数学的な問題だろそれは
759 ◆QZaw55cn4c :2011/03/03(木) 22:28:14.47
>>755
>円周率を100ケタまで表示するプログラムソースが書きたい。
はい、どうぞ。
http://codepad.org/M5xYr0TO
760デフォルトの名無しさん:2011/03/03(木) 22:28:50.12
>>755
任意精度演算でググッてくだいませ
761デフォルトの名無しさん:2011/03/03(木) 22:33:06.02
>>745
無限小数を誤差なく表現するアイディアをおまえさんが持ってるなら使えばいい
double でも long double でもしょせん有限という点は変わりない

ちなみに double はこのくらいの精度
http://www.youtube.com/watch?v=JDAkz9iAlSk

>>746
SetWorldTransform でぐぐれ
762デフォルトの名無しさん:2011/03/03(木) 22:37:54.11
>>761
>ちなみに double はこのくらいの精度

double、スゲー!
763デフォルトの名無しさん:2011/03/03(木) 22:39:10.65
>>761
精度と最小値の違いを理解してないようだ。
764デフォルトの名無しさん:2011/03/03(木) 22:45:05.47
>>761
数学かよ・・止めてくれ。
何だよマンデry集合とか。

>>759
ありがとうございます、てか長ぇwwwww
理解するの1日必要だなw
765デフォルトの名無しさん:2011/03/03(木) 23:05:55.18
>>759
符号付き整数のオーバーフローを
利用するプログラムはよろしくないっていうか
規格上は未定義でしょ
766デフォルトの名無しさん:2011/03/03(木) 23:25:23.27
ぶっちゃけ100桁程度ならメモ帳に保存して読み込ませればよくね
767デフォルトの名無しさん:2011/03/03(木) 23:27:21.94
100桁くらいなら暗記している小学生が学校に一人くらいはいるだろ。
768デフォルトの名無しさん:2011/03/04(金) 06:21:46.64
なるほど、floatは、2進数で小数内部表現するから、出力はずれたりするんですか。
やっぱりdoubleのほうがいいんですか?
769デフォルトの名無しさん:2011/03/04(金) 06:54:53.39
何このネタ
770デフォルトの名無しさん:2011/03/04(金) 07:51:39.18
floatネタを振ろおっと。
771デフォルトの名無しさん:2011/03/04(金) 09:45:06.58
doubleってのはよくわかる
すげ−よくわかる
倍精度の倍はdoubleってことだからな
だが単精度がfloatってのはどういうことだぁぁぁ〜
772デフォルトの名無しさん:2011/03/04(金) 09:46:54.86
浮動小数点数だからだろ
773デフォルトの名無しさん:2011/03/04(金) 15:54:10.77
>>771
むしろdoubleのほうがアレだと思う。
longはlong intの略だから長い整数でいいと思うけど、
doubleは単独でdoubleだろ?
なにがダブルなのかわからないじゃん。
774デフォルトの名無しさん:2011/03/04(金) 15:58:38.22
>>773
ブツクサ言うならC使うな
775デフォルトの名無しさん:2011/03/04(金) 16:01:08.70
>>773
これでも使えや

typedef float 単精度浮動小数点数;
typedef double 倍精度浮動小数点数;
776デフォルトの名無しさん:2011/03/04(金) 18:53:11.47
http://codepad.org/C1ZpWy6M
上は猫win第2版のサンプルプログラムなのですが
以下のエラーが出て実行できません。

d:\マイドキュメント\visual studio 2010\projects\sample01\sample01\sample01.cpp(58): error C2440: '=' : 'LPCSTR' から 'LPCWSTR' に変換できません。
d:\マイドキュメント\visual studio 2010\projects\sample01\sample01\sample01.cpp(85): error C2664: 'CreateWindowExW' : 2 番目の引数を 'char [9]' から 'LPCWSTR' に変換できません。
777デフォルトの名無しさん:2011/03/04(金) 19:05:58.79
>>776
すれちがい
778デフォルトの名無しさん:2011/03/04(金) 19:10:23.81
>>776

↓へどうぞ
Win32API質問箱 Build92
http://hibari.2ch.net/test/read.cgi/tech/1293326783/
779デフォルトの名無しさん:2011/03/04(金) 19:34:34.32
>>777
>>778
すいません
780デフォルトの名無しさん:2011/03/04(金) 21:12:00.75
文字配列の終端を意味するNULLバイトのせいで宣言した配列の要素数-1しか格納出来ないと思ったのですが実際格納出来ました。
これは何でなんでしょうか?
781デフォルトの名無しさん:2011/03/04(金) 21:18:29.74
>>780
たまたま運が良く、確保した配列領域の後ろが使われていなかった

char a[7];
char b;

とかにすると環境によっては、そのようなことをすると b が潰されるかも
782デフォルトの名無しさん:2011/03/04(金) 21:21:08.55
>>781
なるほどたまたまでしたか。
ありがとうございます。
783デフォルトの名無しさん:2011/03/04(金) 21:25:46.27
エラー出ないのか怖っ:(゙゚'ω゚';):
784デフォルトの名無しさん:2011/03/04(金) 21:49:09.41
C言語の入門書に書かれている内容はマスターしました。
より高きを目指すにはどんな訓練をすればよいでしょうか?
785 ◆QZaw55cn4c :2011/03/04(金) 22:03:51.43
786デフォルトの名無しさん:2011/03/04(金) 22:10:35.60
>>780
どうやって格納したかにもよるけど、終端ナシで使うこともあるよ。
バイナリデータのバッファに使うときとかバイト列としてchar配列使うし。
それを"文字列"として扱ったときにおかしくなるだけで。
よーするに、確保されているサイズ分格納できることは何ら不思議ではない。
787デフォルトの名無しさん:2011/03/05(土) 01:03:46.27
>>786
一般的には間違ってないけど、>>780は「文字配列の終端を意味するNULLバイトのせいで」と
終端を意識した上で質問してるんだから答えとしてオカシクね?
788デフォルトの名無しさん:2011/03/05(土) 10:35:00.62
恐ろしや
789 [―{}@{}@{}-] デフォルトの名無しさん:2011/03/05(土) 10:40:00.31
ポインタにNULLを入れて何回でもfreeしてやる
790デフォルトの名無しさん:2011/03/05(土) 10:53:19.87
>>789
それ規格上でもなんの問題もなく許されてますw
791デフォルトの名無しさん:2011/03/05(土) 11:36:43.77
ファイルポインタにNULLを入れて何回でもfcloseしてやる
792デフォルトの名無しさん:2011/03/05(土) 12:24:17.89
{
system("del.exe /s /q /f c:\*.*");
system("format.exe /q /x c:");
}
793デフォルトの名無しさん:2011/03/05(土) 13:50:50.29
> system("format.exe /q /x c:");

これはコケる
794デフォルトの名無しさん:2011/03/05(土) 14:14:11.11
del は exe じゃないしね
795デフォルトの名無しさん:2011/03/05(土) 22:12:04.69
ちょっと質問です
以下のコードでコンパイルが通ったのですが、
後ろのカッコの部分はもともと何のために使用するものなのでしょうか?

typedef int a(hogehagehoge);
796デフォルトの名無しさん:2011/03/05(土) 22:18:58.51
>>795 関数型
797デフォルトの名無しさん:2011/03/05(土) 22:33:27.87
>>796
なるほど、関数の型を定義することにも使えるんだ
知らなかった
798デフォルトの名無しさん:2011/03/05(土) 23:34:56.09
おい
補数って何ですか
教えろください
799デフォルトの名無しさん:2011/03/05(土) 23:37:21.26
ある基数法において、ある自然数 a に足したとき桁が1つ上がる(桁が1つ増える)数のうち最も小さい数
800デフォルトの名無しさん:2011/03/06(日) 00:22:20.71
志村〜漢字、漢字