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


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

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



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

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

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

641 名前:デフォルトの名無しさん mailto:sage [2007/09/10(月) 14:45:29 ]
>>639
doubleの0x00000000は0.0と保障されているわけではない。
ということでしょ。

642 名前:デフォルトの名無しさん mailto:sage [2007/09/10(月) 14:46:49 ]
えーと↑↑↑

エディッターのあたりがよくわからない

643 名前:デフォルトの名無しさん mailto:sage [2007/09/10(月) 14:50:06 ]
初期化でBYTEレベルでALL 0 にしたい場合は、
= {0} での初期化と、 memset での初期化の違いはあるの?

@ AAA aaa1 = {0};
A AAA aaa2; memset(&aaa2, 0, sizeof(AAA));

は同じことをしているのかということです。

644 名前:デフォルトの名無しさん mailto:sage [2007/09/10(月) 15:17:06 ]
構造体は知らないけど、配列の場合はコンパイルすると同じコードになるって前にみかけた気がする。

645 名前:デフォルトの名無しさん mailto:sage [2007/09/10(月) 15:28:18 ]
>>643
コンパイラによっては、{0}の方が、より最適化される可能性が高い。


646 名前:デフォルトの名無しさん mailto:sage [2007/09/10(月) 15:29:45 ]
>643
@ graceful
A rude

647 名前:デフォルトの名無しさん [2007/09/10(月) 15:58:29 ]
指定の行の削除方法が分かりません

例えば下記のようなファイルがあり

あいう
あああ
いいい
ううう

これを「いいい」だけ削除して下記のようにしたいのですが、1行だけ削除するようなやり方がわかりません

あいう
あああ
ううう

やりかたをご教授いただけないでしょうか


648 名前:デフォルトの名無しさん mailto:sage [2007/09/10(月) 15:59:05 ]
サンプルとかみても memset のほうがおおい。
AAA aaa1 = {0}; とかで構造体を初期化しているのってほとんどみないような。

649 名前:デフォルトの名無しさん mailto:sage [2007/09/10(月) 16:01:45 ]
>>648
なんで、構造体を初期化する必要があるの?
構造体メンバーを初期化する必要はあると思うが、構造体全体の初期化はあまり意味がないだろう。



650 名前:デフォルトの名無しさん mailto:sage [2007/09/10(月) 16:03:13 ]
そもそも、初期値が0とは限らない。

651 名前:デフォルトの名無しさん mailto:sage [2007/09/10(月) 16:04:28 ]
windows api つかうときってmemsetで初期化することあるでしょ。
CRITICALSECTIONとか、RECTとか。いちいちメンバごとに初期値いれるソースとかみたことないよ。
いったん初期化してから個別に値いれることはあるけど。

652 名前:デフォルトの名無しさん mailto:sage [2007/09/10(月) 16:11:33 ]
@ AAA aaa1 = {0};
A AAA aaa1; memset(&aaa1, 0, sizeof(AAA));

@=A FA?

653 名前:デフォルトの名無しさん mailto:sage [2007/09/10(月) 16:18:14 ]
={0} は浮動小数点やポインタも正しく 0.0 や NULL に初期化される。
memset で全ビットを 0 にする方法では、処理系によっては浮動小数点やポインタが 0.0 や NULL にならない場合がある。
@≠A

654 名前:デフォルトの名無しさん mailto:sage [2007/09/10(月) 16:45:34 ]
>>653
ありがとう。すっきりしました。

655 名前:デフォルトの名無しさん mailto:sage [2007/09/10(月) 17:37:39 ]
>>647
改行コードで区切って、消す行の後を違う領域に分けた後、消す行のところに繋げる

656 名前:デフォルトの名無しさん mailto:sage [2007/09/10(月) 20:07:43 ]
memsetで初期化のクセを覚えてしまうと、
C++のクラスのオブジェクトに対してもそれをやりそう。

657 名前:デフォルトの名無しさん mailto:sage [2007/09/10(月) 20:45:13 ]
コンストラクタがまさかのmemset呼び?

