[表示 : 全て 最新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/

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 ]
すげえ正論だが質問の答えにはなってないな

546 名前:デフォルトの名無しさん mailto:sage [2007/07/03(火) 00:55:00 ]
>>543
何でって言われても、言語仕様でそのようなキャストは認められていないから、としか。



547 名前:511 [2007/07/03(火) 00:56:08 ]
>>524
8~128でしょうか?

548 名前:デフォルトの名無しさん mailto:sage [2007/07/03(火) 00:57:13 ]
タコ釣りか?

549 名前:デフォルトの名無しさん mailto:sage [2007/07/03(火) 00:57:38 ]
~ ってなんだよ

550 名前:デフォルトの名無しさん mailto:sage [2007/07/03(火) 00:59:48 ]
ティルデ

551 名前:デフォルトの名無しさん mailto:sage [2007/07/03(火) 01:03:41 ]
ニョロ

552 名前:デフォルトの名無しさん mailto:sage [2007/07/03(火) 01:05:08 ]
0 1ビット
01 2ビット
010 3ビット
0101 4ビット
01010 5ビット
010101 6ビット
0101010 7ビット
01010101 1バイト

553 名前:デフォルトの名無しさん [2007/07/03(火) 01:08:27 ]
>>547
例題がタコだからといって、演算子までタコにするのはやめような。

554 名前:デフォルトの名無しさん mailto:sage [2007/07/03(火) 01:10:35 ]
いつか 1byte != 1octet の時代は来るのだろうかー・・・

555 名前:デフォルトの名無しさん mailto:sage [2007/07/03(火) 01:11:49 ]
ヽ (゚o゚)∫
 ノ川ル

556 名前:デフォルトの名無しさん mailto:sage [2007/07/03(火) 01:12:40 ]
>>554
1byte == 1octet の時代なんて一度も来た事がないんだが。



557 名前:デフォルトの名無しさん [2007/07/03(火) 01:21:37 ]
まだC言語とかやってたんだ。
懐かしいなー

558 名前:デフォルトの名無しさん mailto:sage [2007/07/03(火) 02:01:19 ]
今でも、36ビットワードマシンとかでは1バイト=9ビットだね

UTF−9とかもあるし

559 名前:デフォルトの名無しさん mailto:sage [2007/07/03(火) 02:04:28 ]
UTF-9 はエイプリルフールのネタじゃなかったっけ?

560 名前:デフォルトの名無しさん mailto:sage [2007/07/03(火) 07:16:54 ]
scanfやfgetsで文字を入れて
文字列を比較する場合、どうすればいいんでしょうか?

char* str;
fgets(str,100,stdin);
if(str=="start"){
なんとかかんとか;
}

これ、うまく動かないんですが

561 名前:デフォルトの名無しさん mailto:sage [2007/07/03(火) 07:18:20 ]
strcmp

562 名前:デフォルトの名無しさん mailto:sage [2007/07/03(火) 07:33:18 ]
>>560
1. str の指す領域を確保する
2. 文字列の比較には strcmp を使う
3. 比較する文字列を "start\n" にする

563 名前:526 mailto:sage [2007/07/03(火) 08:27:43 ]
#include <stdio.h>

