- 1 名前:デフォルトの名無しさん mailto:sage [2007/11/07(水) 06:24:18 ]
- C言語の入門者向け解説スレです。
・C++言語はスレ違いです。 ・分からない事をなるべく詳しく書いて下さい。 ・ソースコードを晒すと答えやすくなるかもしれません。 ・質問者は最初にその質問をした時のレス番号を名前欄に書いて下さい。 前スレ C言語なら俺に聞け(入門篇) Part 20 pc11.2ch.net/test/read.cgi/tech/1192455273/ 教えて欲しいのではなく丸投げしたいならこちらへ C/C++の宿題を片付けます 99代目 pc11.2ch.net/test/read.cgi/tech/1194262698/
- 641 名前:640 mailto:sage [2007/11/23(金) 06:31:08 ]
- 訂正
#include <stdio.h> short AtoS(char *pStr, int *pRetCode) { int n,s; if(pRetCode == NULL) return 0; *pRetCode = -1; if(pStr == NULL || *pStr == '\0') return 0; for(s=*pStr=='-'?1:0,pStr+=s,n=0;*pStr != '\0' && *pStr>='0' && *pStr<='9' && n>=-32768;pStr++) n=n*10-*pStr+'0'; n=s?n:-n; if(*pStr != '\0' || *(pStr-1) == '-' || n<-32768 || n>32767) return 0; *pRetCode = 0; return n; } int main() { int i,s,r; char t[][16]={"","-","a","-a","a1","1a","1-", "-32769","-32768","-1","0","1","32767","32768","-000001","000001","4294967296"}; printf("String\t: Value\t(RetCode)\n"); s = AtoS("1",NULL); printf("\"1\"\t: %d\t(NULL)\n",s); s = AtoS(NULL,&r); printf("(NULL)\t: %d\t(%d)\n",s,r); for(i=0; i<sizeof(t)/16; i++) { s = AtoS(t[i],&r); printf("\"%s\"\t: %d\t(%d)\n",t[i],s,r); } return 0; }
- 642 名前:デフォルトの名無しさん mailto:sage [2007/11/23(金) 09:05:09 ]
- >>639
> pStr[i] = pStr[i] - '0'; 文字列へのポインタ貰った関数が、中身を書き換えちゃいけない。 呼び出し側が、 n=AtoS("12345", &x); とした場合、pStrの指す先は書き換えは不可能である処理系が多い。 普通、こういう文字列へのポインタを貰う関数は、 short AtoS(const char *pStr, int *pRetCode) のようにconstを付ける。
- 643 名前:デフォルトの名無しさん mailto:sage [2007/11/23(金) 09:23:18 ]
- >641
for(s=*pStr=='-'?1:0,pStr+=s,n=0;*pStr != '\0' && *pStr>='0' && *pStr<='9' && n>=-32768;pStr++) n=n*10-*pStr+'0'; ↑こういう可読性の悪い書き方はやめようぜ…
- 644 名前:デフォルトの名無しさん mailto:sage [2007/11/23(金) 09:24:47 ]
- わざとだろう
- 645 名前:デフォルトの名無しさん [2007/11/23(金) 10:41:36 ]
- x[n]とr=0.6に対して
(x[0]-x[1])/x[1] + r * (x[1]-x[2])/x[2] + r^2 * (x[2]-x[3])/x[3] + ・・・ という計算を多くするとき計算が速く終わるコードって分かりますか? x[n]は変化します 厳密な値ではなくていいです
- 646 名前:デフォルトの名無しさん [2007/11/23(金) 10:42:45 ]
- あとx[n]の値は50%以内のずれしかありません
- 647 名前:デフォルトの名無しさん [2007/11/23(金) 10:54:43 ]
- x[n]の平均値hとその誤差をd[n]とすると
(x[0]-x[1])/x[1] =d[0]-d[1]/x[1] =d[0]-d[1]/h =(d[0]-d[1])*k k=1/h とすれば速そうですね
- 648 名前:デフォルトの名無しさん mailto:sage [2007/11/23(金) 11:57:13 ]
- (x[0]-x[1])/x[1] = x[0]/x[1]-1 でしょ。
-1の部分だけ分けて、 元の式=x[0]/x[1]+r*x[1]/x[2]+r^2*x[2]/x[3]....-(1+r+r^2+...) とすれば、 r=0.6固定なら後ろの部分は定数だから前もって計算しておけば早いのかも。 精度が無視できる項以降は計算しないって手もあるのかな。 有効数字2ケタでいいなら、0.6^10以降は計算しなくてもいいと思う。
- 649 名前:デフォルトの名無しさん [2007/11/23(金) 12:22:00 ]
- >>648
サンクス
- 650 名前:574 mailto:sage [2007/11/23(金) 13:43:42 ]
- >>576-579
ありがとうございました。 プロトタイプ宣言はやはり暗黙的にexternのですね。 社内のソースと合わせるため、一応これからはグローバルな関数はexternを付けて区別していこうと思います。
- 651 名前:デフォルトの名無しさん mailto:sage [2007/11/23(金) 14:22:28 ]
- プロトタイプ宣言は厳密には暗黙的に extern なのではなくて、
それより前に static なプロトタイプ宣言や関数定義がなければ extern になり、 あれば static になる。
- 652 名前:デフォルトの名無しさん mailto:sage [2007/11/23(金) 14:24:28 ]
- そういうときに「規定」って言葉を使うのかな。
- 653 名前:デフォルトの名無しさん mailto:sage [2007/11/23(金) 14:26:23 ]
- ヘッダファイルで static な関数プロトタイプを書くことは無いし、
ヘッダファイルはファイルの先頭でインクルードするしで、 >>651 のような曖昧さがあっても実際の所これが問題になる事はない。 extern をつけるかどうかは好みの問題。
- 654 名前:デフォルトの名無しさん mailto:sage [2007/11/23(金) 15:14:15 ]
- >>653
すまん。 前2行と後ろ2行の関係が分からん。 出来ればもうちょい詳しく頼む。
- 655 名前:デフォルトの名無しさん mailto:sage [2007/11/23(金) 15:39:55 ]
- 別のスレに翻訳単位をよくわかってない奴がいたな。
ヘッダファイルは彼にとって何か特別なものなのかもしれないが。
- 656 名前:デフォルトの名無しさん mailto:sage [2007/11/23(金) 15:52:05 ]
- >>654
前2行の理由により、普通はヘッダファイル内にあるプロトタイプ宣言より先に static なプロトタイプ宣言や関数定義が現れることはないから、 実質的には暗黙的に extern になると考えても問題ないという話。
- 657 名前:デフォルトの名無しさん [2007/11/23(金) 19:14:43 ]
- ここに来てるのってみんなプログラマーなの?
- 658 名前:デフォルトの名無しさん mailto:sage [2007/11/23(金) 19:36:03 ]
- プログラムが出来るって意味ではみんなプログラマーだろうな
- 659 名前:デフォルトの名無しさん mailto:sage [2007/11/23(金) 19:59:26 ]
- 職業=プログラマはあんまいないと思う
学生とSEばっか
- 660 名前:デフォルトの名無しさん mailto:sage [2007/11/23(金) 20:09:55 ]
- いや、プログラマーって普通にいるだろ。
- 661 名前:デフォルトの名無しさん mailto:sage [2007/11/23(金) 20:13:13 ]
- >>659
SEが居るならプログラマも居る事になるんだよ
- 662 名前:デフォルトの名無しさん mailto:sage [2007/11/23(金) 20:19:42 ]
- SEと職業プログラマはちょっと違うけどな
- 663 名前:デフォルトの名無しさん mailto:sage [2007/11/23(金) 20:21:40 ]
- あ、名刺はSEだけどプログラマって人はいっぱいいると思う
特に若い人。
- 664 名前:デフォルトの名無しさん mailto:sage [2007/11/23(金) 20:35:16 ]
- 昔職業プログラマって優れたコードを書く人だと思ってたけど、
なってみたら優れたコードとかは二の次で動くコードを書く人だと知った。
- 665 名前:デフォルトの名無しさん mailto:sage [2007/11/23(金) 20:40:15 ]
- 資格とかいらなくて、基本的にだれでもやれる職業だしな。
- 666 名前:デフォルトの名無しさん mailto:sage [2007/11/23(金) 21:25:12 ]
- 頭使うドカタだしな。
- 667 名前:デフォルトの名無しさん mailto:sage [2007/11/23(金) 21:44:55 ]
- 名刺もってるプログラマに出会ったことないんだけど
- 668 名前:デフォルトの名無しさん mailto:sage [2007/11/23(金) 21:46:47 ]
- 名刺は持ってるぞ
渡す機会は無いけど
- 669 名前:デフォルトの名無しさん mailto:sage [2007/11/23(金) 21:47:29 ]
- 名刺に「プログラマ」と書くとどうしても低く見られるから、
「システムエンジニア」と書くんだよ。
- 670 名前:デフォルトの名無しさん mailto:sage [2007/11/23(金) 21:48:33 ]
- みんな普通にもってるでしょ?
自社以外の人にいっさい会わないで、こもって仕事してるならいらないけど。 名詞の肩書きに「プログラマー」とか入ってないって意味?
- 671 名前:デフォルトの名無しさん mailto:sage [2007/11/23(金) 21:50:10 ]
- 所属とか役職は入ってるけど、プログラマーとかSEとかってのは書いてないよね。
- 672 名前:デフォルトの名無しさん mailto:sage [2007/11/23(金) 21:50:43 ]
- いや、会社が名刺をつくってくれないらしいんだが……
- 673 名前:デフォルトの名無しさん mailto:sage [2007/11/23(金) 21:54:02 ]
- たまにしか使わないのに何十枚も刷ると高いから、
使うときに1枚だけプリンタから出せってことだよ。
- 674 名前:デフォルトの名無しさん mailto:sage [2007/11/23(金) 21:58:23 ]
- 数十枚刷れば数年もつ
- 675 名前:デフォルトの名無しさん mailto:sage [2007/11/23(金) 22:03:15 ]
- プログラマが名刺出すような状況にならんだろ
SEとして派遣されたら名刺だすけどさ
- 676 名前:デフォルトの名無しさん mailto:sage [2007/11/23(金) 22:10:23 ]
- >672-673
どんだけ貧乏な会社なんだよ。 100枚1000円ぐらいなのに…
- 677 名前:デフォルトの名無しさん mailto:sage [2007/11/23(金) 22:11:36 ]
- 使わないものを作ったってねぇ
- 678 名前:デフォルトの名無しさん mailto:sage [2007/11/23(金) 22:15:03 ]
- あんま名刺出すとセールスの電話が増えて業務が滞る
- 679 名前:デフォルトの名無しさん mailto:sage [2007/11/23(金) 23:19:51 ]
- >>678
わたくしどもはお客様の会社にプログラマを派遣いたしております わたくしどもは常に優秀な人材を取り揃えてございます おたくの会社にもおひとついかがでしょうか?
- 680 名前:デフォルトの名無しさん mailto:sage [2007/11/23(金) 23:23:29 ]
- おもしろくないよ
- 681 名前:デフォルトの名無しさん mailto:sage [2007/11/23(金) 23:32:04 ]
- そのとおり
笑えない話なのさ
- 682 名前:デフォルトの名無しさん mailto:sage [2007/11/23(金) 23:47:54 ]
- Cでpow(5,i)の計算をした時のことでお聞きしたいことがあります。
最初はpow(5,0)=1,pow(5,1)=5,(5,2)=25....と順調です。 しかし、pow(5,23)の時に本来ならば11920928955078125のはずなのですが、 なぜか11920928955078124と1小さい数になってしまいます。 pow(5,24)以降も正しい数値が得られず誤差がどんどん大きくなっていってしまいます この原因が全く分からず途方にくれている状態です…よろしくお願いします。
- 683 名前:デフォルトの名無しさん mailto:sage [2007/11/23(金) 23:50:40 ]
- >>682
ttp://ja.wikipedia.org/wiki/%E8%AA%A4%E5%B7%AE#.E8.A8.88.E7.AE.97.E8.AA.A4.E5.B7.AE.E3.81.AE.E7.A8.AE.E9.A1.9E
- 684 名前:デフォルトの名無しさん mailto:sage [2007/11/23(金) 23:51:45 ]
- >>682
doubleの有効桁数を超えてるとか。
- 685 名前:デフォルトの名無しさん [2007/11/23(金) 23:57:53 ]
- 多売長ライブラリ
- 686 名前:デフォルトの名無しさん mailto:sage [2007/11/24(土) 00:15:23 ]
- >683
倍精度浮動小数点で普通使われるIEEE 754 形式だと仮数部52ビットだけど、 pow(5,23)で52bitを超えるから、以降は誤差が出る。 誤差を避けるためには自分で作るしかない。 でも多分そういうアルゴリズムは探せばあるよ。
- 687 名前:デフォルトの名無しさん [2007/11/24(土) 01:53:27 ]
- 0*0.003=0
をlog計算するためにプログラムでかくにはどうすればいいですかね? 0*確率なら0になるから処理の結果に影響ないんだけど logだと0にならないんで困るわ。
- 688 名前:デフォルトの名無しさん mailto:sage [2007/11/24(土) 01:54:20 ]
- ?
- 689 名前:デフォルトの名無しさん mailto:sage [2007/11/24(土) 02:09:44 ]
- わからないかな?
たとえばこの図であらわすと kossie.net/up/src/kos1247.jpg startから1回目の移動で↑と↓に移動できるそのときの確率が0.5と0.5 start地点の状態確率が1とすると↑と↓に移動した段階の状態確率はそれぞれ0.5 0.5 プログラム的に1回の移動ごとに、すべての状態をまわって、 そのあとに2回目の移動をすることにしてます。そうじゃないと作れないので。 これを小数点でなら最初すべての状態の確率を 0にしておけば、それぞれの移動ごとに すべての状態をまわっても0*移動確率 =0になるので変な数値が値がでることはありません。 ただlogで計算する場合に、logはlog(A*B)=logA+logBという性質があるので Aが0であってもBが0でなければ数値は残ってしまういうわけ。 これでプログラムになやんでるんですよ。
- 690 名前:デフォルトの名無しさん mailto:sage [2007/11/24(土) 02:13:56 ]
- そもそもlogxって定義域x>0だろが
- 691 名前:689 mailto:sage [2007/11/24(土) 02:35:46 ]
- まあ問題はこういう感じなんですけど、図は>>689のとおりです
いま、start,1,2,3,10,11,endという状態がありまして、 以下のような確率で移動することとします。 最初はstartで最後はendです。startの状態確率は1.0です。 1.0から移動する確率をかけると状態1のその時点での状態確率が0.5、状態2の状態確率が 0.5となります。 ただし状態1は入ってくる矢印が3つですので、その時点では0.5ですが 次の状態に状態1から状態1へ移動すると0.5X0.6の計算をして0.3となるわけで す。この(startから状態1への移動確率) (状態1の状態確率)X(状態1から状態1への移動確率)と、(状態11の状態確率)X(状態11 から状態1への移動確率)の和が状態1の状態確率となります。 startから状態10に移動したり、状態2に移動したりして計算をしていって endにきたときの最終状態確率を求めよ。っていうのが問題です。 これをlogで計算しないといけないっていう前提にプログラムを作るとしたら どうつくっていきますか?ただし状態に入ってくる3つの値は比較しながら 計算しないといけないんでね。logの計算なので。
- 692 名前:デフォルトの名無しさん mailto:sage [2007/11/24(土) 02:39:14 ]
- >>689
なんだお前か 氏ね
- 693 名前:689 mailto:sage [2007/11/24(土) 02:46:15 ]
- どうせできないのにいばんな。
- 694 名前:デフォルトの名無しさん mailto:sage [2007/11/24(土) 02:47:25 ]
- 非友好的な態度だな
- 695 名前:デフォルトの名無しさん mailto:sage [2007/11/24(土) 03:40:22 ]
- 負の無限大?
- 696 名前:デフォルトの名無しさん mailto:sage [2007/11/24(土) 03:57:50 ]
- >>691
人に説明する気はありますか? 宿題スレでも、簡単なことを訳の分からない説明してたし 考えていることを整理してみてはどうでしょう? エスパーしておくと、対数を使うのは外部データの入出力のときだけで 内部での計算は対数を使わなくていいんじゃないかと・・・ (どうせ浮動小数点だし)
- 697 名前:デフォルトの名無しさん mailto:sage [2007/11/24(土) 09:14:10 ]
-
「 ̄ `ヽ、 ______ L -‐ '´  ̄ `ヽ- 、 〉 / ヽ\ / // / / ヽヽ ヽ〈 ヽ、レ! { ム-t ハ li 、 i i }ト、 ハN | lヽ八l ヽjハVヽ、i j/ l ! /ハ. l ヽk== , r= 、ノルl lL」 ヽN、ハ l ┌‐┐ ゙l ノl l ヽトjヽ、 ヽ_ノ ノ//レ′ r777777777tノ` ー r ´フ/′ j´ニゝ l|ヽ _/`\ 〈 ‐ 知ってるが lト、 / 〃ゝ、 〈、ネ.. .lF V=="/ イl. ト |お前の態度が とニヽ二/ l ヽ.|l 〈ー- ! `ヽ. l |l気に入らない lトニ、_ノ ヾ、! |l__________l| \ ソ
- 698 名前:デフォルトの名無しさん mailto:sage [2007/11/24(土) 09:21:52 ]
- >>689
>ただlogで計算する場合に、logはlog(A*B)=logA+logBという性質があるので >Aが0であってもBが0でなければ数値は残ってしまういうわけ。 なんで、そんな偉そうにウソを語るんだ。
- 699 名前:デフォルトの名無しさん mailto:sage [2007/11/24(土) 09:53:50 ]
- log0 は未定義だから log(A*B)=logA+logB で A が 0 の場合を考える事自体がナンセンス
- 700 名前:デフォルトの名無しさん mailto:sage [2007/11/24(土) 10:03:19 ]
- >>689
よく分からんが、log0って出来ないんじゃないの?
- 701 名前:デフォルトの名無しさん mailto:sage [2007/11/24(土) 10:06:58 ]
- エスパーすると、確率を log した値で保持しておいて、
確率変化を積じゃなく和で表現したいんだろうな。 log(0) は CPU によっては -inf (マイナス無限大) として扱われるから、 そういう CPU では特に問題は発生しないと思うんだけど。
- 702 名前:デフォルトの名無しさん mailto:sage [2007/11/24(土) 10:45:05 ]
- >>683-686
レスサンクス! 結局、多倍長演算をするためにGMPとやらを入れてみました。 しかしGMPの関数を解説してるサイトの少ないこと… どんな関数があるのか、引数の意味は何かとかさっぱり分からないorz
- 703 名前:デフォルトの名無しさん mailto:sage [2007/11/24(土) 11:32:52 ]
- 練習で、サーバーソケットとクライアントソケットを両方持つプログラムを作ってます。
サーバーはサーバーでリッスンさせといて、クライアントはメッセージを入力すると相手サーバーへ飛ぶ、 と考えたんだけど、先にサーバーソケットをaccept()でループさせとくと、後のクライアント処理に行けなくて困ってる。 スレッド使わないとムリ?
- 704 名前:デフォルトの名無しさん mailto:sage [2007/11/24(土) 11:55:20 ]
- >>703
>スレッド使わないとムリ? 無理。素直にスレッド立てれ。
- 705 名前:デフォルトの名無しさん mailto:sage [2007/11/24(土) 11:57:22 ]
- プロセスでもいいけどな
- 706 名前:デフォルトの名無しさん mailto:sage [2007/11/24(土) 12:00:22 ]
- selectとその仲間
全然(標準)Cじゃねーじゃねーか
- 707 名前:デフォルトの名無しさん [2007/11/25(日) 00:04:32 ]
- for文とwhile文の使い分けがよく分かりません。
苦Cのサイトに、「for文はwhile文を拡張した文」と書いてあったのですが、 while文が先にできて後でfor文を追加したのでしょうか? while文でなければできないことや、while文でやった方がいいこと、またその逆など、 ありましたら教えてください。よろしくお願いいたします。
- 708 名前:デフォルトの名無しさん mailto:sage [2007/11/25(日) 00:10:58 ]
- >>707
とりあえずループカウンタをつかってるループはfor()を使っておけばいいんじゃないの?
- 709 名前:デフォルトの名無しさん mailto:sage [2007/11/25(日) 00:17:10 ]
- >>707
while文でできてfor文でできないことや、その逆のことは、ない。 i = 0; while (i < 10) { .... i++; } と for (i = 0; i < 10; i++) { ... } のどちらが読みやすいか? その程度の問題。
- 710 名前:デフォルトの名無しさん mailto:sage [2007/11/25(日) 00:19:45 ]
- do{}while(); // 必ず一回は行う処理
for(;;) // ループ途中で continue を行っても for の第三項が実行される
- 711 名前:デフォルトの名無しさん [2007/11/25(日) 00:36:29 ]
- >>708-710
ありがとうございます。 文法的にwhile文の方が見やすいので、個人的にはそちらを使おうかと思っています。 一般的にはどういう使い分けがされてるとか、「慣習」や「常識」みたいのはありますでしょうか?
- 712 名前:デフォルトの名無しさん mailto:sage [2007/11/25(日) 00:54:11 ]
- 文字列処理とか数値処理とかで使い分けるだろ。
- 713 名前:デフォルトの名無しさん mailto:sage [2007/11/25(日) 01:03:14 ]
- ここでfor文の方が速いからfor文使え、とその後200レス程費やす無駄な議論を起こす為のネタ投下
- 714 名前:デフォルトの名無しさん mailto:sage [2007/11/25(日) 01:04:49 ]
- 慣習とかは無いだろうけど,
回数が固定なら for,未定なら while が一般的だと思う たとえば,「荷物を10個選ぶ」なら for で,「荷物を10kg分選ぶ」なら while とか
- 715 名前:デフォルトの名無しさん mailto:sage [2007/11/25(日) 01:07:00 ]
- そうだな
内容の容量の制限したいときにforではせんわな。 あープログラムつくらないといけないのに 作る気がしない。 作り始めたら5,6時間いけるのに そういうのが全然ない。
- 716 名前:デフォルトの名無しさん mailto:sage [2007/11/25(日) 09:10:10 ]
- たしかに for でも while でもよいネ。
オイラは無限ループは while 使うようにしてるな。 do while は使わなくなった。
- 717 名前:デフォルトの名無しさん mailto:sage [2007/11/25(日) 09:50:56 ]
- ループするごとに毎回行いたい処理があれば for を使うね。
continue しても実行されるから。
- 718 名前:デフォルトの名無しさん mailto:sage [2007/11/25(日) 11:06:17 ]
- vcだとwhile(1)は警告レベル最大だと文句言われるのでfor(;;)を使うようになった
この辺の習慣は環境で変わるんだろうね
- 719 名前:デフォルトの名無しさん mailto:sage [2007/11/25(日) 11:08:38 ]
- 泣く泣く for (; ;) を使うように
- 720 名前:デフォルトの名無しさん [2007/11/25(日) 13:30:51 ]
- >>718
どういう警告?
- 721 名前:デフォルトの名無しさん mailto:sage [2007/11/25(日) 13:42:40 ]
- >>720
C4127
- 722 名前:デフォルトの名無しさん [2007/11/25(日) 15:10:01 ]
- CとC++はもう仲良くできないの?
C99すごすぎ。
- 723 名前:デフォルトの名無しさん mailto:sage [2007/11/25(日) 17:28:24 ]
- 認識率1%とかの実験のプログラムを前の先輩をつくられて
再実験でそのプログラムを作ってるんだけど。 データ100でそのうちの何個かで認識率を出すって感じで 今ようやくデータ1つで数値を出せるようになった。 データ100個をプログラムで入力できるようにして自動でしたいんだけど 結構複雑。 データ1つ入力して値をだして100回するのも 認識率1%とかいうやって意味あるのか的な感じがして自重してる。 しかしプログラムの内容を率でだされるのっていやだね。
- 724 名前:デフォルトの名無しさん mailto:sage [2007/11/25(日) 17:36:31 ]
- 日記帳にでも書いてろカス
- 725 名前:デフォルトの名無しさん mailto:sage [2007/11/25(日) 18:57:23 ]
- www.nicovideo.jp/watch/sm1619083
これか
- 726 名前:デフォルトの名無しさん mailto:sage [2007/11/25(日) 19:48:10 ]
- 文字列処理を極めたいのですが、何から手を付けたらいいですか?
- 727 名前:デフォルトの名無しさん mailto:sage [2007/11/25(日) 20:01:28 ]
- 左から。
- 728 名前:デフォルトの名無しさん mailto:sage [2007/11/25(日) 20:02:51 ]
- まずは文字列の表現方法を考えることから
- 729 名前:デフォルトの名無しさん mailto:sage [2007/11/25(日) 20:03:10 ]
- 修辞的疑問文というやつだな
- 730 名前:デフォルトの名無しさん mailto:sage [2007/11/25(日) 20:13:07 ]
- ファイルを読み取る時に一文字ずつ読み取る方法と
一行ずつ読み取る方法がありますが、 どういう場合に使い分けるんですか?
- 731 名前:デフォルトの名無しさん mailto:sage [2007/11/25(日) 20:14:23 ]
- カンタンなことだ。
ファイルを1文字ずつ読み取りたい場合は1文字ずつ読み取る方法を使い、 1行ずつ読み取りたい場合は1行ずつ読み取る方法を使う。
- 732 名前:デフォルトの名無しさん mailto:sage [2007/11/25(日) 20:16:09 ]
- その日の気分による
- 733 名前:デフォルトの名無しさん mailto:sage [2007/11/25(日) 20:30:51 ]
- 一行ずつ、もしくは一文字ずつ読み取らなければいけない場合とは、
例えばどんな場合がありますか?
- 734 名前:デフォルトの名無しさん mailto:sage [2007/11/25(日) 20:43:56 ]
- >>733
行に意味があるときには行単位で読んだほうが楽 行に意味がないときには文字単位で読んだほうが楽
- 735 名前:デフォルトの名無しさん mailto:sage [2007/11/25(日) 22:13:40 ]
- バイナリファイルは1文字ずつ読んで、
テキストファイルは1行ずつ読む。
- 736 名前:デフォルトの名無しさん mailto:sage [2007/11/25(日) 22:39:40 ]
- >>735
さらっと嘘教えるな
- 737 名前:デフォルトの名無しさん [2007/11/25(日) 23:10:37 ]
- 型変換しないのに型変換するとコストかかりますか?
たとえばunsigned int型を同じ型でキャストした場合です
- 738 名前:737 [2007/11/25(日) 23:17:16 ]
- どうやらたいして差がないことが分かりました
- 739 名前:デフォルトの名無しさん mailto:sage [2007/11/25(日) 23:39:11 ]
- まず間違いなく出力は1バイトもたがわないと思う。
- 740 名前:デフォルトの名無しさん mailto:sage [2007/11/26(月) 00:22:38 ]
- ビルドしてfc /bで比べればいいんじゃね
- 741 名前:デフォルトの名無しさん [2007/11/26(月) 01:08:03 ]
- >>714
分かり易い説明をありがとうございます。 >>709の例で言うと、for文を使う方が一般的、ということですね。 どちらも i を宣言しないといけないことに変わりはないんですね。
|

|