658 名前:デフォルトの名無しさん mailto:sage [2007/09/10(月) 20:49:28 ]
>>657
うちの連中ならやりそうだw
ところで、>>637のは
AAAA aaa1 = {}; //{0}の0省略
はできないの?C++の本に乗ってたんだけど、Cでも試したら出来てそうなんだけど。

659 名前:デフォルトの名無しさん mailto:sage [2007/09/10(月) 21:05:36 ]
>>658
エラー E2264 式が必要といわれた

@BCC5.5




660 名前:デフォルトの名無しさん mailto:sage [2007/09/10(月) 21:06:25 ]
>>658
C++ならできた。CL.EXE

661 名前:デフォルトの名無しさん mailto:sage [2007/09/10(月) 21:09:58 ]
>>658
ANSI C的には文法違反。
{}の中には少なくとも一つの式がいる。

662 名前:658 mailto:sage [2007/09/10(月) 22:42:45 ]
>>659-661 なるほど。情報サンクス。
gccではc89,c99モードにしてやっても出来るみたいなんだけど、
c99はまだ完全なサポートではないし、ことさら制限する様なことはしないのかも。
jiscのサイトから拾ったC言語の文書では、省略可を表すopt記号が無かったからやはり省略不可みたい。
参考)ttp://www.jisc.go.jp/app/pager?id=123813

663 名前:デフォルトの名無しさん mailto:sage [2007/09/10(月) 22:49:09 ]
Cを無料でダウンロード出来るトコなんてないですかそうですか

やっぱり電気屋とかで買うんですかね?

664 名前:デフォルトの名無しさん mailto:sage [2007/09/10(月) 22:50:54 ]
てめぇ〜〜〜ら、一生に一度の俺の質問に答えてくれ!
どうしてC言語の勉強を始めたの?

665 名前:デフォルトの名無しさん mailto:sage [2007/09/10(月) 22:52:24 ]
日本語を無料でダウンロード出来るトコなんてないですかそうですか

やっぱり日本とかで買うんですかね?

666 名前:663 mailto:sage [2007/09/10(月) 23:11:01 ]
>>665
楽しいか?

667 名前:デフォルトの名無しさん mailto:sage [2007/09/10(月) 23:14:07 ]
>>664
遊ぶのに理由がいるのかい?

668 名前:デフォルトの名無しさん mailto:sage [2007/09/10(月) 23:17:54 ]
>>667
遊びというのは個人的な理由。ではなぜ C言語を選んだ かの理由は???

669 名前:デフォルトの名無しさん mailto:sage [2007/09/10(月) 23:19:06 ]
>>667
君、そういうことを言ってしまうと、自分にとって遊びだからという理由で
なぜその遊びを選んだかの理由は関係ないじゃ〜〜んって無責任な人間になってしまうよ?
なぜなら、殺人を遊びに選んだら、なぜ殺人をしたんですか?という質問に対して
君は常に「遊びだから」という身勝手な言い訳をし続けることになるから。



670 名前:デフォルトの名無しさん mailto:sage [2007/09/10(月) 23:19:58 ]
身勝手かどうかは主観に依存するよな。

671 名前:デフォルトの名無しさん mailto:sage [2007/09/10(月) 23:30:07 ]
>>670
殺人を遊びという理由は身勝手。なんで殺人をしてしまったのか?
という理由が述べられていない。ただの愉快犯なら情状酌量の余地なし。
すぐさま死刑で良いでしょうw

672 名前:デフォルトの名無しさん mailto:sage [2007/09/10(月) 23:31:01 ]
>>670
要するにお前は理由もなくC言語をやっていたんだ。まぁあれだろ
通っていた学校でやらされた程度で、実は面白くないと?w

673 名前:デフォルトの名無しさん mailto:sage [2007/09/10(月) 23:31:47 ]
同意。身勝手かどうかを判断する客観的な主体は存在し得ない。

深読みしてみると質問の趣旨は、なぜ数あるプログラミング言語の中から
Cを選んだのか?ってことなんかな。つか複数使える人のほうが多いと思うがね。

