- 1 名前:デフォルトの名無しさん mailto:sage [2007/10/15(月) 22:34:33 ]
- C言語の入門者向け解説スレです。
・C++言語はスレ違いです。 ・分からない事をなるべく詳しく書いて下さい。 ・ソースコードを晒すと答えやすくなるかもしれません。 ・質問者は最初にその質問をした時のレス番号を名前欄に書いて下さい。 前スレ C言語なら俺に聞け(入門篇) Part 19 pc11.2ch.net/test/read.cgi/tech/1190342593/ 教えて欲しいのではなく丸投げしたいならこちらへ C/C++の宿題を片付けます 97代目 pc11.2ch.net/test/read.cgi/tech/1191937213/
- 426 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 17:50:10 ]
- >>424
必要ないなら無理して使わなくても良い物です
- 427 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 17:52:55 ]
- >>426
無理して使えるようになるためにおせーてよ 何か新天地が開けるかもしれないじゃん というか教えてくださいお願いしますガンダム見ませんから
- 428 名前:デフォルトの名無しさん [2007/10/27(土) 17:56:59 ]
- newやvectorつかえば十分 性能も変わらない
- 429 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 17:58:13 ]
- char型で考えるから分かりにくいことになる。
- 430 名前:デフォルトの名無しさん [2007/10/27(土) 18:00:08 ]
- char だと領域確保に制限がある new mallocは巨大なのが出来る
- 431 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 18:00:14 ]
- newやvectorがわからないっす
- 432 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 18:04:55 ]
- >>427
char array[100]; のかわりにchar *p; p=(char*)malloc(100);を使うとき 1.配列のサイズが未定のとき 実行時にしかか配列のサイズ(この場合100)がわからないとき 2..配列のサイズが大きすぎて内部変数として確保できないとき 外部変数を使うという手もある
- 433 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 18:05:28 ]
- ここって C++ ありだっけ?
- 434 名前:デフォルトの名無しさん [2007/10/27(土) 18:09:53 ]
- char型だと巨大配列を確保できない
#include <iostream> #include <vector> using namespace std; #define N 10000000 main(){ int *x; x=new int[N]; vector<int> y; y.reserve(N); // char z[N];z[0]=1; for(int n=0;n<N;n++)x[n]=y[n]=1; printf("%d",x[0]);}
- 435 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 18:10:55 ]
- >>433
なし
- 436 名前:デフォルトの名無しさん [2007/10/27(土) 18:11:16 ]
- mallocとnewに性能の違いはなく、vectorはちょっと高性能でちょっと動作に負担がかかる
- 437 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 18:30:06 ]
- (ノ∀`) アチャー
- 438 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 18:58:41 ]
- >>418
状況による。 たまにいる、必ずやるってやつは素人。
- 439 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 19:23:20 ]
- >>424
配列サイズが分からなかったり、途中で増える可能性がある時に使う
- 440 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 19:35:21 ]
- >>438
やらないとLintに叱られます
- 441 名前:プリンがー mailto:aaa [2007/10/27(土) 19:55:12 ]
- 問題を解く時、まず問題を見て引数があるかないかってどうやって分かります?
- 442 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 20:02:57 ]
- 問題ってのが仕事上の問題なのか学校で先生に出された問題なのかによる
- 443 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 20:03:16 ]
- エスパー!! エスパー!!
- 444 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 20:07:27 ]
- >>440
そんなlintありません。
- 445 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 20:21:30 ]
- >>434
スタックサイズを増やせばおk ま、普通はポインタにして malloc するがな
- 446 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 20:37:47 ]
- >>424
char str[100] の[]の中に変数を入れるとコンパイルエラーになるが、 mallocだとそれができます。
- 447 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 20:42:54 ]
- コンパイラによってはエラーにならないけどな
- 448 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 20:55:01 ]
- C99
- 449 名前:プリンがー mailto:aaa [2007/10/27(土) 22:06:09 ]
- >>442
学校で先生に出された問題ってか演習問題とか
- 450 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 23:11:41 ]
- >>449
コンピュータじゃないんだから人間的に考えればいいと思うよ
- 451 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 23:16:35 ]
- 入力として必要なものは引数なんじゃね
- 452 名前:デフォルトの名無しさん mailto:sage [2007/10/28(日) 00:19:56 ]
- 1 getchar() を用いて 1 文字入力を行い、Ctr+Z が入力されるまで次の処理を繰り返しなさい。
大文字、小文字に関係なく、アルファベットを入力した場合には、それぞれの入力した個数を数えなさい。 2. 1. の処理終了後、アルファベットをそれぞれ何個ずつ入力したか出力しなさい。 これなんですがどう頑張っても意味不明です・・・ ヒントとして ?入力アルファベットの個数を数えるカウンタは大きさ 26 の配列で用意。 最初に、配列の 26個の要素すべてを0クリアすること。 ?A〜Z、a〜z は ASCIIコードの 65〜90、97〜122 に該当することを考えれば、配列の何番目をカウントUP するかは計算で求められるはず。 実行結果 入力文字 14abcaaabccdzzgk(リターン) aabc147cab8cc3c(リターン) CTRL+Z(リターン) とすると a = ○○個 b = ○○個 c = ○○個 改行 d = ○○個 e = ○○個〜〜〜 と一覧を出力させたいんです。 とあるんですが、どう書いたらいいんでしょうか・・・('A` switch使ってみたりしたんですが、イマイチ意味がわからなくなってきました・・・。 ちなみに今まで習った事は、 if if else for while break continue goto 算術関数 strcpy等、 等の初歩的なことだけです。。。
- 453 名前:デフォルトの名無しさん mailto:sage [2007/10/28(日) 00:22:10 ]
- >>452
宿題スレ行け
- 454 名前:デフォルトの名無しさん mailto:sage [2007/10/28(日) 00:25:32 ]
- どこがわからないのかが分からないが
65-65は0 90-65は25 97-97は0 122-97は25 ってことじゃね
- 455 名前:デフォルトの名無しさん mailto:sage [2007/10/28(日) 00:25:45 ]
- 今まで習った事の中にgotoがあるのが気になる・・・
普通初心者にgotoは教えないだろ
- 456 名前:デフォルトの名無しさん mailto:sage [2007/10/28(日) 00:25:56 ]
- >>152
宿題スレに行け……と言いたいところだがヒントをやろう 'a'-'a' == 0 'z'-'a' == 25 'A'-'A' == 0 'Z'-'A' == 25
- 457 名前:デフォルトの名無しさん mailto:sage [2007/10/28(日) 00:29:12 ]
- goto嫌いな人ってbreakとかcontinueとかも嫌い?
- 458 名前:デフォルトの名無しさん mailto:sage [2007/10/28(日) 00:30:44 ]
- goto が嫌いな理由は goto に過剰反応する人を呼ぶ事
- 459 名前:デフォルトの名無しさん mailto:sage [2007/10/28(日) 00:33:50 ]
- gotoが嫌いというよりは、(gotoを)初心者に教えるのが嫌い
- 460 名前:デフォルトの名無しさん mailto:sage [2007/10/28(日) 00:56:35 ]
- あーいえA=65とかで、考え方としては、
scanfで変数cに文字を入れた場合、変数cから65を引いた数、例えばAなら65で0となり、Cなら67で2となり、 配列a[26]の[]内をcとして、そこに+1づつカウントしていく というのはわかるんですが、 どう書いていいのかチンプンカンプンなんです・・・。 そもそもgetcharって1文字入力なのに演習問題の実行例には abcdddef14(return) afijjgjkk(return) CTRL+Zってなっててなんで文字列での入力になってるんだろうとか思ったり('A` ちなみにgotoは多段ループから強制的に抜けたい場合にのみ使ったほうがいいかもしれないけどオススメはできないとも書いてありました。
- 461 名前:デフォルトの名無しさん mailto:sage [2007/10/28(日) 01:01:19 ]
- あ、ちょっと頑張って書いてみます。
なんとなくわかりかけたかも・・・? ちなみにC言語学んでからまだ5日目です('A`
- 462 名前:デフォルトの名無しさん mailto:sage [2007/10/28(日) 01:03:27 ]
- getcharで一文字ずつ取り出す
意味のある文字はアルファベットとCTRL+Z。 それ以外の(return)とか数字とかは無視すればいいんじゃね? CTRL+Zはなんだっけ・・・EOT?
- 463 名前:デフォルトの名無しさん mailto:sage [2007/10/28(日) 01:09:23 ]
- >>462
whileでのgetcharでのループから抜け出すための CTRL+Z=EOF っす。 a と入力して、画面に a = 1個 と入力させるのはかけるんですが、 abcと入力した場合は配列使うと思うんですが、まずそもそも getcharでabcの場合 while ((c = getchar()) != EOF) //cは配列 配列に入力 CTRL+Zを押すとwhile終了。 でc[]にc[0]=a c[1]=b c[2]=cとなる・・・の?あれ理解しかけてきました。 ずっとc[0]にabcとなると思ってました・・・。 文字列の場合はgetsになるんですね、このすぐ先に習う項目にgetsあってみてみたら文字列って書いてあってアッーって思いました。
- 464 名前:デフォルトの名無しさん mailto:sage [2007/10/28(日) 01:10:57 ]
- 勘違いしてるっぽい
- 465 名前:デフォルトの名無しさん mailto:sage [2007/10/28(日) 01:12:50 ]
- ・「abcと入力した場合」でもgetcharは「a」を入力した時点で抜けてくる
・c = getchar()のcは配列である必要ない のはず・・・
- 466 名前:デフォルトの名無しさん mailto:sage [2007/10/28(日) 01:20:45 ]
- ナンダッテー!
見た目的には a と打ち込むだけでは エンターを押さない限り文字入力待機画面になってるんですけど、(上記問題の場合はwhileなので文字→エンター→入力待機→文字→エンター→入力待機となるのはわかります) 内部的には処理されているということですか? aだけ押す、エンターは押さない→画面には入力待機状態であるが、内部的には処理されている? ちょっとやってみまつ。
- 467 名前:デフォルトの名無しさん mailto:sage [2007/10/28(日) 01:24:39 ]
- 内部的にどのタイミングで処理してても、変わらないんだが。
- 468 名前:デフォルトの名無しさん mailto:sage [2007/10/28(日) 01:26:04 ]
- ということはgetcharでabcdefと入力した場合は
aからfまで順に1つ1つ処理していくということになるんですか?
- 469 名前:デフォルトの名無しさん mailto:sage [2007/10/28(日) 01:30:56 ]
- while ((c = getchar()) != EOF) {
puts("なんか入力された\n"); }
- 470 名前:デフォルトの名無しさん mailto:sage [2007/10/28(日) 01:34:00 ]
- エンターを押した時点で処理が開始されるが、文字列をまとめてじゃなくて一文字ずつ読み込む
- 471 名前:デフォルトの名無しさん mailto:sage [2007/10/28(日) 01:35:44 ]
- #include <stdio.h>
int main(void) { int c; while ((c = getchar()) != EOF) { printf("%d\n" ,c); } return 0; } 出力した結果、>>470さんの言ったとおり、例えばAAA(リターン) の場合綺麗に65656510と表示されました! これで問題に取り組んでみたいと思います! ありがとうございます!!!
- 472 名前:デフォルトの名無しさん mailto:sage [2007/10/28(日) 01:37:46 ]
- あれ?Enter待ちになるのか/(^o^)\
引っ込んでようorz
- 473 名前:デフォルトの名無しさん mailto:sage [2007/10/28(日) 01:40:34 ]
- いえいえ、協力してくれようとしてくれただけでも感謝感激雨霰です。
皆さん本当にありがとうございました。
- 474 名前:デフォルトの名無しさん mailto:sage [2007/10/28(日) 01:41:46 ]
- 霰が霧に見えた orz
- 475 名前:デフォルトの名無しさん mailto:sage [2007/10/28(日) 09:44:07 ]
- goto嫌いな人が do{}while(0) で break を使っているのを見て泣けた。
- 476 名前:デフォルトの名無しさん mailto:sage [2007/10/28(日) 11:44:11 ]
- VisualStudio2008で作ったプログラムなんですが、
重複したシンボルがある(?)とか怒られてて困っています 原因がわかる方いませんか?おねがいします www.uploda.org/uporg1085799.zip.html 一応ファイルをうpしました
- 477 名前:デフォルトの名無しさん mailto:sage [2007/10/28(日) 11:56:55 ]
- >>476
マルチうざい
- 478 名前:デフォルトの名無しさん mailto:sage [2007/10/28(日) 13:19:04 ]
- >>476
どのシンボルが重複してるかまで表示されてるだろ? それが重複してるんだよ。
- 479 名前:デフォルトの名無しさん mailto:sage [2007/10/28(日) 13:41:16 ]
- >>478
ありがとうございました。よく見たら書いてました。
- 480 名前:デフォルトの名無しさん mailto:sage [2007/10/28(日) 15:03:31 ]
- 2バイト文字の扱いがよくわからないです
例えば、配列の中身を順に表示させようと思っても文字化けします array[11] = {"しーげんご"}; Shift-Jisとかに変換してから使うんですか?
- 481 名前:デフォルトの名無しさん mailto:sage [2007/10/28(日) 15:17:35 ]
- >>480
> 配列の中身を順に・・・ 1バイトずつの表示はできない。
- 482 名前:デフォルトの名無しさん mailto:sage [2007/10/28(日) 15:30:49 ]
- >>481
そうなんですか・・・ じゃあ半角英字みたいに平仮名でも文字コードに数字を足して 次の文字へ!みたいな処理はできますか
- 483 名前:デフォルトの名無しさん mailto:sage [2007/10/28(日) 15:54:37 ]
- なんの文字コードを使っているのかわからないが、
いちど使用している文字コードの文字コード表を見ることを薦める。 ちなもに、S-JISでは、「あ」「い」「う」は,それぞれ,0x82a0, 0x82a2, 0x82a4
- 484 名前:デフォルトの名無しさん mailto:sage [2007/10/28(日) 16:02:41 ]
- >>483
調べてみたんですが、SーJISで「あ」を表示させるには %cを2回と0x82,0xa0をつかって表示させると書いてありました。 ほかの表示方法は見つけられなかったのですが、ありますか?
- 485 名前:452 mailto:sage [2007/10/28(日) 17:12:30 ]
- 無事できました!
が、次の問題で一点引っかかる事が('A` 終了条件eまたはEってどういう風に記述するんですか? while(gets(str) != ○○) の○○にeかEを入力した場合で終了という風にしたいのですが・・・。 'e' とか'E'は駄目みたいです。
- 486 名前:デフォルトの名無しさん mailto:sage [2007/10/28(日) 17:13:57 ]
- なんでgetsになってんの?
- 487 名前:デフォルトの名無しさん mailto:sage [2007/10/28(日) 17:17:56 ]
- あ、ごめんなさい。
習う順番でgetchar+putchar → gets+putsという風になってて 問題が、 gets() を用いて、テストの点数を文字列として入力しなさい。 上記処理中、eかEを入力した場合は下記処理をスキップさせ、内容を出力せよ っていう問題なんです。 考え方としては、今まで習ってきたように ○○が入力されるまでは処理を続けるというwhileループでの処理だと思うんですが・・・。
- 488 名前:デフォルトの名無しさん mailto:sage [2007/10/28(日) 17:21:55 ]
- 文字列の中に'e'か'E'があるかどうかをチェックする
- 489 名前:デフォルトの名無しさん mailto:sage [2007/10/28(日) 17:33:29 ]
- ありがとうございます><
int変数aというものを新たに用意し、 getsで入力した中に、a = 'e' か a='E' での判定を入れたら無事とおりました><
- 490 名前:デフォルトの名無しさん mailto:sage [2007/10/28(日) 19:18:39 ]
- どうしてもwhile内で済ませたかったら、
while(gets(str)[0] == 'E') とか? 試してないけど NULLが返ってきた時に危険だなw
- 491 名前:デフォルトの名無しさん mailto:sage [2007/10/28(日) 19:42:10 ]
- ttp://a-draw.com/contents/uploader2/src/up0121.txt
できたました! こんな長い(すごい短いんだろうけど・・・)の書いたの初めてです・・・。
- 492 名前:デフォルトの名無しさん [2007/10/28(日) 19:47:06 ]
- 3つの整数値を読み込んでそれらの値がすべて等しければ「3つの値は等しいです」と、
どれか2つの値が等しければ「2つの値が等しいです」と、そうでなければ「3つの値が異なります」と表示するプログラムをつくりなさい #include <stdio.h> int main(void) { int n1,n2,n3; printf("整数A"); scanf("%d", &n1); printf("整数B"); scanf("%d", &n2); printf("整数C"); scanf("%d", &n3); if(n1==n2==n3)printf("3つの値は等しいです"); else if(n1==(n2||n3)) printf("2つの値は等しいです"); else if(n2==(n1||n3)) printf("2つの値は等しいです"); else if(n3==(n2||n1)) printf("2つの値は等しいです"); else printf("3つの値は異なります"); return(0); } このように組んで整数Aに1整数Bに2整数Cに3を代入すると2つの値は等しいですと表示されてしまいます 問題点を教えてください><
- 493 名前:デフォルトの名無しさん mailto:sage [2007/10/28(日) 19:53:17 ]
- n1==n2==n3 は n1==(n2==n3) で、意味が違う。
n2||n3 n2||n1 n1||n3 は、それぞれ両方0のとき0、それ以外だと1になる。
- 494 名前:デフォルトの名無しさん [2007/10/28(日) 19:55:04 ]
- #include <stdio.h>
int main(void) { int n1,n2,n3,k=0; printf("整数A "); scanf("%d", &n1); printf("整数B "); scanf("%d", &n2); printf("整数C "); scanf("%d", &n3); if(n1==n2)k++; if(n1==n3)k++; if(n2==n3)k++; if(k==3)printf("3つの値は等しいです"); else if(k==1)printf("2つの値は等しいです"); else printf("3つの値は異なります"); }
- 495 名前:デフォルトの名無しさん mailto:sage [2007/10/28(日) 19:56:48 ]
- 問題点を聞かれてるのに、俺プログラムを自慢されても困る
- 496 名前:492 [2007/10/28(日) 20:05:56 ]
- >>493-494
ありがとうございました。||の使い方をかんちがいしていました。。。
- 497 名前:デフォルトの名無しさん mailto:sage [2007/10/28(日) 20:33:46 ]
- >>491
なんか無駄が多い気がするが、まあそれは眼をつむっておこう だがgetsの入力先配列が要素数2てのは……誤入力もあるだろうし、せめて256くらい確保した方が良い気がする というか、要素数2だとヌル文字入らないじゃん(というか100も入らないし) atoiってヌル文字入らないと変な動作になることあるはず
- 498 名前:デフォルトの名無しさん mailto:sage [2007/10/28(日) 21:06:24 ]
- >>497
むむ、 getsでの取得は 例えば入力が50なら、charだから配列[0]に50 で配列[1]に\0が入る=2個で足りるってことじゃないですか? もしgetsでの取得変数がintの場合なら点数最大100(つまり3桁)は最低でも[4]になるのはわかります。 まぁでも、教えてもらっている人にも、配列は無駄でもいいから多く取った方がいいと教わりましたので、多くとる事を、この先心がけていきます! ありがとうございました!
- 499 名前:デフォルトの名無しさん mailto:sage [2007/10/28(日) 21:21:49 ]
- ごめんなさいボクが馬鹿でした。
ためしにcharでの変数aに入力したものを、出力させるのかいてみて a[0]をやったら、最初の1文字しか出力されませんでした。 本当にありがとうございました。
- 500 名前:デフォルトの名無しさん mailto:sage [2007/10/28(日) 22:56:33 ]
- int *foo
int* foo の違いを教えてください>< 今までint *foo しか使ってなくて いきなりint* fooが出てきてわけわかりません><
- 501 名前:デフォルトの名無しさん mailto:sage [2007/10/28(日) 22:57:42 ]
- >>500
次は int * foo だ
- 502 名前:デフォルトの名無しさん mailto:sage [2007/10/28(日) 23:00:18 ]
- 宣言時のアヌスの位置くらい自由にさせてあげてください
- 503 名前:デフォルトの名無しさん mailto:sage [2007/10/28(日) 23:03:21 ]
- いまだにforの無限ループを見ると悲しくなる( ; ; )
- 504 名前:デフォルトの名無しさん mailto:sage [2007/10/28(日) 23:04:11 ]
- >>501
そんなのもあるのですか ソース解読してる途中にこんなの出てきてわけわからんのです すいませn助けてください。ほんと 何でグぐれ場いいのかもわからなくて すんません、マジで
- 505 名前:デフォルトの名無しさん mailto:sage [2007/10/28(日) 23:07:39 ]
- >>504
int *foo; int* foo; int * foo; は全部一緒
- 506 名前:デフォルトの名無しさん mailto:sage [2007/10/28(日) 23:09:54 ]
- ありがとうございます
なんでこんな風に書き方分けてるのか
- 507 名前:デフォルトの名無しさん mailto:sage [2007/10/28(日) 23:14:35 ]
- *は型名にも変数名にも使えないから問題ない
- 508 名前:デフォルトの名無しさん mailto:sage [2007/10/28(日) 23:35:53 ]
- 初歩的な質問なのですが
for(int i = size >> 1 ; ; i >>= 1) というループがあったのですが size >> 1 や i >>= 1 というのはどういう意味なのですか?
- 509 名前:デフォルトの名無しさん mailto:sage [2007/10/28(日) 23:37:41 ]
- int*foo;もいけるんじゃない?
- 510 名前:デフォルトの名無しさん mailto:sage [2007/10/28(日) 23:40:19 ]
- >>508
ビットシフト
- 511 名前:デフォルトの名無しさん mailto:sage [2007/10/28(日) 23:44:55 ]
- >>508のだとiをビットシフトするとどうなるんでしょう
あとforの2つ目のところが空白なのもわけがわかりません
- 512 名前:デフォルトの名無しさん mailto:sage [2007/10/28(日) 23:46:35 ]
- i >>= 1 すると i の各ビットが右へ 1 桁ずつずれる
forの2つめが空白の場合は条件なしの繰り返し=無限ループ
- 513 名前:デフォルトの名無しさん mailto:sage [2007/10/28(日) 23:53:43 ]
- >>511
iが10(2進数で1010)だとすると5(101)になる 5だとすると2(10)になる。その次はもう予想できるよな?
- 514 名前:デフォルトの名無しさん mailto:sage [2007/10/29(月) 00:07:56 ]
- >>512-513
ありがとうお兄ちゃんたち!
- 515 名前:デフォルトの名無しさん mailto:sage [2007/10/29(月) 01:18:22 ]
- >>506
俺は int* foo; のほうが好きかな 「int型へのポインタを返す」ってのをあらわしてる感じで
- 516 名前:デフォルトの名無しさん mailto:sage [2007/10/29(月) 01:35:28 ]
- 俺は
int *foo; のほうが好きかな int *foo, *bar; みたいに複数いっぺんに宣言するときわかりやすいし
- 517 名前:デフォルトの名無しさん mailto:sage [2007/10/29(月) 01:35:53 ]
- しかしそれだと、2個目以下に*付け忘れる可能性がある。
- 518 名前:デフォルトの名無しさん mailto:sage [2007/10/29(月) 01:37:09 ]
- 517は>>515ね
- 519 名前:デフォルトの名無しさん mailto:sage [2007/10/29(月) 02:21:33 ]
- 大きな配列の初期化って
どうしていくべきですか? 100X100くらいの配列の
- 520 名前:デフォルトの名無しさん mailto:sage [2007/10/29(月) 02:23:34 ]
- あんな風にしていくべきだと俺は思っている
だがそういう風にするとああいうことも起きるわけでいちがいに どちらがいいとは判断しかねるな
- 521 名前:デフォルトの名無しさん mailto:sage [2007/10/29(月) 06:11:01 ]
- ど素人におすすめの参考書を教えてください。
- 522 名前:380 [2007/10/29(月) 11:19:52 ]
- 先週質問させていただいた者ですが、mallocでどうしても組めません。
mallocでメモリに格納→格納した文字列を検索後抜き出す動作をもう一度ご教示いただけないでしょうか。
- 523 名前:デフォルトの名無しさん mailto:sage [2007/10/29(月) 12:46:28 ]
- >>522
先ずは試しにfgets()版を見せてくれ。
- 524 名前:380 [2007/10/29(月) 13:16:03 ]
- >>523
void Hairetsu(void) { FILE *read; char fnameread[90]; char charline[90]; char KensakuName[20]; strcpy(fnameread, "*****.txt"); strcpy(KensakuName, "C3 10237"); StartTime = clock(); printf("%d\n", StartTime); while(KensakuCount < 10) { read = fopen(fnameread, "r"); if (read == NULL) { printf("ファイルがオープンできません\n"); exit(1); } while(1) { fgets(charline, 90, read); if (strcmp(charline, "ENDDATA\n") == 0){ ***ファイルは必ず最後の行にENDDATAと記載されています break; } if (strncmp(charline, KensakuName, 16) == 0) { ***ここで検索に引っかかった行から新たな要素を取り出して再度同ファイル内で検索をかけます ***その際にまた先頭行から読み直してfgetsを用いて検索をしこれをこのif内で3回程度繰り返えします。 } } fclose(read); } }
- 525 名前:デフォルトの名無しさん mailto:sage [2007/10/29(月) 13:31:08 ]
- >>524=380
「えらい時間」とあるけど、どれくらい掛かるの? 試しに>524相当のロジックを書いて10万と1行のファイルで動かしてみたが、1秒も掛からないんだが。
- 526 名前:380 [2007/10/29(月) 13:37:22 ]
- >>525
これを1行目から順に繰り返すので総読み出し回数は10万行^5になります。 それで更にその中に計算式が組み込まれていますので・・・・
|

|