C言語なら、俺に聞け! <9>
■ このスレッドは過去ログ倉庫に格納されています
0001C言語ハッカー Kusakabe Youichi
NGNGあちこちの言語に手を出したが結局極めたのはC言語だけだった。
大体のことなら分かるからオレに聞け。
だが、いちいちFAQに載った質問に応えるほど暇じゃない。
課題丸投げなら別スレにいけ。
・comp.lang.c Frequently Asked Questions
http://www.eskimo.com/~scs/C-faq/top.html
・C FAQ 日本語訳
http://www.catnet.ne.jp/kouno/c_faq/c_faq.html
・前スレ C言語なら、オレに聞け! <8>
http://pc.2ch.net/test/read.cgi/tech/1005811510/l50
0002デフォルトの名無しさん
NGNGって何か2.3日真面目に仕事してたらえらい勢いですすんでるですね
0003(・∀・)イイ
NGNGそれとprintfとputcharでは使用するメモリの領域が違うとかあるんですか?
0004Kusakabe Youichi
NGNG> おれは21才、9年間プログラムを一生懸命作ってきた。
> あちこちの言語に手を出したが結局極めたのはC言語だけだった。
これってようするにおちこぼれ? (^^;
0005Kusakabe Youichi
NGNG> 疑問に思ったんですが、printfがあればputsは必要ないのではないでしょうか?
そういう人にとっては、「中華庖丁があれば、柳刃も出刃も菜切りもペティナイフ
も
いらない」んでしょうね :)
0006デフォルトの名無しさん
NGNGputs は勝手に改行する。
(2)いろんな書式指定をするならprintf が便利だが、書式指定が特にないならputsを使えばよい。
0007デフォルトの名無しさん
NGNG>それとprintfとputcharでは使用するメモリの領域が違うとかあるんですか?
混在して使っても、特に問題はないと思いますよ。
0010newbieM
NGNG移動して再度質問させていただきます。
今ある特定のディレクトリの中のファイル名を比較して
リネームというようなソフトを作ろうと思っているんです。
つまりaっていうフォルダに
abc.txt
efg.txt
・・・・
ってあったとき
abc.txtをエービーシー.txt
efg.txtをイーエフジー.txt
という風に初めからあるリストと比較してリネームしたいんです。
ですが具体的にどのように書いたらいいかがわかりません。
どの命令を組み合わせるかおしえていただけないでしょうか?
OSはwin98です。
0011newbieM
NGNG0012デフォルトの名無しさん
NGNGPerlか何かででバッチファイルを書き出せば?
0013デフォルトの名無しさん
NGNGwindowsはディレクトリを開けないんだっけ?
とりあえずdir.hにfindfirst,findnextとかあったかな
あとstdio.hのrename
windowsではwindows.hのfindfirstfile,findnextfile
あたりだな
0014(・∀・)イイ
NGNGtypedef struct TagPerson{
char *a
int d;
}Person;
と書くのと、
TagPerson{
char *a;
int d;
};
と書くのでの違いはなんなんでしょうか?
0015Kusakabe Youichi
NGNG> 今ある特定のディレクトリの中のファイル名を比較して
> リネームというようなソフトを作ろうと思っているんです。
> ですが具体的にどのように書いたらいいかがわかりません。
> どの命令を組み合わせるかおしえていただけないでしょうか?
man 5 rename
0016(・∀・)イイ
NGNG構造体の宣言で
typedef struct TagPerson{
char *a
int d;
}Person;
と書くのと、
struct TagPerson{
char *a;
int d;
};
と書くのでの違いはなんなんでしょうか?
0017Kusakabe Youichi
NGNG> >>10
> windowsはディレクトリを開けないんだっけ?
> とりあえずdir.hにfindfirst,findnextとかあったかな
Windows移植したopendirもころがってますね。
0018デフォルトの名無しさん
NGNGそのまえに typedef の意味わかってる?
0019デフォルトの名無しさん
NGNGtypedef使うと、タイプ量が減って楽。
0020(・∀・)イイ
NGNGtypedefの意味は知っています。ようは型定義でしょ?
struct TagPerson{
char *a;
int d;
};
でのグループ名はどこにいっちゃってるんでしょうか?
違いがよくわかりません。
0021デフォルトの名無しさん
NGNG「グループ名」って、なんだったっけ?
a
0022デフォルトの名無しさん
NGNGの意味は分かる?
0023Kusakabe Youichi
NGNG> 構造体の宣言で
> typedef struct TagPerson{
> char *a
> int d;
> }Person;
> と書くのと、
> TagPerson{
> char *a;
> int d;
> };
> と書くのでの違いはなんなんでしょうか?
前者はtypedefしてるんですね。
struct TagPerson {char *a; int d;} Person;
typedef struct TagPerson;
と2つにわけてみればわかるでしょう。
また、2つに分けない場合、typedefした名前だけを使うなら、
タグ名はなくてもいいですね。
このへんは第7章にわかりやすく解説されています。
0024デフォルトの名無しさん
NGNGPerson person;
person.a = "name";
person.d = 0;
---------------------------
struct TagPerson person;
person.a = "name";
person.d = 0;
わかる?
0025デフォルトの名無しさん
NGNGstruct tagPerson1{...};
typedef struct tagPerson1{...} Person2;
int main()
{
struct tagPerson1 *p1;
Person2 *p2;
p1 = (struct tagPerson1 *)malloc(sizeof(struct tagPerson1));
p2 = (Person2 *)malloc(sizeof(Person2));
}
まぁ、実際にはmallocのも取り値はキャストしなくていいけどね。
0026デフォルトの名無しさん
NGNGこの疑問って、自分でコード書けば一発で分かる類のヤツだと思うが。
(それとも、なんか深い意味でもあるのか)
0027デフォルトの名無しさん
NGNGstruct TagPerson{
char *a;
int d;
};
で、TagPerson 型の構造体を宣言したら、後は
struct TagPerson suzuki;
で、 struct TagPerson 型の変数suzukiを宣言すればいいよ。
0028Kusakabe Youichi
NGNG> >>18
> typedefの意味は知っています。ようは型定義でしょ?
実際には型定義ではないのだが、そうだと思っていても実害はほとんどないので
最初のうちはそう覚えておけばいいかも。
> struct TagPerson{
> char *a;
> int d;
> };
> でのグループ名はどこにいっちゃってるんでしょうか?
それに「グループ名」ってなんだ? 「構造体名」のこと?
0029デフォルトの名無しさん
NGNG前の800位から凄いなちょっと
0030デフォルトの名無しさん
NGNG0031デフォルトの名無しさん
NGNGあんた、「適材適所」って言葉も知らないでしょ ? C 言語の前に、「日本語」
覚えたら ?
0032newbieM
NGNG#include<stdio.h>
main()
{
char old[] = "借金帳.txt", new[] = "asdcz.txt";
rename( old, new );
}
みたいに作ってみました。ディレクトリからって言うのは
調べてみたんですけどやっぱり使い方わからなくて・・・
でもこれだと200個とか変換するのに
かなり書かなきゃいけませんよね?
そこで
借金帳.txt→asdcz.txt
の部分をリスト化してそれを使ってリネームしたらいいのかなと
思ったんですが・・・そういった場合はどうすればいいんでしょうか?
0033で
NGNG0034デフォルトの名無しさん
NGNG名前リストをコンパイル時に確定してしまっていいのなら、これが楽かなぁ。
struct renlist {
const char *rl_src;
const char *rl_dst;
} renlist[] = {
{ "借金帳.txt", "asdcz.txt" },
{ "ノート.txt", "note.txt" },
{ NULL, NULL } /* sentinel */
};
struct renlist *rp;
for (rp = &renlist[0]; rp->rl_src != NULL; ++rp)
rename(rp->rl_src, rp->rl_dst);
0035デフォルトの名無しさん
NGNG0036デフォルトの名無しさん
NGNGYup. シンプルで良いでしょ? (まぁ、実際には rename の戻り値ぐらいチェック
しないとアレだが)
0037名無しだゴルァ
NGNG簡単じゃねえかゴルァ!!
誰か答えてくれたっていいじゃないかゴルァ!!
ってもう出来たからいいけど・・・
以上、愚痴でした。
0038デフォルトの名無しさん
NGNG愚痴は sage でな。
0039デフォルトの名無しさん
NGNGKusakabe 先生のスレ違い/意図不明な書き込みに対する苦情には専門のスレ
が用意されて いるので、ム板では書かないようにお願いします。そのような書き
込みにコメント をつけるのは、彼と一緒に一緒になって荒らし行為をし てるのと
変わりません。
日下部 陽一先生の隔離スレッド void ***
http://pc.2ch.net/test/read.cgi/prog/1006918877/
#同意も反論も不要。なんかあったら↑のスレで言ってくれ。
------
0040デフォルトの名無しさん
NGNGおまえの方がよっぽどウザイよ。
風紀委員やりたいなら、学校でやってろ。
0041デフォルトの名無しさん
NGNGオマエモナー
0042(・∀・)イイ
NGNGchar *a
int d;
}Person;
で、structの部分、TagPersonの部分、Personの部分をそれぞれなんていうんですか?
なんかこの前聞いた人と違うこと言ってて・・・
0043デフォルトの名無しさん
NGNGプログラミング言語Cの付録から。
TagPerson はタグ名
Person は typedef 名
0045デフォルトの名無しさん
NGNGアレだけみんながよってたかって教えてるのに全滅かい!
0046デフォルトの名無しさん
NGNG目的語が良く分からんけど、もしかして >>34 見ると解決したりします?
0047デフォルトの名無しさん
NGNGまあそう言うな。向こうじゃ全員ではないが
たいていの人間が同意してる。
彼も良かれと思ってやってることだ。
彼のkittyさを知らないわけでもないだろ。
0048デフォルトの名無しさん
NGNGが用意されているので、荒れないようにそこでレスしてください。
http://pc.2ch.net/test/read.cgi/prog/1006918877/
#同意も反論も不要です。何かあったら↑のスレでお願いします。
糞壁はカスです。みんなで力を合わせて排除しましょう。
0049デフォルトの名無しさん
NGNG0050デフォルトの名無しさん
NGNG言いたいとは良く分かる(やつのせいでお気に入りのスレが荒廃したし)。
だが、基本的にスレ違いな内容だから sage で書け。
0051デフォルトの名無しさん
NGNG言いたいことは良く分かる(やつのせいでお気に入りのスレが荒廃したし)。
だが、いちいち書かれるとはっきり言って鬱陶しい。10回に一回くらいの割合で書け。
0052デフォルトの名無しさん
NGNGstruct TagPerson{
char *a;
int d;
};
で、TagPerson 型の構造体を宣言したら、後は
struct TagPerson suzuki;
で、 struct TagPerson 型の変数suzukiを宣言すればいいよ。
そしたら
*suzuki.a = 25
suzuki.d = 125
と代入できる。
0055デフォルトの名無しさん
NGNGできる。
0056デフォルトの名無しさん
NGNG0057デフォルトの名無しさん
NGNGまた、構造体メンバのデータ位置もあまり気にしない人なのでしょうか。
0058デフォルトの名無しさん
NGNG気にしますよ。
0059デフォルトの名無しさん
NGNG人や環境による。
オレはかなりおおまか。
0060デフォルトの名無しさん
NGNG場合による。
組み込み系で、開発にPC上のエミュレータなんか使ってる場合、
バウンダリの扱いに気をつけて構造体使わないとハマる。
PCアプリ作る場合なら、ほとんど気にしない。
0061デフォルトの名無しさん
NGNGJAVAがそうです。
0062デフォルトの名無しさん
NGNG1、2、3、・・・10と並んで出る確率と
1、1、1、・・・1と全部1が出る確率は同じでしょうか?
0063デフォルトの名無しさん
NGNGそれC言語関係ないんじゃ?
確率論的には同じじゃない?
0064デフォルトの名無しさん
NGNGrand()の実装についてききたいのか?
0065デフォルトの名無しさん
NGNGC--あるよ
0066デフォルトの名無しさん
NGNGB言語?
0067デフォルトの名無しさん
NGNG検索しろ
0068デフォルトの名無しさん
NGNG検索しろって言われてもな、--←これはキーワードとして見てくれないんだよ。
0069デフォルトの名無しさん
NGNGhttp://www.google.co.jp/search?q=%22C--%22&hl=ja&lr=
007067
NGNGhttp://www.programmersheaven.com/search/search_all.asp
0071デフォルトの名無しさん
NGNGだめみたい・・・
多分--もキーワードとして見てくれているんだろうけど、Cと--を勝手に分けてしまっているんじゃないかな?
>>70
本当にあるんだね(笑)
面白い情報サンクス
0072newbieM
NGNG無事それを使ってできました!
今やっと250ほどのデータ打ち込み終わったところです。
ありがとうございました。
007362
NGNG過去に取得した値を調べて、同じのが無ければ決定する
方法が紹介されていましたが(どのスレだったか忘れました)。
これだと、なかなかループから抜けなくなるかもしれません。
よって、
0〜100の値を10個取得する場合、
配列A[101]にA[0]=0、A[1]=1、...と代入して、
最初は0〜100からランダムに一つ選び、その値を配列から削除し、配列の要素数を-1する。
次は、0〜99からランダムに一つ選び、.....
...
とやる方がいいかな? と思ったのです。
で、乱数関数が全部1を返した場合。
このやりかただと、求まる値は 1, 2, 3, ...となります。
わからなくなってきた・・・。
それより、ある値が出る確率は
(1/101) * (1/100) * (1/99) * .... * (1/92)
になるから・・。
0074Kusakabe Youichi
NGNG> 重複しない乱数を取得する質問で、
> 過去に取得した値を調べて、同じのが無ければ決定する
> 方法が紹介されていましたが。
どろくさい方法ですよね:)
> これだと、なかなかループから抜けなくなるかもしれません。
数が増えるとかなり遅いですね。
(現実的にはたいがい有限時間内に終わっていますが^^)
> よって、
> 0〜100の値を10個取得する場合、
> 配列A[101]にA[0]=0、A[1]=1、...と代入して、
> 最初は0〜100からランダムに一つ選び、その値を配列から削除し、配列の要素数
を-1する。
> 次は、0〜99からランダムに一つ選び、.....
> ...
> とやる方がいいかな? と思ったのです。
それって意味ないような(^^;
0075デフォルトの名無しさん
NGNG乱数の範囲が大きくなると、配列のサイズがでかくなるので、
使えないって事?
0076デフォルトの名無しさん
NGNGたとえば、2を含めないと決めたら、
A[10] = {0, 1, 3, 4, ..., 9}
を作って、並べ替えるやり方。
0077Kusakabe Youichi
NGNGwrote:
> 意味ないの意味が分からないよ。
> 乱数の範囲が大きくなると、配列のサイズがでかくなるので、
> 使えないって事?
そうじゃなくって、要件を満たしていないのでは? っていう意味。
0078デフォルトの名無しさん
NGNG0079Kusakabe Youichi
NGNGwrote:
> あらかじめ含めない値をランダムに求めておいて、並べ替えるやり方はどうです
か?
> たとえば、2を含めないと決めたら、
> A[10] = {0, 1, 3, 4, ..., 9}
> を作って、並べ替えるやり方。
ですから、その「あらかじめ含めない値をランダムに求めておいて」のところは
どうやるの? :)
0080デフォルトの名無しさん
NGNG結局何の確率が知りたいのかわかんない。
rand()関数の出目の確率なのか。
配列を使った自作関数での出目の確率なのか。
0081デフォルトの名無しさん
NGNG自分なりに考えてやって見ました。
これで何点くらい、もらえますか?
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define M 100 // 乱数の範囲
#define N 10 // 必要な乱数の範囲
int main()
{
int table[M];
int i;
srand(clock());
for( i = 0; i < M; i++ ) {
table[i] = i;
}
for( i = 0; i < N; i++ ) {
int r = rand() % M;
int tmp = table[i];
table[i] = table[r];
table[r] = tmp;
}
for( i = 0; i < N; i++ ) {
printf("%d ", table[i]);
}
printf("\n");
return 0;
}
0082デフォルトの名無しさん
NGNGFAQには符号付き整数の右シフトは処理系依存と書いてあります。
#define RSHIFT(i,n) ((i>0?1:(-1))*(signed)(((unsigned)i)>>n))
こんな馬鹿みたいなのしか思いつかないのですが。
0083デフォルトの名無しさん
NGNGな処理系、あるいは両者のcastがうまくいかない処理系って
どんなのがありますか?規格では保証していないようですが。
0084デフォルトの名無しさん
NGNGそのやりかた、あってる?
あと、FAQの何章に書いてありました?
見つからなかった(^^;
0085デフォルトの名無しさん
NGNGいいんじゃないの?
それならcharでもintでもいけるし。たぶん。
最上位ビットを残して云々 って一瞬考えたけど
処理系にすげー依存しそうだしやめた。
0086デフォルトの名無しさん
NGNGマイナスのとき、処理がうまくいかないよ。
0087Kusakabe Youichi
NGNGIn article >>81, 81 デフォルトの名無しさん
wrote:
> for( i = 0; i < M; i++ ) {
こういうふうに「for」と「(」をはくっつける、
「(」と「)」の内側に空白を明けるっていうのは、
どこの影響だろう :)
括弧のフォントをデザインした人がかわいそうだ :)
0088デフォルトの名無しさん
NGNGでも、そういうのはアセンブラで書いたほうが確実。
処理系依存部分は、処理系依存言語に任せる。これ最強。
0089Kusakabe Youichi
NGNGwrote:
> 符号付き整数を符号維持したまま右シフトするもっとも単純な方法って?
「>>>」 :-P
> FAQには符号付き整数の右シフトは処理系依存と書いてあります。
> #define RSHIFT(i,n) ((i>0?1:(-1))*(signed)(((unsigned)i)>>n))
> こんな馬鹿みたいなのしか思いつかないのですが。
unsignedにcastするか、負の場合だけ場合分けしてmaskを使うかでしょうね。
009082
NGNGすみません。処理系依存とは書いてないですね。
ですが Q20.15(書籍版ですが)に「負の数を右シフトすることは割算と
等しくない」とあります。
また、K&R第2版の253ページに「右シフトを負の数にした場合、結果は処
理系依存」という旨の文章があります。
>>84,86
思いきりまちがえてますね。失礼しました。
(ちょっとオリジナルFAQ&JIS本見る時間が無いので夜まで失礼します)
0091デフォルトの名無しさん
NGNG右シフトしたときに処理系によって
0が入るのと符号がはいるのと両方ある
って書いてあるね
手元のだとP60だから、まあその辺
0092デフォルトの名無しさん
NGNG>>> って古いコンパイラでもつかえる?
0093デフォルトの名無しさん
NGNG60点。確率が均等でない。
ためしにN=2でtable[0]が2になる確率を考えてみろ。
19,4c19,7
< int r = rand() % M;
< int tmp = table[i];
< table[i] = table[r];
< table[r] = tmp;
---
> int r = rand() % (M - i);
> if (r) {
> int tmp = table[i];
> r += i;
> table[i] = table[r];
> table[r] = tmp;
> }
0094Kusakabe Youichi
NGNGwrote:
> なるほど、カニチャーハンには
> 右シフトしたときに処理系によって
> 0が入るのと符号がはいるのと両方あるって書いてあるね
私なら、「そこだけJavaやる」:) も。
なんでCには「>>>」がないんだろうね。
0095Kusakabe Youichi
NGNGwrote:
> >>89
> >>> って古いコンパイラでもつかえる?
いや、新しいのでも無理では?
0096デフォルトの名無しさん
NGNG> 私なら、「そこだけJavaやる」:) も。
もうね、アホかと。馬鹿かと。
0097Kusakabe Youichi
NGNGwrote:
> >>94
> > 私なら、「そこだけJavaやる」:) も。
>
> もうね、アホかと。馬鹿かと。
そんなにうれしいですか? :)
0098デフォルトの名無しさん
NGNG0099Kusakabe Youichi
NGNGwrote:
> インラインアセンブラはあっても、インラインジャヴァはありません
あってもだれもつかわなそう:)
0100てきとう
NGNG0101てきとう
NGNGかっこがおおいのはかんべんしてちょー ぷりぷり
■ このスレッドは過去ログ倉庫に格納されています