674 名前:デフォルトの名無しさん mailto:sage [2007/09/10(月) 23:34:14 ]
>>664
単位取得に必要だったからやった
今も後悔はしていない

675 名前:デフォルトの名無しさん mailto:sage [2007/09/10(月) 23:36:05 ]
まぁ、普通に答えると始めたきっかけは高校でやらされたからに他ならない。

676 名前:デフォルトの名無しさん mailto:sage [2007/09/10(月) 23:38:04 ]
何も知らないころよく聞く言語名がCだったから、かなぁ

677 名前:デフォルトの名無しさん mailto:sage [2007/09/10(月) 23:39:48 ]
>>663
環境書かないと分からんだろが!
サンプルソースが欲しいのか
コンパイラが欲しいのか
何が欲しいのかもよく分からん

フリー
コンパイラ
www.google.co.jp/

678 名前:デフォルトの名無しさん mailto:sage [2007/09/10(月) 23:42:10 ]
>>677
>>665

679 名前:デフォルトの名無しさん mailto:sage [2007/09/10(月) 23:43:09 ]
>>664
きっかけは、情報処理技術者試験のためデス。
学校でFORTRAN習ったけど、当時自宅のMS-DOS環境で開発環境を入手できたのがCだった。



680 名前:デフォルトの名無しさん mailto:sage [2007/09/10(月) 23:52:47 ]
>>664
最初は高校でやったMS-BASIC(だったか?)によってプログラミングが楽しくなり
学校においてあった8ビットCPUのポケコンをさわり、欲しくなったので先生に頼んで取り寄せ、16ビットCPUのポケコンを購入
インタプリタで動作するCが組み込まれていてBASICより面白いと思う
大学で自分のPCを買えるようになってコンパイラ方式のCをはじめる

681 名前:デフォルトの名無しさん mailto:sage [2007/09/10(月) 23:59:48 ]
>>673
遊びこそ主観だろ、答えたくないバカは黙ってろよ。歩インポイントでお前を
名指しして質問されているわけじゃないだろ?w お前みたいな基地外にはむしろ聞いてないって。
それから、何が主観かなんてどうでも良いんだよ。理由がいえないなら黙ってろ

682 名前:デフォルトの名無しさん mailto:sage [2007/09/11(火) 00:00:22 ]
うひょっ、わけわからない入力をしてたw
歩インポイント > お前にピンポイント

683 名前:デフォルトの名無しさん mailto:sage [2007/09/11(火) 00:05:49 ]
動的に確保した領域の大きさってどうやったらわかりますか?

684 名前:デフォルトの名無しさん mailto:sage [2007/09/11(火) 00:08:23 ]
>>667
全員が全員、遊びでC言語をやっているわけじゃないと思うんだが?
勝手にC言語=遊びみたいなことを言うなよw
お前の場合は遊びに理由がって関係ない話をしているだけ。
お前にとっては遊びで始めたというのが理由であって、C言語は遊びじゃないぞ。

685 名前:デフォルトの名無しさん mailto:sage [2007/09/11(火) 00:23:04 ]
>>683
どこかに書いておけばいい

