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


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

C言語なら俺に聞け(入門篇) Part 15



1 名前:デフォルトの名無しさん mailto:sage [2007/06/25(月) 06:14:52 ]
C言語の入門者向け解説スレです。
・C++言語はスレ違いです。
・分からない事をなるべく詳しく書いて下さい。
・ソースコードを晒すと答えやすくなるかもしれません。
・質問者は最初にその質問をした時のレス番号を名前欄に書いて下さい。

前スレ
C言語なら俺に聞け(入門篇) Part 14
pc11.2ch.net/test/read.cgi/tech/1181735298/


教えて欲しいのではなく丸投げしたいならこちらへ
C/C++の宿題を片付けます 91代目
pc11.2ch.net/test/read.cgi/tech/1182607405/

445 名前:デフォルトの名無しさん [2007/07/01(日) 02:08:54 ]
ちなみにこのプログラムは順番的には
for (i=1; i<=min; i++)→for (j=1; j<=max; j++)→putchar('*')
→for (j=1; j<=max; j++)→putchar('*')→for (j=1; j<=max; j++)→putchar('*')
…→putchar('\n')→for (i=1; i<=min; i++)→…
みたいな感じで実行されてるのですか?

446 名前:デフォルトの名無しさん mailto:sage [2007/07/01(日) 02:20:10 ]
>>445
それであってるよ。実行して確認してみればいい。

447 名前:デフォルトの名無しさん [2007/07/01(日) 13:00:50 ]
>>446
ありがとうございました

448 名前:デフォルトの名無しさん mailto:sage [2007/07/01(日) 14:37:35 ]
四大欲求とは三大欲求に知的探究心を加えたものか

449 名前:デフォルトの名無しさん mailto:sage [2007/07/01(日) 14:45:08 ]
ノッてくれ〜Ha〜Ha〜♪

450 名前:449 mailto:sage [2007/07/01(日) 14:45:40 ]
素で誤爆しました
すみません

451 名前:デフォルトの名無しさん mailto:sage [2007/07/01(日) 14:51:42 ]
Gnuplotを扱うC言語用のライブラリとか無いでしょうか?

popen()関数を使って自分で作る事は出来るのですが
もし優れたライブラリがあるならそっちを使いたいです
C++では駄目でCでおながいします

452 名前:デフォルトの名無しさん mailto:sage [2007/07/01(日) 19:06:59 ]
例えば

foo(cahr*p)
{
char *my_ptr = MyGetInnerParameter("内部パラメータを文字列で返す関数");
strcpy(p,my_ptr);
}

var()
{
char *ptr;
foo(ptr);
}

こうすると、落ちるんだけど、どうして?


453 名前:デフォルトの名無しさん mailto:sage [2007/07/01(日) 19:09:22 ]
foo(char** p)
にしないと



454 名前:デフォルトの名無しさん mailto:sage [2007/07/01(日) 19:15:07 ]
いやそれ以前のはなしか

455 名前:デフォルトの名無しさん mailto:sage [2007/07/01(日) 19:21:54 ]
どこ指してるかわからないpにstrcpyしちゃだめだろ

456 名前:デフォルトの名無しさん mailto:sage [2007/07/01(日) 19:23:24 ]
char* a[8]をlongに直すにはどうしたらいいでしょうか?
>>で1つずつやっていくしかないですかね?

457 名前:デフォルトの名無しさん mailto:sage [2007/07/01(日) 19:25:03 ]
じゃあ

foo(cahr*p)
{
char *my_ptr = MyGetInnerParameter("内部パラメータを文字列で返す関数");
strcpy(p,my_ptr);
}

var()
{
char ptr[8];
foo(ptr);
}

こうしてみたんだけど、やっぱりダメだった。
どうして?

458 名前:デフォルトの名無しさん mailto:sage [2007/07/01(日) 19:25:29 ]
cahr

459 名前:デフォルトの名無しさん mailto:sage [2007/07/01(日) 19:28:38 ]
>>458
そういうケアレスミスは置いといて^^