main()
{
int a;
int b=0;

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

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

誰かこのプログラムをカ氏温度が小数点まで
出力されるように改ざんしてください;

564 名前:デフォルトの名無しさん mailto:sage [2007/07/03(火) 08:29:25 ]
>>563
double型の変数でも使えばええやん・・・

565 名前:デフォルトの名無しさん mailto:sage [2007/07/03(火) 08:48:21 ]
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

struct list{
char *name;
struct list* next;
};

int main(void){
struct list *head,*ume;
char *str;
head=NULL;
str=(char*)malloc(100*sizeof(char));
printf("名前を入力(endで終了)>");
fgets(str,100,stdin);
while(strcmp(str,"end\n")!=0){
ume=(struct list*)malloc(sizeof(struct list));
ume->name=str;
ume->next=head;
head=ume;
printf("名前を入力(endで終了)>");
fgets(str,100,stdin);
}
printf("%s%p\n",head->name,head);
return 0;
}
リスト構造体のテストやってみたんですが
これ実行して、taro、hanako、endと入力したら
endが表示されるんだけどどこがおかしいんですかね?
endと入力した時点でwhileから抜け出し、head->nameがendになると思えないんですが・・・

566 名前:デフォルトの名無しさん mailto:sage [2007/07/03(火) 08:54:24 ]
>>565
> head->nameがend
ume->next=head;
head=ume;
↑そりゃなるだろw



567 名前:デフォルトの名無しさん mailto:sage [2007/07/03(火) 09:05:44 ]
>>565
おかしいっていうのは、期待した動作と違うって事だろうけど
何をしたいのか分からんのに、答えられるわけ無いだろ

568 名前:デフォルトの名無しさん mailto:sage [2007/07/03(火) 09:16:49 ]
>>565
エスパー回答
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct list{
char *name;
struct list *next;
};
int main(void){
struct list *head, *ume;
char *str;
head = NULL;
str = (char *) malloc(100 * sizeof(char));
for(;;){
printf("名前を入力(endで終了)>");
fgets(str, 100, stdin);
if(strcmp(str, "end\n") == 0) break;
ume = (struct list *) malloc(sizeof(struct list));
ume->name = strdup(str);
ume->next = head;
head = ume;
}
ume=head;
while(ume!=NULL){
printf("%s", ume->name);
ume=ume->next;
}
return 0;
}

569 名前:デフォルトの名無しさん mailto:sage [2007/07/03(火) 09:21:00 ]
>565
ume->nameは常にstrを指していて、最後にendになってんだから当たり前だろ。

570 名前:デフォルトの名無しさん mailto:sage [2007/07/03(火) 09:45:41 ]
>>565
まあ大体察しはつくが・・・

「おかしい」って言う以前に、どういう動作を期待しているのかちゃんと書こうな

571 名前:デフォルトの名無しさん mailto:sage [2007/07/03(火) 09:54:45 ]
どのくらいの変数が必要なのかよくわからないときは
とりあえず多めに変数宣言用意しておいてもいい?
int i,j,k,l;
double a,b,c,d,e;
char f[1000],g[1000],e[1000];

とか・・・
変数○○は使われていませんって警告がでるけど
多くしたら実行速度下がるとかエラーでるとかこまったことがおきるとかありますか?

572 名前:デフォルトの名無しさん mailto:sage [2007/07/03(火) 09:54:56 ]
struct list{
char *name; < いっ、いいんかい?
struct list *next;
};

573 名前:デフォルトの名無しさん [2007/07/03(火) 09:59:25 ]
571
困ったことが起こるよ
new だといい

574 名前:デフォルトの名無しさん [2007/07/03(火) 10:02:14 ]
571
使ったことないけど
std::vector, std::string
がいいみたいだよ

575 名前:デフォルトの名無しさん mailto:sage [2007/07/03(火) 10:08:31 ]
C++とSTLの世界へご招待〜

576 名前:デフォルトの名無しさん mailto:sage [2007/07/03(火) 10:14:18 ]
C言語の入門者向け解説スレです。
・C++言語はスレ違いです。



577 名前:デフォルトの名無しさん [2007/07/03(火) 10:16:25 ]
576
C言語専用の環境使っているやつがいるか?

578 名前:デフォルトの名無しさん mailto:sage [2007/07/03(火) 10:21:31 ]
そりゃいるでしょ

579 名前:デフォルトの名無しさん mailto:sage [2007/07/03(火) 10:25:00 ]
>>571
一応ありはありだが
・万一配列のサイズを超えたときにそれをはじくようなチェックを入れておく。
・スタックにあまり大きな配列を取らない(char *f, *g, *eにして領域をmallocする)。
あたりは注意しておいたほうがいい。
速度はメモリ浪費でスワップしない限りさほど落ちない。

580 名前:デフォルトの名無しさん [2007/07/03(火) 10:30:04 ]
今日はじめてSTLググってみたけど、これは使うべきだな
初心者こそ使うべきだな
コーディングが楽になるな

581 名前:デフォルトの名無しさん mailto:sage [2007/07/03(火) 11:45:36 ]
charの配列の[0]から[3]の4バイトにデータがあります。
これを一つのintの変数に入れたいのですが、どうやればいいですか?

582 名前:デフォルトの名無しさん mailto:sage [2007/07/03(火) 11:48:29 ]
>>581
過去ログを読む気がないのなら、やりたいことを具体的に書け。
どんなデータをどう入れたいのか判らんことには答えようがない。

583 名前:デフォルトの名無しさん mailto:sage [2007/07/03(火) 11:48:39 ]
*(int*)配列名

584 名前:デフォルトの名無しさん mailto:sage [2007/07/03(火) 11:49:50 ]
>>583
バスエラーの可能性ががが

585 名前:デフォルトの名無しさん [2007/07/03(火) 11:55:18 ]
c[0]+(c[1]<<8)+(c[2]<<16)+(c[3]<<24)

586 名前:デフォルトの名無しさん mailto:sage [2007/07/03(火) 11:56:39 ]
union使うとか



587 名前:デフォルトの名無しさん mailto:sage [2007/07/03(火) 11:57:53 ]
>584
配列の0から3でもバスエラーって発生するもんなの?

588 名前:デフォルトの名無しさん mailto:sage [2007/07/03(火) 12:00:28 ]
>>587
char配列がint安全な場所に作られる保証はない。
その点ではunionの方がまし。
しかし、unionには言語仕様的に実装依存の罠が。
そういう意味では>585でいいのだがエンディアンの問題が残る。

まぁ、最近のコンパイラならどれで書いても同じようなコードを吐くしね。






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

前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