686 名前:デフォルトの名無しさん mailto:sage [2007/09/11(火) 00:26:06 ]
自転車置き(ry

687 名前:デフォルトの名無しさん mailto:sage [2007/09/11(火) 00:26:39 ]
int *a;

のとき、
aはポインタのアドレス
*aはポインタに格納された値
なんですよね?
じゃあ
&aだと何を表すんですか?

688 名前:デフォルトの名無しさん mailto:sage [2007/09/11(火) 00:27:33 ]
>aはポインタのアドレス
いいえ

689 名前:デフォルトの名無しさん mailto:sage [2007/09/11(火) 00:28:22 ]
じゃあなによ?



690 名前:デフォルトの名無しさん mailto:sage [2007/09/11(火) 00:34:50 ]
aはポインタ型の変数
また、&aはaという変数へのポインタ



691 名前:デフォルトの名無しさん mailto:sage [2007/09/11(火) 00:34:52 ]
ポインタ

692 名前:デフォルトの名無しさん mailto:sage [2007/09/11(火) 01:01:04 ]
>>687
*aはポインタが指し示すオブジェクト。とでもいった方がよいかな。
値といっても=の左辺になれる事を理解すること。

693 名前:デフォルトの名無しさん mailto:sage [2007/09/11(火) 01:20:04 ]
aは、int型のオブジェクトのアドレスを格納するポインタ型の変数=ポインタ。
*aはポインタが指し示すオブジェクト。
&aで、int型のポインタ変数aのアドレスを参照できる。

int a = 10;
int *p;
p = &a;
printf("aのアドレスは%p\n", p);
printf("aのアドレスは%p\n", &a);
printf("aの値は%d\n", *p);
printf("aのポインタのアドレスは%p\n", &p);

これであってますか?

694 名前:デフォルトの名無しさん mailto:sage [2007/09/11(火) 01:25:53 ]
おk

695 名前:デフォルトの名無しさん mailto:sage [2007/09/11(火) 01:27:08 ]
>>695
*p = 20;
などの操作をして、aの値を確認してみるのも良い。

696 名前:695 mailto:sage [2007/09/11(火) 01:28:16 ]
ミスった
>>693ね。

697 名前:687 mailto:sage [2007/09/11(火) 01:39:59 ]
なるほどよくわかりました
ありがd

698 名前:デフォルトの名無しさん mailto:sage [2007/09/11(火) 02:53:25 ]
コンパイラがVisual C++ 2005 Express Edisionでstring,hが開けないって出るんだけど何ででしょう?

定義は#include <string,h>って書いてるんですけど他に何か設定しないとダメですか?

699 名前:デフォルトの名無しさん mailto:sage [2007/09/11(火) 02:56:20 ]
string,hじゃなくてstring.hじゃないか?



700 名前:デフォルトの名無しさん mailto:sage [2007/09/11(火) 02:57:25 ]
×string,h
○string.h
というオチじゃないだろうな?

701 名前:698 mailto:sage [2007/09/11(火) 03:02:51 ]
そ れ だ

メモに貼り付けてフォント変えたら違いが判った
ありがとう!

702 名前:デフォルトの名無しさん mailto:sage [2007/09/11(火) 06:39:00 ]
>>680
> 16ビットCPUのポケコンを購入
> インタプリタで動作するCが組み込まれていて

メーカー教えて


703 名前:デフォルトの名無しさん mailto:sage [2007/09/11(火) 06:51:08 ]
文字配列とポインタで質問です

char *str[]={”山田”、”井之上”、”御手洗”、”鈴木”};

とした場合
配列は

char
str[0][0]="山", str[0][1]="田", str[0][2]="\0", str[0][3]="\0"
str[1][0]="井", str[1][1]="之", str[1][2]="上", str[1][3]="\0"
str[2][0]="御", str[2][1]="手", str[2][2]="洗", str[2][3]="\0"
str[3][0]="鈴", str[3][1]="木", str[3][2]="\0", str[3][3]="\0"
str[4][0]="\0", str[4][1]="\0", str[4][2]="\0", str[3][3]="\0"

と自動で入って各行の配列の先頭のアドレスが*str[1]や*str[2]に入ってるんでしょうか

704 名前:デフォルトの名無しさん mailto:sage [2007/09/11(火) 06:59:57 ]
いいえ

705 名前:デフォルトの名無しさん mailto:sage [2007/09/11(火) 07:04:34 ]
という事は

> char *str[]={”山田”、”井之上”、”御手洗”、”鈴木”};

これはどういう状態でしょう?

706 名前:デフォルトの名無しさん mailto:sage [2007/09/11(火) 07:06:51 ]
文法エラーの状態です

707 名前:デフォルトの名無しさん mailto:sage [2007/09/11(火) 07:10:23 ]
本に載ってる型の定義をそのまま写してみたんですがorz

ちょっとそのまま書いてみて試してみます

708 名前:デフォルトの名無しさん mailto:sage [2007/09/11(火) 07:12:47 ]
全角/半角、クォーテーション/ダブルクォーテーションに注意

709 名前:デフォルトの名無しさん mailto:sage [2007/09/11(火) 07:19:55 ]
char *str[]={"山田","井之上","御手洗","鈴木"};

文法ってそっちでしたかorz
これでよろしいですか?



710 名前:デフォルトの名無しさん mailto:sage [2007/09/11(火) 07:55:59 ]
ちょっと眠気で頭が鈍くなってきたけど

山田、井之上、御手洗、鈴木はそれぞれメモリのどこかに書き込んで
*str[0]〜[3]にはメモリのそれぞれの文字列の先頭アドレスが入ってるってことかな


711 名前:デフォルトの名無しさん mailto:sage [2007/09/11(火) 08:18:26 ]
>>710
str[0]〜[3]にはメモリのそれぞれの文字列の先頭アドレスが入ってるってこと
だと思うよ

712 名前:デフォルトの名無しさん mailto:sage [2007/09/11(火) 08:26:49 ]
あぁそっか*をつけるとアドレス先の中身だっけ
まだ微妙に疑問点あるけどひとまず寝ます
頭が動いてないorz
ありがとう

713 名前:デフォルトの名無しさん [2007/09/11(火) 13:47:31 ]
文字列の質問です。

1から100の自然数を”1”から”100”という文字列に変換せよ

って問題ですけど、どんなプログラムになりますか?

714 名前:デフォルトの名無しさん mailto:sage [2007/09/11(火) 13:53:24 ]
for文で回してsprintf使うとか。

715 名前:デフォルトの名無しさん [2007/09/11(火) 14:16:56 ]
char** func()
{
int i,j = 0;
char *cp[100]={'\0'};

for(i = 0; i < 100; i++)
cp[i] = ( char *)malloc(sizeof(char)*4);

for(j = 0,i = 1; i <= 100; i++,j++)
sprintf(cp[j],"%d",i);

return cp;
}


716 名前:デフォルトの名無しさん mailto:sage [2007/09/11(火) 14:46:08 ]
そりゃないだろw

717 名前:デフォルトの名無しさん mailto:sage [2007/09/11(火) 14:52:54 ]
>>715
変数の寿命を…

718 名前:デフォルトの名無しさん [2007/09/11(火) 15:50:26 ]
>>715
さっきは適当に書いて張りました
以下ソース
char** func(char **cp, size_t n)
{
int i,j = 0;

for(i = 0; i < n; i++)
cp[i] = ( char *)malloc(sizeof(char)*4);

for(j = 0,i = 1; i <= 100; i++,j++)
sprintf(cp[j],"%d ",i);

return cp;
}

719 名前:デフォルトの名無しさん mailto:sage [2007/09/11(火) 15:57:14 ]
for(i = 0; i < 100; i++)
sprintf(cp[i],"%d ",i+1);

これでいいじゃん



720 名前:デフォルトの名無しさん mailto:sage [2007/09/11(火) 16:08:13 ]
>>718
nが配列のサイズならループの最大値100にすんな
引数で渡してる奴を戻り値にすんな

721 名前:デフォルトの名無しさん mailto:sage [2007/09/11(火) 16:28:09 ]
ポインタの100個の配列もmallocすればいいのだ
でも質問者は完全版を求めてるの?

722 名前:718 mailto:sage [2007/09/11(火) 16:29:51 ]
>>720
たしかにそうだね
オナニーしようかしまいか迷ってる最中に
書き込んだクソソースなんで
あんま吟味しないでね

723 名前:デフォルトの名無しさん mailto:sage [2007/09/11(火) 16:39:01 ]
何かアプリケーションを作ろうと思ったらCとC++どっちがいい?

724 名前:デフォルトの名無しさん mailto:sage [2007/09/11(火) 17:10:17 ]
伺系アプリの間違いだと信じたい

725 名前:デフォルトの名無しさん mailto:sage [2007/09/11(火) 17:57:45 ]
>>702
また難儀な・・・
押入れから引っ張り出してきたよ
あ〜なつかしぃい

CASIO PERSONAL COMPUTER FX-890P 16-bit CPU
(液晶の枠部分に書かれている文字)
しかもこれ専用(?)のフロッピーディスクドライブ&そして(確か)増設メモリまで買ってしまったはず
起動したらまだ動く(リチウム電池は空)

(スレチスマソ)

726 名前:デフォルトの名無しさん mailto:sage [2007/09/11(火) 18:09:21 ]
>>725
姉妹品?のZ-1ならもってた
捨てちゃったけど

727 名前:デフォルトの名無しさん mailto:sage [2007/09/11(火) 18:17:14 ]
>>726
これかな?
ttp://www5.plala.or.jp/igjhmc/calc/z-1.html
っていうかキー配列とか同じだ
FX-890Pの文字がZ-1になってるぐらい

728 名前:デフォルトの名無しさん mailto:sage [2007/09/11(火) 19:04:06 ]
bcc32を使っているのですが、c言語のソースプログラムのファイル名に、
list1-1.cのように「-」を使ってもいいのでしょうか?

729 名前:デフォルトの名無しさん mailto:sage [2007/09/11(火) 19:06:40 ]
いいよ



730 名前:デフォルトの名無しさん mailto:sage [2007/09/11(火) 19:59:08 ]
>>723
C++のほうがお勧めかな。

理由
C++を勉強すると、Cも勉強できる。
C++を知っているとJavaとかも簡単に理解できる。

731 名前:デフォルトの名無しさん mailto:sage [2007/09/11(火) 20:39:29 ]
C#

732 名前:デフォルトの名無しさん mailto:sage [2007/09/11(火) 20:44:32 ]
printfとputsはどっち使えばいいですか?
皆さんどっち使ってます?

733 名前:デフォルトの名無しさん mailto:sage [2007/09/11(火) 20:48:28 ]
>>732
用途による

734 名前:デフォルトの名無しさん mailto:sage [2007/09/11(火) 20:50:23 ]
>>732
使っているのは断然 printf だよ
printf を使うことで処理速度に問題が出るようなコードは書いてないから

735 名前:デフォルトの名無しさん mailto:sage [2007/09/11(火) 20:58:22 ]
賢いコンパイラは適当に最適化してくれるから、printfつかっとけ。

736 名前:デフォルトの名無しさん mailto:sage [2007/09/11(火) 22:44:59 ]
<double>
43 23
<apple>
100E+02 102E-8 102E-12
<leon>
23E+01 12E-02
<kon>
24 23.3

とかいうファイルからE表記の数値だけを抜き取るにはどうすればいいですかね?


737 名前:736 mailto:sage [2007/09/11(火) 22:45:47 ]
<double>
43 23
<apple>
100E+02 102E-8 102E-12
<leon>
23E+01 12E-02
<kon>
24 23.3
とかかれたファイルからですね。ファイル名はlist.txtとしておきます。

738 名前:デフォルトの名無しさん mailto:sage [2007/09/11(火) 22:52:38 ]
>>737
// 使用法 a.exe < list.txt
#include<stdio.h>
#include<string.h>

int main(void)
{
char buf[100];
double value;
int pos;

while(scanf("%s", buf)==1)
{
if(strchr(buf, 'E')!=NULL)
if(sscanf(buf, "%le%n", &value, &pos)>=1)
if(buf[pos]=='\0')
printf("%e\n", value);;
}
return 0;
}

739 名前:736 mailto:sage [2007/09/11(火) 23:13:38 ]
やってみます



740 名前:736 mailto:sage [2007/09/11(火) 23:14:44 ]
ありがとうございます

741 名前:デフォルトの名無しさん mailto:sage [2007/09/11(火) 23:16:58 ]
(゚Д゚≡゚Д゚)エッナニナニ?






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

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

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