460 名前:デフォルトの名無しさん mailto:sage [2007/07/01(日) 19:30:00 ]
コードを見る限り問題はなさそうな気がする。
MyGet(ryの戻り値がおかしいんじゃないのか。
戻り値になるバッファをスタックに取ってるとか。

461 名前:デフォルトの名無しさん mailto:sage [2007/07/01(日) 19:31:06 ]
コピーされる文字数が1024バイトだったとかってオチだろ。

462 名前:デフォルトの名無しさん mailto:sage [2007/07/01(日) 19:37:26 ]
デバッグとしてmy_ptr表示させてみたりとか、自分でしないの?

463 名前:デフォルトの名無しさん mailto:sage [2007/07/01(日) 19:41:43 ]
そもそも、呼ぶ側で領域確保が必要な関数の場合、
最初に用意する容量を問い合わせてから領域を確保して初めて呼び出せるんだろうに。
領域サイズの確認関数が無いなら、十分なサイズを用意してあげないとダメ。
そして、サイズに満たない領域にコピーしちゃダメ。





464 名前:デフォルトの名無しさん mailto:sage [2007/07/01(日) 21:38:52 ]
bregexp.dllのラッパーライブラリ内ですか?

465 名前:デフォルトの名無しさん [2007/07/01(日) 22:45:56 ]
サブ関数内でmalloc()でメモリ確保した領域ってメイン関数に帰るときに解放されないの?

466 名前:デフォルトの名無しさん mailto:sage [2007/07/01(日) 22:46:46 ]
>>465
free()かrealloc()で解放しない限り、されません。

467 名前:デフォルトの名無しさん mailto:sage [2007/07/01(日) 22:50:23 ]
>>465
解放されると困らないかい?

malloc() 〜 free() の作法としては、使う人が確保と解放の責任を持つって暗黙のルールなんだけど、サービス関数の中には、確保だけして解放は使う側でやってね。なんてローカルルールもあるしな。

解放されると思い込むくらいなら、仕様確認をした方がいいよ。

468 名前:デフォルトの名無しさん mailto:sage [2007/07/01(日) 22:56:05 ]
>>465
自動変数とごっちゃになってない?

469 名前:デフォルトの名無しさん mailto:sage [2007/07/01(日) 23:14:22 ]
alloca なら開放されるな。
環境依存だが。

470 名前:465 mailto:sage [2007/07/01(日) 23:22:00 ]
あざーす

471 名前:デフォルトの名無しさん mailto:sage [2007/07/01(日) 23:25:21 ]
>>464
たいした手間じゃないから自分で書いたらいいよ

472 名前:デフォルトの名無しさん mailto:sage [2007/07/01(日) 23:37:38 ]
木構造の二分探索木において
ルートの下にノードがあるとします。
その2つのノードからそれぞれ2本ずつ枝がでていて、
1本は別々のノードにつながっている。もう一本は同じノードにつながっている。
これをあらわすには数字の割り当て方はどうすべきですかね?

   0
 1   2
3 4 5 6

とあれば、2のleftが4をさすようにする。
5は捨てるって感じですかね?



473 名前:デフォルトの名無しさん mailto:sage [2007/07/01(日) 23:43:04 ]
よく意味が分からない。



474 名前:デフォルトの名無しさん mailto:sage [2007/07/01(日) 23:47:29 ]
データ数400の二次元配列でかつ小数点

それと木構造と組み合わせて計算とか地獄だな。。。

475 名前:デフォルトの名無しさん mailto:sage [2007/07/01(日) 23:58:36 ]
    0
   /\
  1   2
 /\ /\
3   4   5

みたいな感じにしたいのか?

476 名前:デフォルトの名無しさん mailto:sage [2007/07/02(月) 00:09:47 ]
>>475
はい、そうです。
各枝に確率をつけて、0のところを1.0と設定して
0から1、2への枝の確率をかけて1と2のノードにおいての確率をだす。
その次に1と2の下の3、4、5への枝に確率をつけて
3、4、5のノードにおいての確率を出す感じにしたいんですけど。
1つのノードに3つの確率がはいるようにしないといけないなーとは思ってます。

この計算を木でやるか配列でやるか迷ってます。

477 名前:デフォルトの名無しさん mailto:sage [2007/07/02(月) 00:58:38 ]
      0
     /\
    1   2
   /\ /\
  3   4   5
 /\ /\ /\
6   7   8   9

となっていくんだったら、別に配列でもいい気がするな。
配列というか、三角行列?

478 名前:デフォルトの名無しさん [2007/07/02(月) 01:14:04 ]
#include <stdio.h>
int main(void)
{ /*左上*/
int a,b,c;
printf("何段ですか:");
scanf("%d",&a);
for (b = 1; b <= a; b++) {
for (c = a; c >= 1; c--)
putchar('*');
putchar('\n');
}
return 0;
}


左上が直角になる三角形を作りたいのですが・・・何か四角形になります

479 名前:デフォルトの名無しさん mailto:sage [2007/07/02(月) 01:18:38 ]
>>478
for (c = a; c >= 1; c--)

for (c = a; c >= b; c--)

480 名前:デフォルトの名無しさん [2007/07/02(月) 01:25:48 ]
>>479
できました!ありがとうございました!

481 名前:デフォルトの名無しさん mailto:sage [2007/07/02(月) 03:05:47 ]
>>456
8つのchar*が指し示している内容が分からないと何とも。

482 名前:デフォルトの名無しさん [2007/07/02(月) 11:56:07 ]
数人でCでプログラム開発しているのだけれど、
ソースコード中の各関数の前に、
// 関数名:
// 作者:
// 機能:
// 
みたいな説明を付けたいのだけれど、どこかにカッチョいいサンプルないですか?

483 名前:デフォルトの名無しさん mailto:sage [2007/07/02(月) 12:07:11 ]
>>482
つ[doxygen]



484 名前:デフォルトの名無しさん [2007/07/02(月) 12:53:35 ]
>483
ありがとうございます。でも、
そういう高度なのは使いこなせそいうにないので、
具体的なサンプルを探しています。よろしく。

485 名前:デフォルトの名無しさん [2007/07/02(月) 12:58:04 ]
#include <stdio.h>
int main(void)
{
int a,b,c;
printf("ピラミッドを作りましょう");
printf("何段ですか:"); scanf("%d",&a);
for (b = 1; b <= a; b++) {
for (c = a; c > 1; c--)
putchar(' ');
for (c = 1; c < 2b; c++)
putchar('*');
putchar('\n');
}
return 0;
}

何が変なんですかね

486 名前:デフォルトの名無しさん mailto:sage [2007/07/02(月) 12:59:39 ]
使いこなさなくてもいいから、Doxygenスタイルで書いて置いたらいいんでね?
もし>484がロートル、コボラの気に入りそうな「枠に填まった」コメントが好きならサンプル出してもいいけど。
#コメントを書くのに手間が掛かるのなんて論外だと思うんだがね。

487 名前:デフォルトの名無しさん mailto:sage [2007/07/02(月) 13:00:23 ]
>>485
エラーメッセージくらい読め

488 名前:2b mailto:sage [2007/07/02(月) 13:00:50 ]
>>485
あんたの頭。コンパイルエラーが出たのなら、その内容くらい書くのが当然だ。

489 名前:デフォルトの名無しさん mailto:sage [2007/07/02(月) 13:01:36 ]
2b

490 名前:デフォルトの名無しさん mailto:sage [2007/07/02(月) 13:03:19 ]
>>488
これは間違いなくツンデレ

491 名前:デフォルトの名無しさん mailto:sage [2007/07/02(月) 13:04:29 ]
ついでにピラミッドにするためには c > 1 じゃなくて c > b だと思われる

492 名前:デフォルトの名無しさん [2007/07/02(月) 13:06:36 ]
エラー E2378 4-18.cpp 10: For文に ; がない(関数 main() )
エラー E2379 4-18.cpp 10: ステートメントにセミコロン(;)がない(関数 main() )

493 名前:デフォルトの名無しさん [2007/07/02(月) 13:11:00 ]
>>489
できました。
ありがとうございました



494 名前:デフォルトの名無しさん mailto:sage [2007/07/02(月) 13:22:53 ]
488をスルーするとは酷い奴だ

495 名前:488 mailto:sage [2007/07/02(月) 13:34:56 ]
べ、べつに気づいてもらいたくて名前に仕込んだわけじゃないからね。
「意味のないレスするな」って言われないための予防策なんだから。

496 名前:デフォルトの名無しさん mailto:sage [2007/07/02(月) 17:03:31 ]
死ねよ

497 名前:デフォルトの名無しさん mailto:sage [2007/07/02(月) 17:13:50 ]
山岡来た

498 名前:デフォルトの名無しさん [2007/07/02(月) 19:37:41 ]
2から5までとか指定するのってどう書けばよかったっけ?

499 名前:デフォルトの名無しさん mailto:sage [2007/07/02(月) 19:39:44 ]
日本語を正しく書いてください

500 名前:デフォルトの名無しさん mailto:sage [2007/07/02(月) 19:40:37 ]
さすがにこれはエスパーじゃないと解読不能だな

501 名前:デフォルトの名無しさん mailto:sage [2007/07/02(月) 19:42:14 ]
for(i=2; i<=5; i++) printf("%d")

switch(n)
{
case 2:
case 3:
case 4:
case 5:
  printf("2..5");
}

if(2 <= n && n <= 5) printf("2..5");

502 名前:デフォルトの名無しさん [2007/07/02(月) 19:42:33 ]
変数iにおいて iが2から5という条件 文書くときに
if(???)
の中身はどう書けばよいですか?

503 名前:デフォルトの名無しさん mailto:sage [2007/07/02(月) 19:43:47 ]
if (i >= 2 && i <= 5) ...



504 名前:デフォルトの名無しさん mailto:sage [2007/07/02(月) 19:56:35 ]
>>482
こういうのってめっちゃ素人くさいな。

505 名前:デフォルトの名無しさん mailto:sage [2007/07/02(月) 19:58:12 ]
しかるべきところで職につけばお前も目にすることがあるかもしれないよ

506 名前:デフォルトの名無しさん mailto:sage [2007/07/02(月) 20:00:14 ]
関数ヘッダクラスヘッダはあったほうがソース見やすい。
どうせ引数説明とか入れるんだし。
もちろブロックコメントでな。ラインコメントをいくつも並べるのはカッコワル。

507 名前:デフォルトの名無しさん mailto:sage [2007/07/02(月) 20:01:54 ]
あと、関数ヘッダコメントに、その関数名をいちいち入れてるのってカコワルイ
おまえ、それ何の意味があるんだと。

508 名前:デフォルトの名無しさん [2007/07/02(月) 20:23:01 ]
質問があるので宜しくお願い致します。

どうして、128バイトは1,024ビットになるのかわかりません
どういう計算をすれば、そうなるのでしょうか?

509 名前:デフォルトの名無しさん mailto:sage [2007/07/02(月) 20:31:06 ]
>>508
ほとんどの環境で1バイト=8ビット

510 名前:デフォルトの名無しさん mailto:sage [2007/07/02(月) 20:36:25 ]
>>482
そういうのがある時点でかっこ悪いよ…

511 名前:デフォルトの名無しさん [2007/07/02(月) 20:46:27 ]
>>509
ん〜考えても、どうして128バイトは1,024ビットになるのかわかりません
何の何階乗をすれbいいのでしょうか?

512 名前:デフォルトの名無しさん mailto:sage [2007/07/02(月) 20:47:49 ]
128 * 8 = 1024

513 名前:デフォルトの名無しさん mailto:sage [2007/07/02(月) 20:47:55 ]
8 * 128 = 1024



514 名前:デフォルトの名無しさん mailto:sage [2007/07/02(月) 20:56:34 ]
>>511
みなさんからいっぱいのレスだけども
も〜ちょっと分かりやすく書くと

128バイト×8ビット/バイト=1024ビット

515 名前:デフォルトの名無しさん mailto:sage [2007/07/02(月) 20:59:17 ]
1バイト=8ビット
ってのを知らないだけなんじゃね

516 名前:デフォルトの名無しさん mailto:sage [2007/07/02(月) 21:00:23 ]
かけ算ができないだけだろ

517 名前:デフォルトの名無しさん mailto:sage [2007/07/02(月) 21:07:17 ]
容量換算の1(M)=2^10(K)=1024(K)とかとごっちゃになっているんじゃない?

518 名前:デフォルトの名無しさん mailto:sage [2007/07/02(月) 21:08:26 ]
いちいちゴミ撒かんと気が済まんのかこのスレは・・・

519 名前:デフォルトの名無しさん mailto:sage [2007/07/02(月) 21:09:32 ]
どっちがビットでどっちがバイトだっけ?
そんな時期が私にもありました(AA略

520 名前:デフォルトの名無しさん mailto:sage [2007/07/02(月) 21:16:43 ]
そもそも1バイト=8ビットと決まってるわけじゃねーし。
厳密に8ビットというなら1オクテットと表現すべき。

521 名前:デフォルトの名無しさん mailto:sage [2007/07/02(月) 21:20:50 ]
じゃ1バイト=9bitなんていういかれた環境があるのかよ!
と思っていた時期が私にもありました

本当にあったんだね

522 名前:511 [2007/07/02(月) 21:21:02 ]
サンクスです

ですが、どうして128 * 8 して出すのかが
納得できません。。。

523 名前:511 [2007/07/02(月) 21:21:52 ]
なんとなくわかりました
サンクスでした



524 名前:デフォルトの名無しさん mailto:sage [2007/07/02(月) 22:30:20 ]
なんとなくかよw
じゃあ君が大好きなタコを例にして分かりやすく解説しよう。

「タコには足が8本あります。ここにタコが128匹います。全部で足は何本でしょう?」

タコ→バイト、足→ビット、に置き換えるとあら不思議。

525 名前:デフォルトの名無しさん mailto:sage [2007/07/02(月) 22:34:05 ]
128匹のタコ全部が足8本だとは限らないだろ

526 名前:390 mailto:sage [2007/07/02(月) 22:45:49 ]
#include <stdio.h>

main()
{
int a;
float b;

for(a=0; a<=100; a++)
printf("セ氏温度:%d カ氏温度:%.2f\n",a ,fahrenheit(a,b));
}

int fahrenheit(int x,int y)
{
y = (float)(9/5)*x+32;
return y;
}

セ氏温度0〜100℃に対してカ氏温度を出したいのですが
出力の際、カ氏温度が0.00になってしまします。
間違っているところの指摘をお願いします。

527 名前:デフォルトの名無しさん mailto:sage [2007/07/02(月) 22:46:43 ]
例の一匹の足の1本はすでに俺は食べた

528 名前:デフォルトの名無しさん mailto:sage [2007/07/02(月) 22:50:20 ]
>>526
fahrenheit()の第2引数はint型なのにfloat型のbを渡している
fahrenheit()の戻り値の型はint型なのに%.2fを指定している

529 名前:デフォルトの名無しさん mailto:sage [2007/07/02(月) 22:53:38 ]
もうひとつ。どっちにしろint型で返すことになってるが、
y = (float)(9/5)*x+32;
は意図したのと違くなっていると思う

530 名前:526 mailto:sage [2007/07/02(月) 23:04:50 ]
>>fahrenheit()の戻り値の型はint型なのに

この部分はどう直せばいいのですか?

531 名前:デフォルトの名無しさん mailto:sage [2007/07/02(月) 23:08:52 ]
戻り値をfloatに変えるとか、%dに変えるとか

532 名前:デフォルトの名無しさん mailto:sage [2007/07/02(月) 23:19:45 ]
struct abc{
char a;
}

main()
{
char b, c;

c = ((struct abc)b).a;
c = ((struct abc *)b)->a;
}

c = ((struct abc)b).a;がダメで
c = ((struct abc *)b)->a;が良い理屈を教えて下さい。


533 名前:デフォルトの名無しさん mailto:sage [2007/07/02(月) 23:22:10 ]
>>532
それって良いのか?
コンパイルは通るだろうが、実行したら間違いなくSegmentFaultだぞ



534 名前:デフォルトの名無しさん mailto:sage [2007/07/02(月) 23:22:17 ]
((struct abc *)b)->a;
は偶然うまく動くかもしれないが、よくない。

535 名前:526 mailto:sage [2007/07/02(月) 23:23:06 ]
エラーで「初期化されていないローカル変数"b"が使用されます」
と出るのですがこれが原因ですか?

536 名前:デフォルトの名無しさん mailto:sage [2007/07/02(月) 23:24:31 ]
>>533
aのoffsetが0ならうまく動くだろ。

537 名前:デフォルトの名無しさん mailto:sage [2007/07/02(月) 23:25:19 ]
>>532
(struct abc *)b はbで示される何らかの値をstruct abc のポインタに変換している

で b の値はポインタか?
どっちもよろしくない

538 名前:536 mailto:sage [2007/07/02(月) 23:29:11 ]
てっきり、&bかと思ってたわ・・・

539 名前:デフォルトの名無しさん mailto:sage [2007/07/02(月) 23:34:58 ]
>>535
a はfor文で値が入るが b には初期かも代入もされていない
b に値を入れろ

540 名前:デフォルトの名無しさん mailto:sage [2007/07/02(月) 23:38:15 ]
>>536

c = ((struct abc *)&b)->a;

なら、aのoffsetが0ならうまく動くかも知れん。
が、>>532はそうはなっていないので間違いなく保護違反

541 名前:532 mailto:sage [2007/07/02(月) 23:58:38 ]
ほんと、すいません。
c = ((struct abc *)&b)->a;
でした。

542 名前:535 mailto:sage [2007/07/02(月) 23:58:55 ]
>>539
bに値を入れたら結果が変わりませんか?

543 名前:532 mailto:sage [2007/07/03(火) 00:04:41 ]
素人目にはc = ((struct abc)b).a;でも
問題ないように思えるのですが、
なにがダメなのでしょうか。



544 名前:デフォルトの名無しさん mailto:sage [2007/07/03(火) 00:09:44 ]
そう思えるから素人なんです。

545 名前:デフォルトの名無しさん mailto:sage [2007/07/03(火) 00:52:50 ]
すげえ正論だが質問の答えにはなってないな






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

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

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