C言語なら、俺に聞け! <10>

このエントリーをはてなブックマークに追加
1Cハッカー日下部陽一
おれは42才、24年間プログラムを一生懸命作ってきた。
いろいろな言語を極めたが、一番手になじむのはCだった。
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言語なら、オレに聞け! <9>
http://pc.2ch.net/test/read.cgi/tech/1007272267/l50

Cプログラマならこれを買っとけ。
・プログラミング言語C(K&Rと呼べば通のようだぞ)
http://www.amazon.co.jp/exec/obidos/ASIN/4320026926/yfcbookshelf-22/250-3950205-1475419

K&Rで挫折するようなヤツはこれでも買え。
これでわからない、救いがたいヤツはあきらめろ。
・作ってわかるCプログラミング(アヒル本と呼べば通のようだぞ)
http://dennou.gihyo.co.jp/books/void_c/
http://www.amazon.co.jp/exec/obidos/ASIN/477411328X/qid%3D1005618315/250-3950205-1475419
2
1は童貞
手になじんだのは、自分のティムポ
5デフォルトの名無しさん:01/12/14 13:35
いつもお世話になっております。
早速ですが、ファイルポインタを引数として関数に渡そうとしてコーディング
してみたのですが、どうも上手くいきません。
方法は下記の通りです。

main(){
FILE *FP;

Init_Proc(&FP);
}
Init_Proc(FILE **FP){
*FP = fopen(・・・);
X_Proc(FP);
}

X_Proc(FILE **FP){
fprintf(*FP, "%s\n", "ABC");
}

現状ではX_Procでファイル書込を行った際にファイルポインタが破壊されて
いるようです。
ファイルポインタを引数として渡すことはあまりなくて、どのようにすれば
よいのかわかりません。
みなさん、ご教授を宜しくお願いします。
6Kusakabe Youichi:01/12/14 13:40
>>5
デフォルトの名無しさん wote:
>いつもお世話になっております。

そういうことにしたいのですね。
>>6
つかれてきましたね?
8Kusakabe Youichi:01/12/14 13:58
In article >>5, デフォルトの名無しさん/5 wrote:
> main(){FILE *FP;Init_Proc(&FP);}
> Init_Proc(FILE **FP){ *FP = fopen(・・・); X_Proc(FP);}
> X_Proc(FILE **FP){fprintf(*FP, "%s\n", "ABC");}
>
> 現状ではX_Procでファイル書込を行った際にファイルポインタが破壊されて
> いるようです。

そういう問題ではないですね。

> ファイルポインタを引数として渡すことはあまりなくて、

っていうか、こんな渡し方をしなきゃいけない場合は考えられないので、
そもそも設計がまちがっているのでしょう。

まず、fopenで帰ってくる値(ポインター)が指す実体はどこにあるのか
想像してみましょう。

# いったいどんな本を読んで勉強したのだろうか。
9Kusakabe Youichi:01/12/14 13:58
In article >>6, Kusakabe Youichi/6 wrote:

> >>5
> デフォルトの名無しさん wote:
> >いつもお世話になっております。
>
> そういうことにしたいのですね。

引用の仕方がちがいますね。
>>8
アヒル本とK&Rをよんで勉強してきました。
>>5
> 早速ですが、ファイルポインタを引数として関数に渡そうとしてコーディング
> してみたのですが、どうも上手くいきません。
「どうも」じゃなくて「どう」上手くいかねぇのよ。

> 現状ではX_Procでファイル書込を行った際にファイルポインタが破壊されて
> いるようです。
んなこたぁない。
fopen()の引数だけ直して#include <stdio.h>つけたらちゃんと動いたぞ。
省略したところに別のバグがあるんだろ。

> ファイルポインタを引数として渡すことはあまりなくて、どのようにすれば
> よいのかわかりません。
変すぎ。
125:01/12/14 14:24
みなさん、有り難うございます。
以前、UNIXの環境でファイルポインタを引数にしようとした時、
『ダブルポインタにしないと渡せない』と言われてから、そういうものだと
思っていましたが、VC++では違うようですね・・・
みなさんの意見を参考に試してみます。
有り難うございました。
13Kusakabe Youichi:01/12/14 14:26
In article >>12, 5/12 wrote:
> みなさん、有り難うございます。
> 以前、UNIXの環境でファイルポインタを引数にしようとした時、
> 『ダブルポインタにしないと渡せない』と言われてから

「だれに」いわれたのですか?
>>12
> 以前、UNIXの環境でファイルポインタを引数にしようとした時、
> 『ダブルポインタにしないと渡せない』と言われてから、そういうものだと
> 思っていましたが、VC++では違うようですね・・・

>>5が完全に誤解してるか、思いっきりだまされてるか、そう言った奴も完璧な厨房か。
>>5の誤解に1000ポインタ。
15もふ:01/12/14 15:41
バイナリのランダムアクセスファイルを作ったり読んだりする
プログラムをつくってます。ひとつのデータが下のような構造体です。

typedef struct {
int x;
long y;
} mydata;

なにかアライメントやエンディアンとかの問題があるらしいので
mydata buf;
fread( &buf, sizeof(mydata), 1, fp );
fwrite( &buf, sizeof(mydata), 1, fp );
みたいなのは駄目らしいのですが、具体的にどう回避すれば
よいのでしょうか?

アライメントの問題のほうは
fwrite( &(buf.x), sizeof(int), 1, fp );
fwrite( &(buf.y), sizeof(long), 1, fp );
とか分ければいいのかな? と思うのですが
エンディアン云々のほうは回避策がわかりません。。。

そもそも、longとかのビット数が違ったら駄目な気もするし。。。
なにかこういうときの定番の方法とかあったら教えてくださるとうれしいです。
>>5(釣り師)のネタに10000ポインタ。
1716:01/12/14 15:55
あ、これ>>14へのレスね
18デフォルトの名無しさん:01/12/14 15:58
>>15
アライメントの問題は、そのように構造体のメンバを
ひとつずつ処理しればOKですよ。

エンディアンの問題は、たとえば、こういうように一バイトずつ
読み書きするしかないでしょうね。
void write_long(FILE* fp, long n)
{
 int i;
 for (i = 0; i < 4; i++ ) {
  fputc(n & 0xff, fp);
  n >>= CHAR_BIT;
 }
}
hton*関数で強制的にネットワークバイトオーダにしてから
書く、という手もあるよ。
20デフォルトの名無しさん:01/12/14 16:05
>>15
longのサイズの問題は、保証されてる32ビットしか使わない
ようにすればよいと思う。
21Kusakabe Youichi:01/12/14 16:18
In article >>15, もふ/15 wrote:
> なにかこういうときの定番の方法とかあったら教えてくださるとうれしいです。

対象環境が1つか2つだったら#ifで対処、
無数の環境を意識するんだったら、
freadでcharの配列に読んで1バイトずつ処理するか、
ascii化して書くかどちらか。
22tai:01/12/14 16:39
C言語で関数ごと個々のソースで分けてあるプログラムを改造しようと思っているのですが,
ひとつの関数で使ったローカル変数に入った値をプログラム全体での変数に代入したいのですが、どのようにしたら良いのでしょうか?
よろしくおねがいします。
グローバル変数にするのはダメなの?
24Kusakabe Youichi:01/12/14 16:45
In article >>22, tai/22 wrote:
> ひとつの関数で使ったローカル変数に入った値をプログラム全体での変数に
> 代入したいのですが、どのようにしたら良いのでしょうか?

ふつうに代入する。
25もふ:01/12/14 16:54
皆さんありがとうございます。

なるほど、0xffと & を取ればエンディアンに関係なくいちばん「桁」の
小さいところのバイトを取れるんですねー。

いちおう、こんなのでやってみます。。。

int read_mydata( FILE *fp, mydata *dp ){

if( read_int( fp, &(dp->x) ) == 0 ) return 0;
if( read_long( fp, &(dp->y) ) == 0 ) return 0;

return 1;
}

int read_long( FILE *fp, long *l ){

int i, c;
*l = 0;

/* 32bitまで */
for( i=0; i<4; i++ ){
if( ( c = fgetc( fp ) ) == EOF ){
return 0;
}
*l |= c;
*l <<= 8;
}

return 1;
}
26Kusakabe Youichi:01/12/14 17:27
In article >>25, もふ/25 wrote:
> いちおう、こんなのでやってみます。。。
> int read_mydata( FILE *fp, mydata *dp ){
> if( read_int( fp, &(dp->x) ) == 0 ) return 0;
> if( read_long( fp, &(dp->y) ) == 0 ) return 0;
> return 1;
> }
エンディアンの問題はなんとかなっても、構造体のメンバーの間に
隙間があったらどうするつもりなの?
>>26
>エンディアンの問題はなんとかなっても、構造体のメンバーの間に
>隙間があったらどうするつもりなの?

メンバをひとつずつ処理してるから、問題ないのでは?
28Kusakabe Youichi:01/12/14 17:35
In article >>27, デフォルトの名無しさん/sage/27 wrote:
> >エンディアンの問題はなんとかなっても、構造体のメンバーの間に
> >隙間があったらどうするつもりなの?
>
> メンバをひとつずつ処理してるから、問題ないのでは?

「処理」とは?
29デフォルトの名無しさん:01/12/14 17:39
>>28
>「処理」とは?

if( read_int( fp, &(dp->x) ) == 0 ) return 0;
if( read_long( fp, &(dp->y) ) == 0 ) return 0;

read_int(),read_long()こういう関数をコールして、
ファイルから、int,longの単位で読み出してることです。
30デフォルトの名無しさん:01/12/14 17:41
._________
|             |
|  ここでボケて   |
|____ ____|
   ∧,,∧ ||
⊂ミ.,,゚Д゚彡つ
31Kusakabe Youichi:01/12/14 17:42
In article >>29, デフォルトの名無しさん/29 wrote:
> >「処理」とは?
>
> if( read_int( fp, &(dp->x) ) == 0 ) return 0;
> if( read_long( fp, &(dp->y) ) == 0 ) return 0;
>
> read_int(),read_long()こういう関数をコールして、
> ファイルから、int,longの単位で読み出してることです。

ってことは、書くときにもそうするってことですよね?(そこが重要)。
32デフォルトの名無しさん:01/12/14 17:49
>>31
>ってことは、書くときにもそうするってことですよね?(そこが重要)。

ああ。
読むときに、int,long単位でやってるから、書き込みも
同じに処理するって、思い込んでましたよ。
初心者相手には、そういう配慮をしたほうがいいですかね。
33もふ:01/12/14 17:51
情報が足らなくてすみません。

もちろん、書くときにも同じ順番でひとつずつ write_int , write_long などとやりますが、
それなら大丈夫ですよね?
34Kusakabe Youichi:01/12/14 17:52
In article >>32, デフォルトの名無しさん/32 wrote:
> ああ。
> 読むときに、int,long単位でやってるから、書き込みも
> 同じに処理するって、思い込んでましたよ。

まあ、自分でやるときはそうするから...は甘いですね:)

> 初心者相手には、そういう配慮をしたほうがいいですかね。

配慮というか「警戒」というか。
35Kusakabe Youichi:01/12/14 17:54
In article >>33, もふ/sage/33 wrote:
> もちろん、書くときにも同じ順番でひとつずつ write_int , write_long などとやりますが、
> それなら大丈夫ですよね?

その読む関数と書く関数がつねにセットになっていて不整合がなく、
片方だけ修正しわすれることがなければね。

そのためにはなるべく近くに置くのがコツ。
(#defineマクロなどで共通化もはかる)
>>33
たいていのアーキテクチャでは整数を表現するのに2の補数を使ってるけど、稀に1の
補数を使ってるアーキテクチャもある。その場合には >>25 だと NG だね。
(ま、そんなアーキテクチャを使う予定がなければ、気にしないのが正解だけどさ)

あと、構造体ごとに read_xxx 関数を作ると面倒になるから、一つ抽象化したほうがいい
と思われ。printf() みたく

 (1) ダンプするデータを指定する文字列 (c で char, i で int, l で long とか)
 (2) 実際のデータ

を列挙して処理できる関数を、一つ用意するとかね。

inline int read_mydata(FILE *fp, mydate *dp)
{
  unpack(fp, "il", &dp->x, &dp->y);
}

たとえば、こんな感じで。これだけだと有り難味が実感できないかもしれんが、ユーザ定義の
コールバック関数を取れるように (1) を拡張したりすると、データが複雑になったときの保守
性に差が出てくる。
37デフォルトの名無しさん:01/12/14 18:09
>>26
>稀に1の補数を使ってるアーキテクチャもある。その場合には >>25 だと NG だね。

1の補数でもOKのように見えますけど、どこがいけないんでしょうか?
>37
2の補数の機械で、-50を保存
そのデータを1の補数の機械へもっていき、読みこむ

とどうなるか、というお話ではないだろうか?
>>38
なるほど。
いろいろあるなぁ。
互換性を考えると、テキストデータが一番いいかな。
(って、文字コードもいろいろあるのか)
C言語ですが,ひとつの関数で出来上がったint のデータを
クリップボードに移すにはどのようにやればよいのでしょうか?
>>40
Generic な C では「クリップボード」は定義されてないから、何とも。VC の話なら VC スレで聞いたほうが
いいと思うぞ。
42デフォルトの名無しさん:01/12/14 18:59
レスありがとうです。
なんか下記のようなサンプルがあるんだけどこれを独立したcソースの関数とすると、
コンパイル後に「HGLOBALは定義されていない識別子です」とでてエラーがでます。
定義はどこですればいいのでしょうか?
あとCではクリップボードはつかわないほうがいいのですか?


void SetClipText(void)
{
HGLOBAL hText;
char *pText;

hText = GlobalAlloc(GMEM_DDESHARE | GMEM_MOVEABLE, 4);
pText = GlobalLock(hText);
lstrcpy(pText, "abc");
GlobalUnlock(hText);

OpenClipboard(NULL);
EmptyClipboard();
SetClipboardData(CF_TEXT, hText);
CloseClipboard();
}
>>42
ヘッダをインクルードしなさい。
てか、C言語の質問とちゃうでしょ。
44ネタ?:01/12/14 19:47
「Cではクリップボードはつかわないほうがいいのですか?」
ゲラゲラ
C特有のヘボを指摘して、その次Win32スレに移行だな
46デフォルトの名無しさん:01/12/14 21:24
古い話題を掘り返してすまんが、
>>8
> っていうか、こんな渡し方をしなきゃいけない場合は考えられないので、
Init_Proc()で開いたファイルストリームを、main()で触りたい場合は?
戻り値で返せってか、まぁその通りなんだが。

> まず、fopenで帰ってくる値(ポインター)が指す実体はどこにあるのか
> 想像してみましょう。
これはマジか?ネタか?
5をひっかけて喜んでるのか?
想像の入る余地があんのかよ。

> # いったいどんな本を読んで勉強したのだろうか。
あんたがな。
>>46
>これはマジか?ネタか?
>5をひっかけて喜んでるのか?

なんのことだろ。
日下部氏が間違ってるようには見えないけど?
48デフォルトの名無しさん:01/12/14 21:44
>>47

・fopenで帰ってくる値(ポインター)が指す実体
> fopenが返す値(FILE*型)の実体は、標準関数が内部管理する領域(FILE型)

・fopenが返した値を格納した領域
> Init_Proc(FILE** FP)へ引数としてアドレス(FILE**型)が渡された、
main()内のFILE*型変数FP。

で、何が問題?
fclose()してない事?
>46
普通、構造体で包んで渡したりするとおもうよ。
FILE**が出てくるソースは、俺はあんまし見たことない。

>47
じゃ、とりあえず、5のどこが間違っているのか、説明してみてよ。
スマソ、sageてなかった。

>>49
まぁ、その通りだし、私もそうするけど、5の
> っていうか、こんな渡し方をしなきゃいけない場合は考えられないので、
“考えられない”ってのが言い過ぎだという反例です。
51デフォルトの名無しさん:01/12/14 22:04
>>48-49
ポインタのポインタなんてしないで、
普通に FILE*fpで受け渡しすればいいのでは?
5が動くといっても、無駄に処理を複雑にしてるだけに見えるよ。
>51
とりあえず、その「普通にFILE*fpで受け渡し」してみたコードを載せてみ。
>52 意地悪(w
>>52
検証の余地なんてないと思うけど、なんで?
なんか勘違いしてない?
5546:01/12/14 22:31
>>54
それに必然性があるか否かはともかく、
5のソースではFILE*型変数FPの実体はmain()内にあるのさ。
で、Init_Proc()でfopen()してる。
さて、Init_Proc()からmain()に戻ったとき、
FPの値は何やろね?

という事を、52は言いたいのだと思われ。

あんまこんな事をつついていると、元凶から
“そもそも設計がまちがっているのでしょう。”
とか返されそうでやだな。
56デフォルトの名無しさん:01/12/14 23:22
char *p;

p = malloc(sizeof(char)*256);


これをコンパイルするとエラーになります。

エラー E2034 testf.cpp 8: 'void *' 型は 'char *' 型に変換できない(関数 main() )

コンパイラのせい?
>>56
コンパイラのおかげです。
58デフォルトの名無しさん:01/12/14 23:26
>>56

なんで、p=(char *)malloc(256);
にしないの?
56>58
知らなかったから。
ありがと。無事コンパイルできたよ
void *型は全てのポインタ型と互換性があるんじゃないの?
>>60
c++コンパイラでコンパイルしたんじゃない?
56>60.61
そう、コンパイラはBorland C++ です。
6361:01/12/14 23:57
まあ、拡張子が.cだったらcでコンパイルされるみたいだけど(bcc32)。
c++はある型をtypeとすると
type*からvoid* へは普通にキャストできるけど
void*からtype* へのキャストは明示的に(type*)とキャストしないと
コンパイラに叱られる。
c++なら (type*) ではなく static_cast<type*>() だ、
と知ったかぶってみる板違い。
65デフォルトの名無しさん:01/12/15 00:46
質問です。
Winで\nてやるとWin用の改行コードを吐きますよね?
それを、無理矢理UNIX系OSの改行コードを吐かせる方法ってありますか?
66デフォルトの名無しさん:01/12/15 00:52
BC++でも、ソースの拡張子を.cにすれば、Cのソースとして理解してくれるんじゃないの?
>>64
それ以前に new 使うと思うが。(これならキャスト不要だよ)
>>65
良く分かってないのに“吐く”だなんて言葉使うな。
“\nてやると”ってなんだよ!

“テキストモード”と“バイナリモード”で調べろ。
阿呆
工房が吠えてます(ワラ
>65


学校で丁寧に習わないと先へ進めなかったあほですか?
>Winで\nてやるとWin用の改行コードを吐きますよね?
UNIXでもDOSでも吐きますが何か?
>それを、無理矢理UNIX系OSの改行コードを吐かせる方法ってありますか?
何を無理するんでしょうか、すいませんが私も「吐く」の意味が把握出来ません
73自作自演:01/12/15 01:06
お前ら、そろそろ勘弁してやれよ(w
>>65
バイナリモードでオープン
そろそろ勘弁て、俺速攻で教えてるやんかー
> “テキストモード”と“バイナリモード”
しかも工房呼ばわり。

ところで無理矢理ってイイね。
無理矢理履かせる、黒ニーソクスを
無理矢理穿かせる、タイトミニを
厨房見るとハイエナの如くハンターが集まってくるね(^^;)こわっ
>>75
> しかも工房呼ばわり。
そりゃあ 65=69 で、質問したら馬鹿にされて悔しかったんだろ(w
78 :01/12/15 01:26
おおかたファイル操作で躓いてんじゃねーの?<厨房
>>72
自分で「吐きます」とつかっているじゃないか。
80opopi:01/12/15 01:43
c:\program files\microsoft visual studio\myprojects\report\report.cpp(2) : fatal error C1083: インクルード ファイルがオープンできません。'plot10.h': No such file or directory
こういうエラーがでるんですけど、なぜかわかりませんか?
ちなみにproject−設定でplotc2fをいれたんですができません
81Kusakabe Youichi:01/12/15 01:53
In article >>76, デフォルトの名無しさん/sage/76 wrote:

> 厨房見るとハイエナの如くハンターが集まってくるね(^^;)こわっ

っていうか「正しい教え方」どころか、
自己満足のために相手しているみたいだし。

私みたいに正しく対処すればいいのにね。
>>80
'plot10.h': No such file or directory
って自分で書いてるじゃねぇか。

> ちなみにproject−設定でplotc2fをいれたんですができません
意味不明

正しい対処とやらは誰かさんがしてくれるじゃろ。
俺は毒づくだけ。

阿呆
ストレスが溜まっているからね
84Kusakabe Youichi:01/12/15 02:22
In article >>80, opopi/80 wrote:

>'plot10.h': No such file or directory
> こういうエラーがでるんですけど、なぜかわかりません

考えなさい。
マニュアル読む癖付けろよー
と言うかwarez臭いな(w
86デフォルトの名無しさん:01/12/15 09:35
VC++6で下記のように書いても、エラーになりませんでした。
バグ?

while(...) {
...
} while(...);
>86
なにが言いたいのかよくわからないな。
Whileが2つあるだけではないのか?
while(1) i++;
while(1) ;
を、君はエラーにしてほしい、とでも言うのか?
>>86
どこかで見たな、その質問。
ネタか?ツマラソ
>>86
ネタかも知れんが、一応解説しといてやる。
structとかと違って複文ブロックのあとに;は不要。
90デフォルトの名無しさん:01/12/15 11:16
cat
dog
cow
hors
dog
bird
cat

こういう感じで、一行に単語がひとつ書いてある
テキストファイルを読み込んで、重複してある
単語を取り除いて、ユニークな単語数を数えると
いうプログラムを作りました。
いったんは完成したのですが、いろいろいじっている
うちに、うまく動かなくなって、元にもどせなくなって
しまいました。
どうすれいいですか?
9190の続き:01/12/15 11:17
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <string.h>

char *table[1000];
int table_tail = 0;

void table_add(char *s)
{
 char *p;
 p = malloc(strlen(s)+1);
 if (p == NULL ) {
  exit(1);
 }
 strcpy(p, s);
 table[table_tail] = p;
 table_tail++;
}

void word_count()
{
 int i, j;
 int kazu;
 int flag;
 kazu = 0;
 j = 0;

start:
 flag = 0;
 for (i = j; i < table_tail; i++) {
  if (strcmp(table[j], table[i]) == 0) {
   flag = 1;
  }
 }
 if (flag == 1 ) {
  table[j] = NULL;
 }
 j++;
 if( j >= table_tail-1 ) {
  goto end;
 }
 goto start;
end:

 for (i = 0; i < table_tail; i++) {
  if (table[i] != NULL) {
   kazu++;
  }
 }

 printf("%d\n", kazu);
}
9291の続き:01/12/15 11:17

int main()
{
 char s[256];
 char *p;
 FILE *fp;

 fp = fopen("word.txt","r");
 if (fp == NULL) {
  exit(1);
 }

 for (;;) {
  p = fgets(s,256,fp);
  if (p == NULL) {
   goto end;
  };
  table_add(s);
 }
end:
 word_count();
 return 0;
}
>>90
ソース読むのウザイ、後でみてやるかもしれない。

> いったんは完成したのですが、いろいろいじっている
> うちに、うまく動かなくなって、元にもどせなくなって
> しまいました。
ソースは履歴を取っとけ。
“いったんは完成した”というのなら、
そういった時点でな。
>いろいろいじっている
>うちに、うまく動かなくなって、元にもどせなくなって
>しまいました。
>どうすれいいですか?

CVSを導入しましょう。
goto使うなよぅ・・・
gotoを全くつかうなとは言わん。(宗教論争はカンベソ)
でも、お前がgoto使ってる個所は総て、forかwhileループ、
およびbreak文で書ける、というか俺ならそうする。

>うまく動かなくなって
何が問題が書け!
コピペしてmakeして実行してみろと?
しかもバグ付きソースを!?

アクセス違反が起きる、というなら、
strcmp(table[j], table[i])にNULLを突っ込んでいるのが原因やろ。

阿呆
ブレイク!
ブレイク!
このプログラムじゃ、いらんよな>goto
while forとbreakで十分。
>>90-92
なんの目的でやってるの?
プログラミングのお勉強?
それなら、とりあえず goto なくせ。
必要ない flag も使うな。

問題があるのは strcmp(table[j], table[i]) のところで
NULL を渡すことがあるのがいけんのだと思う。
ケコーンだ。
10199:01/12/15 11:50
かぶった…
10296:01/12/15 11:54
俺?>ケコーン
99さんよろしく!
しあわせにしてね(はぁと)
10390:01/12/15 11:56
すみません。
goto使わないと、かけませんでした。
自分には、これで、いっぱいいっぱいです。
ついで、コレも下手うつと宗教論争の元だけど、
malloc()で確保したんだから、
table[j] = NULL;
ってやる前に、free()しとけ。

> goto使わないと、かけませんでした。
少なくとも、main()の中のgotoはbreakに。
そもそもwhileの条件にfgets()を指定すればそれで良い。
word_count()中のgotoも、forで書けるでしょ?
がんばれ!

…阿呆
10599:01/12/15 12:17
>>102
こちらこそよろしく!
無職ですがよろしく!
106C初心者:01/12/15 12:26
教えて下さい。
他人のソースで見たのですが……

#define SAMPLE "abcde"

このような定義があり、

if (string[0] == SAMPLE[0]) {

と書かれていたのですが、define定数のこのような使い方は
一般的なのでしょうか?
別に良いと思う、何でそんな風なのか謎だけど
代入は出来ないからね。
>>106
99さんと俺のケコーン式を邪魔したな!阿呆!!

一般的って何?水掛け論になりそうな言い回しヤメテ。
h = "0123456789abcdef"[d];
10進 to 16進 とか…
あんま使わんけど、全く見ないと言う程ではないと。
×10進 to 16進 とか…
○整数値の16進数表記化

阿呆>俺
110デフォルトの名無しさん:01/12/15 13:03
>>108
それはおいといて、文字列を#defineで使うってのが
気持ち悪いのはおれだけか?
>>110
どの意味?
文字列リテラルはベタ書きしろ?
extern const char* const とかで管理しろ?
そもそもスコープ無視で作用する#defineを文字列定数ごときに使うな?
112後藤さん:01/12/15 14:22
エラー処理のときにくらい使わせてくれよgoto
 | ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄|
 | ここでボケて!!  |
 |_________|
    ∧∧ ||
    ( ゚д゚)||
    / づΦ
114デフォルトの名無しさん:01/12/15 14:55
for (i=0;i<5;i++){
 printf("a[%d] = ",i);
 scanf("%c",&a[i]);
}

↑こうやるとうまくいきません。%sにすると問題ないです。なんで?
scanfがそう言う関数だから
ここで質問する厨房ってscanfを使いだがるな。
学校で教えられるからかな。
「作ってわかるCプログラミング」に載ってるとか>scanf
118デフォルトの名無しさん:01/12/15 15:09
scanfのソースはどこで見れますか?
見るのではない 感じるのだ。
>>118
ハードディスクをscanしてください。
121初心者:01/12/15 15:29
以下の問題について考え方等を教えていただけませんでしょうか?
どのように考えれば良いのか分からず困惑しています。
よろしくお願いします。

1、キーボードから2つの整数を受け取り、小さい数から大きい数までの偶
数を表示するプログラムを作りなさい。受け取る数値が偶数でも
奇数でも処理できるようにすること。例えば、10と3を入力したら
4、6、8、10を表示する。

2、キーボードから0〜100までの数値を入力し、合計をsum
にもとめる。ただし、−999を入力したらゼロクリアして合計を
し直し999と入力したら合計を表示して終了するプログラムを
作りなさい。

3、キーボードから連続して数値を受け取り負の数が入力されたら
入力の終了としてそれまでに受け取った0または正の整数の中から
最大とと最小値を表示するプログラムを作成せよ。
ただし、最初の入力が負の数であった場合には最大値、最小値
ともにその負の数を出力するものとする。

4、キーボードから2つの整数を受け取り、小さい数から
大きい数までの奇数の和を表示するプログラムを作りなさい。
受け取る数値が奇数でも偶数でも処理できるようにすること。
例えば、10と3を入力したら3+5+7+9をプログラムないで計算し
24を表示する。また受け取った数値に0または負数が含まれる場合
や2つの数がともに同じ偶数の場合には0で表示するものとする。
122デフォルトの名無しさん:01/12/15 15:34
>>121
>以下の問題について考え方等を教えていただけませんでしょうか?

ずいぶん基礎的な問題だと思いますが、
たとえば1だと、どのあたりがわからないのでしょうか?
123揚げ足とり:01/12/15 15:36
>>121
>−999を入力したらゼロクリアして合計をし直し
ゼロクリアして合計って、ゼロ以外になんのかね(ゲラ

こんなとこに書く前に、隣に居る友達に相談ちなちゃい。
友達いないんでちたら、回線斬って首吊ってちね!
>>122
動かなくても自分なりに考えた答えを貼り付けるとか、
なんか、努力のあとを見せてくれよ。
匿名なんだから、恥をかいても平気だろ。
125124:01/12/15 15:40
間違えた。124は>>121への書き込みね。
126初心者:01/12/15 15:44
2の問題ですがsumをゼロクリアの間違いでした。
基礎的な問題というのは分かるのですが・・・
どう作って良いのかが分からないのです。
あきれてしまわれるかもしれませんが
なんとかアドバイスお願いします。
>>121
・キーボード入力を取る方法は分かりまちゅか?
・画面へ表示する方法は分かりまちゅか?
・ループとか条件式って、聞いたことありまちゅか?
・そもそもプログラム組んだことありまちゅか?

> どのように考えれば良いのか分からず困惑しています。
こういう場合は、
“息をするのも考えるのも面倒なので、お前らソースをウプしる!”
が正しい日本語の使い方です。

阿呆
>>126
手元に、ソースをコンパイルして実行する環境はありますか?
これくらい無かったら、絶望的です。

もし、無かったら答えをまるまる教えてくれるやさしい人の
登場をひたすら待つしかありません。
129初心者:01/12/15 15:52
プログラム組んだこがないので・・・
先が分かりません。
#incude <stdio.h>
void main (void)
{
int
130初心者:01/12/15 15:54
はい、lcpadがありますので
コンパイルはできます。
難しい問題を一つとくより
やさしい問題をたくさんときなさい
132初心者:01/12/15 15:59
分かりました。
どうもすいませんでした。
>>130
標準ライブラリのヘルプかマニュアルは持ってるか?

scanf() (藁
gets()
getchar()
prinf()

この辺見て、まず数値を受け取って、それを表示するプログラムを書いてみろ。
それが出来たらもう一度来い。
134初心者:01/12/15 16:03
C言語ではじめようという本でやってるのですが
gets()、getchar()というのは出てきてないようですが・・・
これしかないですが、できる限りやってみます。
それでは
135大ヒント:01/12/15 16:06
二つの数値を入力して、その間の数値を表示するプログラム。
偶数の判定を入れれば1の課題は完成。

#include <stdio.h>

int main()
{
int i,max,min,tmp;
scanf("%d", &min);
scanf("%d", &max);
if (min > max) {
tmp = min;
min = max;
max = tmp;
}
for (i = min; i < max; i++) {
printf("%d ", i);
}
return 0;
}
136初心者:01/12/15 16:28
>>133

こんな感じですか?

#include <stdio.h>
void main (void)
{
int m,n;
scanf("%d",&m);
scanf("%d",&n);
}
137初心者:01/12/15 16:40
>>135

判定というのはwhileとかforのことですよね?
>>137
もしもし!?あんた何歳?
while や for という英単語を見てどうして“判定”だと思えるのか、
持ってる本のif文って所を、小1時間読め。
条件演算子というのもあるが、素人にはお勧めできない。

あと、136は数値を受け取っただけで表示してないだろ、阿呆。
画面に出ているのは、入力した時の表示(エコーバック)だけでは?
139 :01/12/15 16:59
つーか、
printfとscanfのクローンをつくってみな。
意外につくれるから。
つか、宿題は宿題スレ逝けや。
http://pc.2ch.net/test/read.cgi/tech/1007902384/
141初心者:01/12/15 17:10
あ!すいません。
なんか勘違いしてたようで・・・
printf入ってませんでしたね。
宿題スレにいかさせてもらいます。
142デフォルトの名無しさん:01/12/15 17:11
>>89の意味がわかりません。
1バカ去って、また1バカ…
}は;をかねる
去るバカは追わず、来る馬鹿は許さず。
146デフォルトの名無しさん:01/12/15 17:49
C言語で2分木を扱う場合の質問はこのスレでいいですか?
それともアルゴリズム関係のスレ?
>>146
とりあえず、書いてみれば?
場違いなら蹴り出されるだけだし。
148Kusakabe Youichi:01/12/15 18:05
In article >>90, デフォルトの名無しさん/90 wrote:

> cat
> dog
> cow
> hors
> dog
> bird
> cat
>
> こういう感じで、一行に単語がひとつ書いてある
> テキストファイルを読み込んで、重複してある
> 単語を取り除いて、ユニークな単語数を数えると
> いうプログラムを作りました。
> いったんは完成したのですが、いろいろいじっている
> うちに、うまく動かなくなって、元にもどせなくなって
> しまいました。
> どうすれいいですか?

またしばらくおいておけばいいでしょう。
149Kusakabe Youichi:01/12/15 18:06
In article >>106, C初心者/106 wrote:
> #define SAMPLE "abcde"
>
> このような定義があり、
>
> if (string[0] == SAMPLE[0]) {
>
> と書かれていたのですが、define定数のこのような使い方は
> 一般的なのでしょうか?

#defineがどうのじゃなくて、展開した状態を考えてみればいいじゃん。
150デフォルトの名無しさん:01/12/15 18:06
>>147
それじゃ、質問させていただきます。

文書から読み込んだ単語のリストを2分木で扱いたいと考えているのですが、
ルートノードとノードの追加は処理が違うために
ルートノードをあらかじめ作成しておいてからそのルートにノードを追加していくという方法を考えました。
その時ルートノードにはなにを入れればいいのでしょうか。
151Kusakabe Youichi:01/12/15 18:07
In article >>117, デフォルトの名無しさん/sage/117 wrote:

> 「作ってわかるCプログラミング」に載ってるとか > scanf

目次ぐらい読め。
152Kusakabe Youichi:01/12/15 18:08
In article >>144, デフォルトの名無しさん/sage/144 wrote:

> }は;をかねる

本気にするやつが出てきそう:)
Kusakabeセンセは、何故に全文引用なんて迷惑千万な事をなさりやがるんですか?
154デフォルトの名無しさん:01/12/15 18:12
>>153
なさりやがる、に禿しくワラタ
>>151
> 目次ぐらい読め。
ご指摘、ありがとうございます。
でも、そもそも持ってないし。

なんで命令口調なんだろう。
# そんなに怒らなくてもいいのにー
156Kusakabe Youichi:01/12/15 18:23
In article >>150, デフォルトの名無しさん/150 wrote:
> その時ルートノードにはなにを入れればいいのでしょうか。

べつに何でもいいのでは?
たとえば、子が1つだけのノードの「もう一方のポインター」には
何をいれておくよていなのですか? それを考えれば
そうなやむことでもないことがわかるでしょう。

それでもわからなければ191ペイジを読みましょう。
157Kusakabe Youichi:01/12/15 18:24
In article >>153, デフォルトの名無しさん/sage/153 wrote:

> Kusakabeセンセは、何故に全文引用なんて迷惑千万な事をなさりやがるんですか

どこが全文引用なのですか?

わたしは必要な部分しか引用してないですよ。
158150:01/12/15 18:26
>>156
何の本の191ページですか?アヒル本?
159Kusakabe Youichi:01/12/15 18:27
In article >>155, デフォルトの名無しさん/sage/155 wrote:
> > 目次ぐらい読め。
> ご指摘、ありがとうございます。
> でも、そもそも持ってないし。

だから買えばいいんだって。
160Kusakabe Youichi:01/12/15 18:31
In article >>158, 150/158 wrote:
> 何の本の191ページですか?アヒル本?

表紙にあひるはついてませんよ(あ、小さいのがあるか)
161150:01/12/15 18:34
>>160
すみませんが、そんな本は持ってないです。
学生でお金がないので…。

いつか大金持ちになったら買うかもしれません。
162Kusakabe Youichi:01/12/15 18:36
In article >>161, 150/161 wrote:
> すみませんが、そんな本は持ってないです。
> 学生でお金がないので…。

じゃあ買うといいです。
>>150
とりあえず、cでのコーディング以前のアルゴリズムの話みたいなんで、
そっち系のスレ逝ったほうが良いかも。


>>157
> どこが全文引用なのですか?
148は80の全文引用だが、

> わたしは必要な部分しか引用してないですよ。
148に引用した範囲が回答に「必要な部分」であるとするなら(藁
“でも必要な部分しか引用してないですよ:)”
と返せるわけだ。
詭弁としても出来が悪い、3点。
164Kusakabe Youichi:01/12/15 18:40
In article >>163, デフォルトの名無しさん/sage/163 wrote:
> とりあえず、cでの(I紺筑?ロ五以前の(I悦剤惱渮の話みたいなんで、
> そっち系の(I准逝ったほうが良いかも。

文字化けしてますよ。

> > どこが全文引用なのですか?
> 148は80の全文引用だが、

どの部分だろう?
>>163
80違う、90鬱氏
166150:01/12/15 18:44
>>163
ありがとうございます。そっちに逝ってきます。

>>162
文章をもう少ししっかりと読んで欲しいのですが。
金がないから買えない、ということが通じなかったのですか?
また、買うとしてもよっぽど金がない限り買うことはないだろうということも
言ったつもりですが…。

一応ム板の推薦参考書スレを頼りにさせていただいていますので、
そこに紹介されていない本は買う気にならないです。
ましてや作者しか推薦してしない本など。

…愚痴&長文ですみません。逝ってきます。
167Kusakabe Youichi:01/12/15 18:47
In article >>166, 150/166 wrote:
> 文章をもう少ししっかりと読んで欲しいのですが。
> 金がないから買えない、ということが通じなかったのですか?

だからこそ買えばいいのでは?
そうすればお金ぐらい涌いてきますよ。

> 一応ム板の推薦参考書(I准を頼りにさせていただいていますので、

もじばけしてますよ。
168150:01/12/15 18:49
>>167
ごめんなさい。もはやあなたの文は理解不能です。
理論的に破綻してます…。

…誰かこの人の文を訳してくれる方はいませんかね?
(もしかしてkusakabe人工無能がレスしてる?もしそうだったら…鬱氏。)
>>168
>…誰かこの人の文を訳してくれる方はいませんかね?
一見、日本語の様に見えますが、実は全文文字化けしてます。
残念ながら原文の解読は難しく、そこからの翻訳も困難を極めております。
現在、ム板とマ板の住人による不眠不休の作業が続けられております。
もうしばらくお待ちください。
170Kusakabe Youichi:01/12/15 18:53
In article >>168, 150/168 wrote:
> ごめんなさい。もはやあなたの文は理解不能です。

おやまあ。もう思考停止しましたか。
けっこうほかのひとより早めですね。(じたばたしなくて利口だともいう^^)
171150:01/12/15 18:57
>>170
思考停止、ではなくて脳が強制終了したんです。
私は常識的な日本語しか理解できないので、日下部語がわからないのです。

できれば常識的な日本語で再度>>167を説明してください。
私のわからないところは、
「金がない」→「アヒル本を買う」→「金が湧いてくる」という一連の流れです。
とくにアヒル本を買うことでなぜ金が湧いてくるのかが全く理解できません。


…ちなみに、アルゴリズム関係のスレが見つからないんですが…誰か誘導してください…。
172Kusakabe Youichi:01/12/15 19:02
In article >>171, 150/171 wrote:
> 思考停止、ではなくて脳が強制終了したんです。

同じことでしょ。アクセス違反で、保護機構がはたらいたわけでしょ。

> 私は常識的な日本語しか理解できないので、日下部語がわからないのです。

いえ「理解すると都合悪いことになる」から例外が発生したわけでしょう。

> …ちなみに、アルゴリズム関係の(I准が見つからないんですが…誰か誘導してください…。

文字化けしてますよ。
173あぼーん:あぼーん
あぼーん
>>173
「高性能クサカベ辞書」と「クサカベレスキャンセラー」はありませんか、親切な人…
175150:01/12/15 19:07
>>172
…常識的な文章力のみならず、常識的な理解力すらない自称常識人なのですね。
どうせこのような事を書くと、「そういうことにしたいのですね」というレスが返ってくるんでしょうけど。
スレ荒れるのでこれ以上はレスしません。

>いえ「理解すると都合悪いことになる」から例外が発生したわけでしょう。
これあなたのことですね。
>>172

だから、「プログラム板」で、日本語の話題上げなさんな、
うとましき日下部陽一さんよ。
177Kusakabe Youichi:01/12/15 19:16
In article >>174, デフォルトの名無しさん/sage/174 wrote:
> 「高性能(I源桐泗ぢ辞書」と「(I源桐湍酬?ロ衝?凾タ」はありませんか、親切な人…

文字化けしてますよ。
178Kusakabe Youichi:01/12/15 19:17
In article >>175, 150/sage/175 wrote:

> >>172
> …常識的な文章力のみならず、常識的な理解力すらない

ということにしてしまえば、自分のまぬけさ加減に目をつぶることが
できるのですか? :)
179Kusakabe Youichi:01/12/15 19:17
In article >>176, デフォルトの名無しさん /sage/176 wrote:
> だから、「プログラム板」で、日本語の話題上げなさんな、

わたしはとくにやっていませんね。やっているひとにいったら?
180174:01/12/15 19:21
キタ━━━━━━(゚∀゚)━━━━━━ !!!!!
ありがとう!クサカベたん!!
誰からもムシされる私のボケに突っ込んでくれて。


>>150
> ルートノードとノードの追加は処理が違うために
> ルートノードをあらかじめ作成しておいてから
> そのルートにノードを追加していくという方法を考えました。
> その時ルートノードにはなにを入れればいいのでしょうか。
“何を入れれば?”と問われても…
枝(ポインタ)の値のこと?
単純に無効な値(NULLポインタ)とかでは、駄目なんですか?
181150:01/12/15 19:28
>>180
枝の値ではないです。ノードの文字列(中身?)です。
無意味なものを入れても、あとでトラバーサル&出力するときに
その内容が出てしまうのではないかと思いまして。
一応'\0'なら大丈夫…でしょうか?

やりかたが良くわからないので、まだコンパイルまで辿り着けないんです。鬱氏。
182Kusakabe Youichi:01/12/15 19:29
In article >>181, 150/sage/181 wrote:

> >>180
> 枝の値ではないです。ノードの文字列(中身?)です。
> 無意味なものを入れても、あとでトラバーサル&出力するときに
> その内容が出てしまうのではないかと思いまして。

ルートをダミーにしていまうのですか?
だったら191ペイジを読めばいいですね。
おじいちゃんって、本当にウザいね…。
誰にも構われず、独り言ばっか。
184Kusakabe Youichi:01/12/15 20:10
In article >>183, デフォルトの名無しさん/sage/183 wrote:
> 誰にも構われず、独り言ばっか。

と思いたいんでしょうね。
>>184
はいはい、おじいちゃん、レスはさっき付けたでしょう?
ここはもういいですから、寝室でお休みになってくださいな。
「トットトクダバレヨ、コノモウロウジジィガ」
186Kusakabe Youichi:01/12/15 20:16
In article >>185, デフォルトの名無しさん/sage/185 wrote:
> はいはい、おじいちゃん、レスはさっき付けたでしょう?

なるほど。こういうひとがあらしているのですね。
>>181
それでいいです。
操作されて問題の起こらない値を入れておけばなんでもよい。
\0でもいいし、ルートだということを識別できるシグネチャでもいい。
>>181
ゴメソ、前提条件が分からんのでアレだけど、

> 枝の値ではないです。ノードの文字列(中身?)です。
> 無意味なものを入れても、あとでトラバーサル&出力するときに
> その内容が出てしまうのではないかと思いまして。

作成時にルートを特別扱いしたのなら、解析時にも特別扱いってのは、NGなの?

> やりかたが良くわからないので、まだコンパイルまで辿り着けないんです。鬱氏。
設計で詰まってるのか、コーディングで詰まってのか、どっちよ?
189183:01/12/15 20:42
>>184
誰もKusakabe Youichiという人が
おじいちゃんなんて言ってないんですが。何であなたが反応してるんですか?

…そうですか、おじいちゃんだったんですか。
そんな自覚があったとは知りませんでした。いや、勉強になりました。
190Kusakabe Youichi:01/12/15 20:43
In article >>189, 183/sage/189 wrote:
> 誰もKusakabe Youichiという人が
> おじいちゃんなんて言ってないんですが。何であなたが反応してるんですか?

だれが反応するかとその内容は無関係です。

ただ、変に関係ないこと書いて荒らしているやつがいたので反応したまで。
191183:01/12/15 20:45
>>190
やっぱあなたおもしろいですね(w
これからもその調子で頑張ってください。応援してます。
192150:01/12/15 20:45
>>188
設計でつまっています…。
文章から得られた単語を新ノード作成関数に送り、
文章がEOFを返した時点で一覧表示したいと思っています。

解析時に特別扱いするのは構わないんですが、設計方法がわからないです…。
193Kusakabe Youichi:01/12/15 20:49
In article >>191, 183/sage/191 wrote:

> >>190
> やっぱあなたおもしろいですね

とか関係ないことかくわけですね。
194デフォルトの名無しさん:01/12/15 20:51
おじいちゃん、頑張って!
カンペキに負けてるよ(藁
195Kusakabe Youichi:01/12/15 20:52
In article >>192, 150/192 wrote:
> 設計でつまっています…。
> 文章から得られた単語を新ノード作成関数に送り、
> 文章がEOFを返した時点で一覧表示したいと思っています。
>
> 解析時に特別扱いするのは構わないんですが、設計方法がわからないです…。

なにがどうわからないのだろう?

191ペイジ読めばいいのに
196Kusakabe Youichi:01/12/15 20:55
In article >>194, デフォルトの名無しさん/194 wrote:

> おじいちゃん、頑張って!
> カンペキに負けてるよ

まだ関係ないことかいてるし。
197デフォルトの名無しさん:01/12/15 20:57
関数内で定義した構造体のテンプレートはその関数内でのみ有効?
>>196

>> おじいちゃん、頑張って!
>> カンペキに負けてるよ

>まだ関係ないことかいてるし。

また関係ないことかいてるし。
>>197
C++スレ逝け
http://pc.2ch.net/test/read.cgi/tech/1003832761/l50
つーか試せよ! 試せよぅ!!
200デフォルトの名無しさん:01/12/15 21:00
>>199

なんでC++?Cの構造体のことを聞いているんだけど。

試すのが面倒だから聞いたの。
>>192
デハキコウ
シンノードサクセイカンスウトハ
ドウイウショリヲオコナウノダ?
テンプレートはCじゃない。
試すの面倒なら死んでしまえ。
>>200
ハァ!?
> 構造体のテンプレート
ってのは何?templateの事ではないの?
てめぇの脳内単語を垂れ流すな!
おじいちゃんみたくなるぞ!!

> 試すのが面倒だから聞いたの。
例えば俺が答えたとして、それを信じるのかよ、お前は!?
自分で追試しるだろ?
だったら最初から自分でやれよ! やれよぅ!!
204デフォルトの名無しさん:01/12/15 21:06
>>203

教えて君をなめるなよ!!
194は確かにスレ違いなのだが(オレモナー)、ローカルルールには
> ・スレッドの内容に関係ない雑談や連続投稿にはsage推奨です。
とあるのだから196氏もsageでやってほしいな。
要するに200はスコープも理解できていないアホ。
しかも態度デカイ。逝ってよし。
>>205
きっと“はつみみ”だよ
で、今んとこアクティブなネタは2分木がどうとかいうのか?
この低レベルなやりとりが行われている場で質問しなきゃ
ダメな人って素質ないから止めた方がいいよ!
209Kusakabe Youichi:01/12/15 21:13
In article >>208, デフォルトの名無しさん/sage/208 wrote:

> この低レベルなやりとりが行われている場で質問しなきゃ
> ダメな人って素質ないから止めた方がいいよ!

その質問者に助言するレヴェルはその下ですか? :)
210205:01/12/15 21:15
しまった。ここはマ板じゃなくてム板だった。欝氏。
>>207
みんなはつみみだろうね。俺もはつみみだということにしたい。
211150:01/12/15 21:16
すみません。2分木の話をしてるものですが。
現在書いているソース等をHPに載せてみましたので、見ていただけないでしょうか。

http://www.geocities.co.jp/SiliconValley/1008/
ソースはまだ途中です…。
>>211
ショリには関係ないことだけど、関数プロトタイプをmain内に書くのって珍しいね。
普通は最初のほうにグローバルスコープで書くもんだけど。
213150=ぽてと:01/12/15 21:23
>>212
関数プロトタイプ…ですか?すみません、知らないので調べてきます…。
もしかしてメイン関数の中で関数宣言していることですか?
>>213
そう、
あと、いろいろへんだな。
MakeRootNodeで作成したルートノードは、この関数内でしか参照できないぞ。
MakeNewNodeも戻り値voidじゃだめだろ。
変数の宣言とスコープ(有効範囲)が理解できてないな。
216150=ぽてと:01/12/15 21:32
>>214
MakeNewNodeと関数のプロトタイプをメイン関数の中に書いているのは修正しました。
でも、ルートノードがMakeRootNode内でしか参照できないというのはよくわかんないです。
ポインタだから他の関数でも参照できる…というのは誤った認識ですか?
>>216
基本的に関数内で宣言した変数は、その関数内でのみ操作可能。
それに関数を抜ける時に開放される。

mainで使いたいのなら、その値をreturnで返すか、グローバル変数に格納する。
ローカル変数、グローバル変数はわかるか?
218217:01/12/15 21:39
さらにいうと、このプログラムはmainで
root = MakeRootNode( ...
ってかいてあるんだから戻り値を期待してるはず。
それなのにvoid MakeRootNode(...)じゃだめだろ。

なんだか、アルゴリズムの理解度よりもCの理解度が足りないな。
219150=ぽてと:01/12/15 21:42
>>217
ローカル変数は関数の中で宣言した変数ですよね。

グローバル変数は関数の外で宣言…だったと思います。
そうするとプログラムが稼動している間その変数が使えるというように認識しています。
>>213
俺がかくと、こんな感じカナ。

typedef struct tnode{
char word[64];
/* int count=0; */
int count;
struct tnode *left;
struct tnode *right;
}Node;

Node* makeNode(const char* const str){
/* ノード作成 */
return newNode;
}

Node* addNode(Node* node, const char* const str){
/* ノード追加処理 */
/* 必要なら、makeNode()を読んで新規に作成 */
return node;
}

void Traversal(const Node* const root){
/* 解析と出力*/
}

void main(void){
Node* root;
Node* node;
root=makeNode();
node=NULL;
while(...){
/* ファイル入力 */
node=(node, str);
}
Traversal(root);
}

次からは容赦なく阿呆よばわりするんで、よろしく。



>>214
> MakeNewNodeも戻り値voidじゃだめだろ。
まぁ、確かにvoidは駄目だろう(w
221150=ぽてと:01/12/15 21:43
>>218
それはただのミスです…。関数いじくっているうちに戻り値が出来てしまって。
>>220
鬱氏
×
root=makeNode();
node=NULL;


root=makeNode();
node=root;

氏んでくる…
>>219
だから、MakeRootNode内の Node *root;はローカル変数。
ローカルカル変数はこの関数内でのみ有効で、しかも関数を抜けるとなくなってしまう。
何らかの方法で、関数外に持ち出さなければならんのよ、わかる?
224150=ぽてと:01/12/15 21:46
>>220
ありがとうございます。参考に書き直してみます。
225150=ぽてと:01/12/15 21:48
>>223
関数を抜けるとなくなる、というのは気づいていませんでした。
その関数外に持ち出す方法がグローバル変数として宣言する方法ですね。
調べてからまた来ます。
226デフォルトの名無しさん:01/12/15 21:49
林春比古でも読めよ〜
227アモロ:01/12/15 21:52
コールバック関数なのですが・・・。
なんで、こんな解析しにくくわかりにくいモンを、わざわざ手間をかけてまで仕込むのですか?
素直に必要になったときに、関数を呼び出せばいいのではないのですか?
>>227
誰がいつどこで何のために呼び出すのかを考えよ。
それでも必要ないと思うなら使わなくてよい。
229自動翻訳:01/12/15 21:56
>>227
あなたの仰る通りです。
今の貴方に必要とされている技術レベルにおいては、
コールバック関数を使用する必要はないかと愚考いたします。

もし必要になったなら、その時コールバック関数をお使いください。


阿呆!
>>227
必要になったときに呼び出す関数がコールバック関数だろ
>>227
gtk のソースでも嫁。
ボタンウィジェットがあるとして、
ボタンがクリックされたときに行ないたい処理はどうやって書けば良い?
処理する関数をボタンウィジェットに関するソースに追加する方法では
そのたびに全てをコンパイルしなおす必要が出てくる。
しかも、汎用性のあるボタンウィジェットに対して、
そのプログラムオンリーの関数が混ざることになって奇麗じゃない。
232質問スレに非ず:01/12/16 00:14
ウサ晴らしをするスレです
正確に言うと、質問して、罵倒される為のスレです。
あと、たまにおじいちゃんが徘徊しているようです。
罵倒されるだけされて「結局聞いても聞かなくても同じ」だったと。
不備のある質問や、論外な態度での質問が罵倒されるのは、
BBS、ML、むろん現実世界でも一緒。
返答の言葉使いがある程度ぼかしてあるか、罵詈雑言になるかだけ。
236Kusakabe Youichi:01/12/16 11:38
In article >>233, デフォルトの名無しさん/sage/233 wrote:

> 正確に言うと、質問して、罵倒される為のスレです。

っていうかこのひと「罵倒」の意味をしらないっぽい。
ばとう ―たう 【罵倒】

(名)スル
口ぎたなくののしること。また、その言葉。「相手を―する」「―を浴びせる」

例)
君の言動って、かなり日下部入ってるよ!
238デフォルトの名無しさん:01/12/16 13:32
>>227
>素直に必要になったときに、関数を呼び出せばいいのではないのですか?

「どの関数を」呼ぶの?
つまり、gtkライブラリは、どの関数を呼べばイイと、どうやれば判るの?

挙動の殆どは、あるwidgetの「クラス」のコードで決められているが、
一部、ユーザー定義の挙動は、widgetの「インスタンス」単位でばらばらなわけ。
クラスの側からは個々のインスタンスの相違なんて知るよしもないから、
「どの関数」を呼べばいいかなんてさっぱり。
個々のインスタンス自体に手続きを仕込み、しこんであるという前提でそれを呼びだす、
という規約を作っておくのが上策。

コールバック関数って、常套手段じゃん。
処理の一部を未だ見ぬ未来のやつらに託すばあいに。
>>150
> main関数のNode *rootのところでparse errorを食らいます。
rootとnodeの宣言をstr[0] = '\0';の前に持って逝け。
240239:01/12/16 23:25
それ以外。

* makeNode()の引数にpはいらない

* なんでaddNode()でmakeNode()を使わない

* addNode()でp==NULLのときを考慮してるから、
ルートノードをあらかじめ作成しておく必要はない

* if (c!=isalpha(c)) ってなんだゴルァ

* 英字以外が連続したときのことを考えていない

* malloc()を使うときは#include <stdlib.h>しる

* strcpy()だとバッファオーバーランの危険がある

* ファイル名は固定じゃなくてargvからとれ。あるいはstdin
>>239-240
デムパ? デムパなの? (((( ;゚Д゚)))ガクガクブルブル

…150が>>211で逝ってたサイトに載せてあるソースに突っ込みいれてるのね。
ご苦労様、でもちょとビクーリしたよ。
242239:01/12/17 00:40
>>241
ごめんよ。
150の掲示板に書こうかと思ったらエラーになったもんで、こっちに書いてる。

ついでにもう一個バグ。

* 英字で終ったときに最後の単語がカウントされない

あとオーバーランはmain()の方でも起きそうだな。
ヌケのない質問してくる奴はそもそも自分で考えて解決するタイプなので
ここには来ません。
仮にそんな奴が来ても「自分が普段やっている手法と違う」とか難癖つけて罵倒します。
それが全てだ。
まあ何か罵倒できるエサを欲しがっている
エサくれくれ君の隔離の為にはこのスレあったほうがいい。
244Kusakabe Youichi:01/12/17 00:51
In article >>243, デフォルトの名無しさん/sage/243 wrote:
> 仮にそんな奴が来ても「自分が普段やっている手法と違う」とか難癖つけて罵倒します。
> それが全てだ。
> まあ何か罵倒できるエサを欲しがっている

「罵倒」の意味をわかっていない人っぽいなあ。
>>244
> 「罵倒」の意味をわかっていない人っぽいなあ。
それの何処がC言語に関連するのか分かりません。
ということにしたいのです、私は。

罵倒の方が主目的でも、何がしかの助言も同時に含まれているのではないかと。
バカと罵倒屋は使いようさ。
助言も与えず、スレの流れも一切無視した書き込みをする人間もいるけどね。
246Kusakabe Youichi:01/12/17 01:05
In article >>245, デフォルトの名無しさん/sage/245 wrote:
> それの何処がC言語に関連するのか分かりません。

っていうのもどう関連しているのかわからないですね。
247ぽてと:01/12/17 01:08
>>239
ありがとうございます。いま一生懸命直させてもらってます。
掲示板…書き込めませんでした?私は問題なく書き込めるんですが。
In article >>244, デフォルトの名無しさん/sage/244 wrote:
>> 仮にそんな奴が来ても「自分が普段やっている手法と違う」とか難癖つけて罵倒します。
>> それが全てだ。
>> まあ何か罵倒できるエサを欲しがっている

>私は「罵倒」の意味をわかっていない人っぽいと思い込みたい

なんだ、そうか。
249デフォルトの名無しさん:01/12/17 01:36
>>246
たのむから別のところへ逝ってくれ…。
ここは君の遊び場じゃないんだ…。会話もC言語と全く関係ないし…。
250Kusakabe Youichi:01/12/17 01:38
In article >>249, デフォルトの名無しさん/249 wrote:
> 会話もC言語と全く関係ないし…。

少なくともあなたのはいつもそうみたいですね:)
>>250
板違い。>>249の言うように雑談したいならラウンジにでも逝って下さい。
日本語が理解できるなら、の話ですが。
252Kusakabe Youichi:01/12/17 01:47
In article >>251, デフォルトの名無しさん/sage/251 wrote:

> >>250
> 板違い。>>249の言うように雑談したいなら

というのも関係ないですね。
253デフォルトの名無しさん:01/12/17 01:50
糞壁を追い出すプログラムを作りたいんですが、どうやってやればいいですか。
C言語で作りたいです。
でも糞壁は文章を脳内変換するので難しいです。
アドバイスください。
>251
白痴相手にマジレスですか? (放置推奨ですです
>>252
いえ、ルールの守れないおバカさんに注意しているという意味で、
大いに関係があります。その程度の反論も予想できないのですか?
という訳で、念のためにもう一度言っておきます。
雑談したいならラウンジにでも逝って下さい。
256Kusakabe Youichi:01/12/17 01:51
In article >>253, デフォルトの名無しさん/253 wrote:

> 糞壁を追い出すプログラムを作りたいんですが、どうやってやればいいですか。
> C言語で作りたいです。

なるほど。こうやって荒らすわけですかー
>>253
そう言う話はマ板でしようよ、あっちでおちょくってる方が楽しいと思うよ。
>253
おみとろんでフィルタなど書いてみてはいかがでしょうか?
あるいは、自動あぼーん機能のある2chブラウザを使う/作る
方法もあります。
40過ぎてこの厨房っぷりですよ。
もうね、アホかと馬鹿かと。。
260Kusakabe Youichi:01/12/17 02:01
In article >>254, デフォルトの名無しさん/sage/254 wrote:
> 白痴相手にマジレスですか?

とか関係ないこと書くのはOKなのですね? :)
261Kusakabe Youichi:01/12/17 02:02
In article >>255, デフォルトの名無しさん/sage/255 wrote:
> いえ、ルールの守れないおバカさんに注意しているという意味で、
> 大いに関係があります。

で、それに答えるのもOKなのですね? :)

> という訳で、念のためにもう一度言っておきます。

つまり「自分はいいの」の類ですね? :)
(; ・∀・)こいちぢかん問い詰めたい♪
In article >>261, デフォルトの名無しさん/sage/261 wrote:
>> いえ、ルールの守れないおバカさんに注意しているという意味で、
>> 大いに関係があります。

>で、それに答えるのもOKなのですね? :)

>> という訳で、念のためにもう一度言っておきます。

>「自分はいいの」

なるほど、自分はいいのか  :)
>>261
やはり、日本語が理解できませんでしたか。残念です。
では言葉も通じないようですし、雑談にならないうちに私もこの辺で。
放置推奨です。
人間としての誇りも尊厳も失った物体にレスする必要などありませんから。

こう書くと、またお決まりのセリフが出てくるんだろうなあ…。
「そういうことにしたいのですね:)」ってか。
266Kusakabe Youichi:01/12/17 02:15
In article >>265, デフォルトの名無しさん/sage/265 wrote:

> 放置推奨です。
> 人間としての誇りも尊厳も失った物体にレスする必要などありませんから。

とかいうのをいちいち書くのはOKですね? :)
>>266
誰に聞いてるの?
「こういうときの対処が学べる」と前向きに考えるがよいよいよいよい
269Kusakabe Youichi:01/12/17 02:17
In article >>267, デフォルトの名無しさん/sage/267 wrote:
> 誰に聞いてるの?

また関係ないことかいてますね:)
270対処:01/12/17 02:19
In article >>266, デフォルトの名無しさん/sage/266 wrote:

>> 放置推奨です。
>> 人間としての誇りも尊厳も失った物体にレスする必要などありませんから。

>とかいうのをいちいち書くのはOK

なんだ、OKなのか :)
271Kusakabe Youichi:01/12/17 02:21
In article >>270, 対処/sage/270 wrote:

> In article >>266, デフォルトの名無しさん/sage/266 wrote:
>
> >> 放置推奨です。
> >> 人間としての誇りも尊厳も失った物体にレスする必要などありませんから。
>
> >とかいうのをいちいち書くのはOK
>
> なんだ、OKなのか

ふむふむ。じゃあそうします。
やめれ〜〜〜、頭が混乱してくる〜〜〜。
なんだ、自問自答か :)
枯れ木も山の賑わいさね。
見て楽しい物ではないけど、
たまにつついておちょくったり、
サンドバック代わりにするにはちょうどいい。

今んところアクティブなネタも無いみたいだしね。
(埋もれてる?)
>>274
埋もれてるような気も。いくつか発掘してあげれば?
276239:01/12/17 03:03
>>247
書き込めなかったっつーか、新規書き込みとか返信をクリックするとこんなメッセージが。
Mozillaとw3mで試したんだが。

> Unable to Process Request
> 申し訳ありませんが、あなたの要求を正常に処理することが出来ませんでした。
> このメッセージは、データベースやサーバの混雑により表示されます。
> 深夜等の時間帯には非常に混雑いたしますので、日中等の比較的空いている時間帯に再度、お試しください。
>
> また、ブラウザ側のトラブルの可能性もございますので、ブラウザの設定の変更または別のブラウザでお試しください。
>>276
あんま細かい事言いたくないけど、
メアド晒してるみたいだし、DMした方が良いのでは?
そのCGIがぼてとさんがCで組んだ物なら別だけどさ。
278Kusakabe Youichi:01/12/17 03:16
In article >>277, デフォルトの名無しさん/sage/277 wrote:
> あんま細かい事言いたくないけど、

じゃあいわなきゃいいのに。
>>278
俺が言わなきゃあんたがネチネチいちゃもんつけんだろ!
阿呆!


今日始めて阿呆って言えたよ。
あぁ、スッキリ。
280Objective-Kusakabe:01/12/17 03:28
In article >>279, デフォルトの名無しさん/sage/279 wrote:
>>278
> 俺が言わなきゃあんたがネチネチいちゃもんつけんだろ!
> 天才!

文字化けしてますよ :)
281Kusakabe Youichi:01/12/17 03:29
In article >>279, デフォルトの名無しさん/sage/279 wrote:
> 俺が言わなきゃあんたがネチネチいちゃもんつけんだろ!

いいえ。そう思いたいのですか? :)
>>280
ヤメレ、ツボに入った。
笑い止まんね、なんだそのHNは(藁
>280はある意味天才(・∀・ )
284ムネヲ:01/12/17 10:10
>>281
あなたがいちゃもん付けたんでしょ?謝る所は謝らないと駄目だよあなた!!。
言ったよ言ったでしょ言ったんなら言ったって言いなさいよ言った☆)#MO$J!..$
そんな馬鹿な事が有りますかって言ってるんですよ
はっきりと「今失業してて暇なんです」って言いなさいよ!!
285Kusakabe Youichi:01/12/17 10:45
In article >>284, ムネヲ/sage/284 wrote:
> あなたがいちゃもん付けたんでしょ?

はつみみです。
286239:01/12/17 12:18
>>277
そうかも…。でも他の人は書けてるのかな。俺だけ?
今IEで試してもおんなじだったんだが。

>>150
* isalpha()の使い方を誤解している。
* ルートノードは、addNode()が返してるのを毎回nodeに代入してるだろが。
* elseはブロックになってない。Pythonじゃないんだから。
つーか一遍でも動かしてみたのか? これ絶対スタック壊すぞ。

本題とは関係ないけど、<stdlib.h>っていう風にエスケープ。
それとtraversalって名詞だよな。
>>150
んとね、問題を切り分けた方がいいんじゃないカナ?
ソース見た感じ、ファイル入力も動きそうにないし、
そもそもコンパイル出来ていないでしょ?

“ファイルから黄泉込まないと話にならない”なら、
2分木の事は置いておいて単語を黄泉込む処理を完成させる。

“そもそもの目的である2分木が先”なら、
文字列配列を用意してそこから2分木を作成してみる。

const char* dummyWords[] = {
 "ABC","DEF","GHI",NULL
};
const char** word;
word=dummyWords;
while(*word)
 node = addNode(*word++);

こんな感じカナ。

あとaddNode()の中で単純に再帰して戻り値を代入してるけど、
それじゃダメダメじゃないカナ。
今のままだと無限ループするし、ちゃんと枝の差し替えをしないと。

まだ色々あるけど一つ一つ解決して行く方がいいんじゃないカナ?
288ぽてと:01/12/17 20:15
>>286 >>287

ご指摘のとおり、まだコンパイルすら出来ていません。
2分木の概念は分かるのですが、コーディング能力が全くついていっていないという感じです。
K&R引っ張り出してそのあたり勉強しなおしてきます…。

あと、>>287氏の通り、機能ごとに少しずつ作成していくことにします。
まずは単語を読み込むプログラムを作成します。
289239:01/12/17 22:35
>>287
コンパイルできないのは、ちゃんとコンパイラのエラーメッセージ見れば直せ
ると思う。単なる凡ミスだから。

> あとaddNode()の中で単純に再帰して戻り値を代入してるけど、
> それじゃダメダメじゃないカナ。
> 今のままだと無限ループするし、ちゃんと枝の差し替えをしないと。
いや、これは大丈夫。要するに、部分木と挿入する要素を受け取って、新しい
部分木を返す関数なんだから。

とりあえずバッファオーバーランとかを置いておくと、今まずいのはmain()で
のisalpha()やiの使い方。isalpha()はマニュアルなりなんなり調べてもらう
として、単語を登録したあとでiがどういう値を取ることになるか考えてみる
べし。
290デフォルトの名無しさん:01/12/17 22:45
1〜10の乱数を発生させる
関数ってどうやって作ればいいのですか?
>>289
> > あとaddNode()の中で単純に再帰して戻り値を代入してるけど、
> > それじゃダメダメじゃないカナ。
> > 今のままだと無限ループするし、ちゃんと枝の差し替えをしないと。
> いや、これは大丈夫。要するに、部分木と挿入する要素を受け取って、新しい
> 部分木を返す関数なんだから。

オレも最初はそう思ってた。
rootノードがどうとか最初に逝ってたし。
単純化すれば、
Node* addNode(Node* node, const char* str) {
node->right = makeNode(str);
node->right->left = node;
return node->right;
}
こんな感じだと。

でも130さんが書いたソースを見ると、
strcmp()の値でleftとrightに振り分けようとしてる。
ようはstrcmp()の値を基準にソートした状態を作りたいんではないかと。
でなければ、addNode()を再帰呼び出しする必然性もないし。

オレのうがち過ぎか?
どうよ、>>150さん?
>>290
乱数か、難しいな。
擬似乱数なら標準ライブラリにも含まれているが。
まず神のサイコロを用意する。
そしてサイコロを振る神の手を…

つーか、マニュアルでrand()を調べろ。
rand()を使わず自力で擬似乱数を発生させたいなら、
「擬似乱数」と「アルゴリズム」で検索すれば
嫌というほど見つかるでしょう。
293デフォルトの名無しさん:01/12/17 23:02
294デフォルトの名無しさん:01/12/17 23:08
>>290

rand() % 10 + 1;
295ぽてと=150:01/12/17 23:15
>>291>>289
>strcmp()の値でleftとrightに振り分けようとしてる。

その通りです。strcmp()の値によってノードのカウンタ値を増やすか、またはノードを
追加(makenode())するのか判断しようとしました。
そうすれば2分探索木が作れるだろうと思って。


>単語を登録したあとでiがどういう値を取ることになるか考えてみる
べし。

iは先ほど気づきました…。
単語をaddnode()に送った後に0にする必要がありましたね。

また、if (!isalpha(c))ですむことにも先ほど気がつきました…。
296デフォルトの名無しさん:01/12/17 23:16
>>294
それだと乱数の周期が10程度になっちまうぞ。

普通は
(int)(rand() / (RAND_MAX + 1.0) * N) + 1
だろ

浮動小数点使うのがいやならせめて
rand() >> 20 % 10 + 1
とでもしとけ
297290:01/12/17 23:16
>>292,293,294
ありがとうございます。なんとか出来そうです。
検索の仕方も分からない厨房で申しわけありませんです。

>>294
しかし、この乱数って、等確率ではないような…
ほぼ、等確率ってことでしょうか?
298デフォルトの名無しさん:01/12/17 23:19
>>296
>それだと乱数の周期が10程度になっちまうぞ。

そんなことねーよ。
どこの処理系使ってんだよ。
>>298
(´-`).。oO( いきがる前に296さんの式の意味を考えてみようよ… )
300デフォルトの名無しさん:01/12/17 23:29
>>299
rand()%10 で周期が10が10になる処理系ってどれですか?
教えてください。
10年昔の処理系を挙げて、こんなのもあったって言うのは
無しですよ。
301デフォルトの名無しさん:01/12/17 23:31
乱数の周期が10って、11回実行したら1番目に戻るってことでしょ。
だったら、30回くらい実行して紙にメモして表作れば白黒はっきりするよね。
302デフォルトの名無しさん:01/12/17 23:34
>>300
だけど、rand() % 10 というのはわりと良くない方法だよ。
なぜかというと、下位ビットの方は、確かに乱数に周期性
が早く訪れてしまうから。
環境依存だけど、JavaとANSIのCだと結構顕著だったり。

なるべく、上位の方を使うように工夫するのが
どんな環境でも上質の乱数を得るコツ
303デフォルトの名無しさん:01/12/17 23:41
>>296
ちなみに、rand() >> 20 % 10 + 1 をVC++でやると、
周期が1の乱数(?)が生成されます。

>>302
おれって、「n / 2 より n >> 1 のほうが速いぞ」って
初心者にアドバイスするようなもんです。
ほんとうに上質の乱数がほしいなら、もっときめ細かい
話をしましょう。
304303:01/12/17 23:43
>>303
間違えた。
×おれって、「n / 2 より n >> 1 のほうが速いぞ」って
〇それって、「n / 2 より n >> 1 のほうが速いぞ」って
305デフォルトの名無しさん:01/12/17 23:45
http://i.kebi.lycos.co.kr/~artkebi/whi.html

↑の仕組み教えてください
306デフォルトの名無しさん:01/12/17 23:47
ポインタのポインタがわかりません。お前ら俺に詳しく教えやがれ!
307299:01/12/17 23:48
>>300
なぜそんなに喧嘩腰?
“周期が10程度”っていうのは、表現として的確でないとは思う。
でも、せっかくrand()が0以上RAND_MAX(未満? 以下?)の値を返しているのに、
単純に剰余を取ってしまうと、10進下一桁しか利用しなくなるでしょ?
だから“296さんの式の意味を考えてみようよ”と言ったんだけど。

個人的意見を言わせてもらえるなら、
“自分の意見最高完璧、他人の意見は検討の余地無し”
って輩はプログラムなんぞするな!
というか周囲の人間の邪魔でしかない、一生引き篭もってろ!!
308デフォルトの名無しさん:01/12/17 23:50
>>306
友達の友達はみんな友達
>>301
VC++6で rand()%10+1 の実行結果。周期は10ではない。
6 7 6 5 5 5 9 3 10 10
1 6 5 4 10 7 9 2 10 2
7 2 1 1 6 8 7 10 2 2
9 3 9 6 4 8 9 3 6 5
7 1 5 2 10 6 5 6 4 10
周期というな。言葉の意味からして違うぞ。
確立といえ。
>確立
( ´_ゝ`)プッ
>>307
>なぜそんなに喧嘩腰?

私はケンカ腰じゃないよ。そちらこそ感情的になってない?

>“周期が10程度”っていうのは、表現として的確でないとは思う。

表現が悪いとか、そういうレベルではないと思うが。
「周期が10」だと、ほとんど乱数として使えないし。
何の検証もなしに標準関数を使うということなら、
上位桁とっても、質が良くなるかどうか分からないし。
実際 >>296 のアドバイスは、かなり危険だし。
>>307
>というか周囲の人間の邪魔でしかない、一生引き篭もってろ!!

この程度のツッコミで、取り乱す人間は2chは向かないと思うー。
オマエモナー
>>310
ネタか?
316デフォルトの名無しさん:01/12/18 00:20
C万背ーヽ(´ー`)ノ
>>303
VCだとRAND_MAXが15bitだからな。
つーか、一般人にとっては周期がどうのなんてどうでもいいんだよ。
ただ関数呼べばなんか数字が返ってくればそれでいいんだよ。
>>318
(rand() >> 20) % 10 + 1

この式を使って、周期1の乱数でも使っていてください(屁
320デフォルトの名無しさん:01/12/18 00:30
>>316はアメリカ人並の合理主義
>312
10程度っていうのは10のオーダーってことだろ。
>>321
10のオーダー?
O(10)←これ?
わからん。
>322
それは数学。
324Kusakabe Youichi:01/12/18 02:17
In article >>290, デフォルトの名無しさん/290 wrote:

> 1〜10の乱数を発生させる
> 関数ってどうやって作ればいいのですか?

「疑似乱数」ですよね?
325Kusakabe Youichi:01/12/18 02:19
In article >>302, デフォルトの名無しさん/302 wrote:
> だけど、rand() % 10 というのはわりと良くない方法だよ。
> なぜかというと、下位ビットの方は、確かに乱数に周期性
> が早く訪れてしまうから。

それはかなりまぬけな実装ですね。

> 環境依存だけど、JavaとANSIのCだと結構顕著だったり。

え、Javaのほうは実装きまってるけど(いちおう)、
ANSI Cではその関数の実装方法まで決まってたっけ?

> なるべく、上位の方を使うように工夫するのが
> どんな環境でも上質の乱数を得るコツ

って、% 10 で周期性が(実用上)めだっちゃう実装って...。
326290:01/12/18 02:30
>>324
サイコロみたいに
それぞれが同じ確率で発生するもの
が作りたかったんですけど、簡単な話じゃ
なかったみたいで…もう、ついて逝けない…鬱だ氏脳。

一応ことわっておきますと、僕はまだ勉強中の
初心者です。わかると思いますけど。
今は、主にVC++使ってます。
327デフォルトの名無しさん:01/12/18 02:35
>>326

ヘルプで、rand() と srand() を調べればいいじゃん。
それで rand() % 10 + 1 でOKだけど。
328239:01/12/18 03:22
>>291
二分木ってのはなんらかの順序で振り分けるのが前提だが。

すまんが、何を指してダメといってるのかよく分からん。
addNode()の戻り値ってのは常に(ソート済みの)二分木のルートのはず。
実際0.04を少し手直しした奴はちゃんと動いたよ。
そのときのaddNode()は今アップされてる0.05改定版のと事実上同じだし。

>>150
この規模だとあんまり関数を分けるメリットを感じないかも知れないけど、
機能分割というのは基本だからきちんと考えるようにしたほうがいい。

あと重箱の隅だが、TraversalNode()よりもtraverseNode()の方が一般的と思われ。
つーかTraversalは名詞じゃなくて形容詞だった。欝。
>>326 は検索エンジンの使い方さえ知らないマヌケです
>>328
> 二分木ってのはなんらかの順序で振り分けるのが前提だが。
おっしゃる通りっす、私が指摘したのは見た時点でのソースに対してです。
(最新のソースはまだ見てません…)

> addNode()の戻り値ってのは常に(ソート済みの)二分木のルートのはず。
私が見た時点のソースでは再帰呼び出ししているaddNode()の戻り値を
引数として渡されたnodeのleftやrightにそのまま代入してた。
それでは駄目だよという意味で枝の差し替え云々言ったんです。
331田代:01/12/18 23:09
FA 40 74 0B

という4バイトのバイナリファイルを

char c[4];
fp = fopen( "hoge", "rb" );
fread( c, 1, 4, fp );
printf( "%u %u %u %u\n", c[0], c[1], c[2], c[3] );

とやっているだけなのに、結果は

4294967290 64 116 11

となってしまいます。。。
何故 c[0] だけこんな変な値になってしまうんでしょうか?

250 64 116 11

にするにはどうしたらいいんでしょうか…。
332デフォルトの名無しさん:01/12/18 23:12
unsigned char c[4],じゃだめなん?
333デフォルトの名無しさん:01/12/18 23:40
もしくは%d
334333:01/12/18 23:42
ごめん。まちがえた。
逝ってくる。
>>332
ありがとうございます。直りました。
つまるところオーバーフローだったということなんですね。。。
符号拡張、なんでないの?
337デフォルトの名無しさん:01/12/19 00:48
conio.hってなんですか?
本の例題に載っていたソースをコンパイルしたら、これがないって
文句言われました。
本のソースには当たり前のように載ってるんですが。
ファイルを探して中みりゃわかる。
339デフォルトの名無しさん:01/12/19 01:06
>>337
昔のコンパイラで使われたた、非標準のヘッダーファイルだね。
340Javaがわからん370:01/12/19 01:07
>>337
getch();
使ってるからじゃない?
conio.hもincludeしてみてください。
341デフォルトの名無しさん:01/12/19 01:08
#include <conio.h> //getch関数などのコンソール機能の定義
コンソール入出力関数(conio.h)
関数定義 機能
int getch(void) キーボードから1文字をエコーバックなしで読み込む
int getche(void) キーボードから1文字をエコー付きで読み込む
int putch(int) 画面に文字を出力する。
>ファイル取り込みで、conio.hを入れようとしましたが、
>(#include<conio.h>と記入した)
>そのファイルは存在しないとメッセージが出ました。
うろ覚えですが、それって DOSのコンソール入出力ライブラリのヘッ
ダファイルじゃないですか?
#教科書の選択を誤ってらっしゃるのかも
ないっつってんじゃん。
343デフォルトの名無しさん:01/12/19 01:16
>>341
「改訂C言語によるはじめてのアルゴリズム入門」という本の中の例題です。
第二版は平成13年とありますが、第一版は平成4年のものです。
図書館で借りてきたものなので、古い本だと思います。

一応インクルードは試みているんですが…探してみたらなんか違うところに
ヘッダファイルが置いてあるみたいです。
344Kusakabe Youichi:01/12/19 04:10
In article >>337, デフォルトの名無しさん/337 wrote:

> conio.hってなんですか?
> 本の例題に載っていたソースをコンパイルしたら、これがないって
> 文句言われました。

べつの本にすれば?

> 本のソースには当たり前のように載ってるんですが。

何て言う本ですか?
345239:01/12/19 16:34
>>330
一度最新のを見てくれ。たぶんaddNode()については納得いくと思うから。

それよりも問題はGetWord()だな…って、なんでmain()の中はgetword()なんだYO。

ツッコミどころ満載だが、細かいところから。

> int GetWord(const char* str, int i, char **word){
>   char c;
>   for (l=0; (c=str[l])!='\n' && (c=str[l])!=EOF ;l++){
文字列の終端はEOFじゃないし、charをEOFと比較してはダメ。

>     tolower(c);  /*大文字→小文字*/
tolower()は副作用を持たない。

>     if (!isalpha(c) && c=='\''){ /*cが英文字の時*/
これじゃc=='\''のときしか成立しない。
346239:01/12/19 16:34
次main()。

>   while ((c=fgets(str,512,fp))!=NULL);
ループの中が空だし、WORDMAXしかないstrに512も読んじゃいかん。

>   i=getword(str, i, word);
配列とポインタは違う。多重配列の場合、もっとも上位(宣言のときの左側)の
配列だけはポインタに暗黙のうちに変換されるが、その下は一致しないとまず
い。

>   for (i=0; *word[i]<=len ; i++)
この条件は何を意図してる?

>     root=addNode(&root, *word[i]);
rootはNode*じゃないからこの代入はできない。
addNode()に関してはいろいろいわれて混乱してるのかも知れんが、
少なくとも0.04のは正しい(はず。残してないからよく分からんが)。

getword()に関しては、0.06の仕様よりも前の0.05改訂版の方がいいと思う。
fpを渡す必要はあると思うが。
0.06のGetWord()は複雑なわりにメリットがない。というかデメリットばかり。
347 :01/12/19 18:38
整数型の0、1の集合を一文字づつ配列(inputdata=[14][i])に入れたいのですが
これ ↓ では(.datファイルを書く)効率が悪くて悩んでいます

E.dat
0
0
1
0
0
0



0
0

C中のソース
fp=fopen("E.dat","r");
for( i=0;i<256;i++)
{
fscanf(fp,"%s",c);
inputdata[14][i]=atoi(c);
}
fclose(fp);
348 347:01/12/19 18:45
できればdatファイルはこういう形式が扱えると非常に便利なんですが…
0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0
0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0
0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0
0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0
0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0
0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0
0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0
0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0
0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0
0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0
0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0
0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0
0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0
0 0 1 1 1 1 1 1 1 1 1 1 1 1 0 0
0 0 1 1 1 1 1 1 1 1 1 1 1 1 0 0
0 0 1 1 1 1 1 1 1 1 1 1 1 1 0 0
e.dat:0100001110001010100111001
for( int i=0; i<256; i++ )
{int ch = fgetc(fp);
 if( ch == '0' || ch == '1' )
  inputdata[14][i] = ch - '0';
}
>>347
> (.datファイルを書く)効率が悪くて悩んでいます
効率が悪いって何?
> fscanf(fp,"%s",c);
E.dat
0 0 0 0 0 0
でも良いはずだが?
351デフォルトの名無しさん:01/12/19 19:06
C,C++で
ウィンドウズ用のプログラムを学んでますが、MessageBoxで変数の値を表示することは可能ですか?
出来ればその方法もお聞かせ願いたいです.
もしくはMessageBox並に簡単に扱えて変数の値をすぐに表示できるような命令があれば教えてください.
352デフォルトの名無しさん:01/12/19 19:10
>347
せっかくビット演算とかあるんだから、バイナリ形式で書き込んだ方がいいと思うが。
00000001 = 0x01
00000010 = 0x02
00000011 = 0x03
  ・
  ・
  ・
11111111 = 0xFF
を1バイトずつ置き換えて書き込んでいく。
バイナリエディタじゃないと読めないけど、効率はいいよ。
353 347:01/12/19 19:17
書き方が下手糞でした…
理想的なのは>>348の"1" "0"を一文字づつ整数の配列に入れていきたいの
ですが
354デフォルトの名無しさん:01/12/19 19:28
>353
fread() , fwrite()
355デフォルトの名無しさん:01/12/19 19:43
>351
MessageBox()のままだと変数の表示はできない。
printf()みたいな可変引数で表示できるMessageBox()を自分で書けばよいです。
サンプル↓
#include<windows.h>
void test(unsigned char *s1,...){
 unsigned char s2[256];
 unsigned char *p;
 p = (unsigned char *)&s1 + sizeof(s1);
 vsprintf(s2,s1,p);
 MessageBox(NULL,s2,"MessageBox",MB_OK);
 return;
}
>355
おお、ありがと〜やってみるよ。
>>351

#include <stdarg.h>
#include <stdio.h>

int message_box(const char* caption, const char* format, ...)
{
char msg[256];
va_list va;
va_start(va, format);
vsprintf(msg, format, va);
va_end(va);
return MessageBox(NULL, msg, caption, MB_OK);
}

message_box("スレ違い", "%sのスレとかで聞くべき", "Win32API");
358デフォルトの名無しさん:01/12/19 20:41
%p の p ってなんの略なの?
pointer
360357:01/12/19 20:46
#include <windows.h>忘れてた…。

>>355
stdarg.h使え。
361デフォルトの名無しさん:01/12/19 20:48
ピーチク
362Kusakabe Youichi:01/12/19 20:50
In article >>357, デフォルトの名無しさん/sage/357 wrote:
> message_box("スレ違い", "%sのスレとかで聞くべき", "Win32API");

なんで連体形なんだろう。
363351:01/12/19 21:03
いや、スレ違いでもまともにこたえてくれたことに結構感激な俺はあまちゃんですか?

355さんのプログラムって自分がメッセージボックスで表示したい変数がS1で
それをvprintfでs2に格納した後、pで領域を決めてそれをメッセージボックスで表示しているって意味なのかな?
vprintfの2番目の引数ってconst charってかいてあるけど、もし表示したい変数の型がintだったら
無理なのでしょうか?
´>351は可変長引数についてもっと勉強しる!
365デフォルトの名無しさん:01/12/19 21:39
366ぽてと:01/12/19 21:51
>>345
すみませんが、いまものすごく忙しくて更新できない状態です…。
明日また考え直してみます。
getword()にファイルポインタを渡しちゃっていいんですね?
それがまずいのかと思ってあんなわけのわからん形にしてました。
ファイルポインタを渡して…さてどうしてやろうか(藁)
>>355
凄いコードだな。
>>364
まず、「*をちゃんと見ろ」つーべきではあるまいか。
369357:01/12/19 23:12
>>362
連体止め。いーじゃん別に五七五じゃなくたって。
370デフォルトの名無しさん:01/12/20 01:32
アホい質問でホントすいません
char s[2000];
の1100〜1115の文字を取り出したい場合どうすればいですか?
printf("%s",s);
で確認すると全部出るんですけど部分的に見ようとして
printf("%s",s[1000]);
とかするとメモリがreadになることはできませんでしたといわれます
371デフォルトの名無しさん:01/12/20 01:38
char c = s[1116] ;
s[1116]='\0' ;
printf("%s", s+1000) ;
s[1116]=c ;
>>370
文字列のアドレスを指定しなきゃだめ。
printf("%s", &s[1000]);
表示の終端は文字列のデリミタ\0。
>>370
> アホい質問で
もっと日本語を勉強しる!!
>>370
printf("%.16s", &s[1000]);
printf("%.*s", 16, &s[1000]);
>>370
1100〜1115の文字全部なら
fwrite(&s[1000], 1, 16, stdout);
かなぁ
こまかいことだが、1100〜なら &s[1100]な。
>>376
おぉ。軒並まちがっとるじゃん
378 :01/12/20 11:44
関数が正常に終了した場合戻り値として普通1を返すもんですかそれとも0を返すでしょうか?
>>378
お好みで、どちらでもどうぞ。
!foef(fp) の ! を心の中で「びっくり」と読んでいますが
問題ありませんか?
>>380
問題ないですね。
charをチャーと言ってしまいますが、問題ですか?
>>380
foef?
>>378
C/C++ならば正常終了の場合は0を返すべきだ。
多くのCの標準関数は正常終了の場合、0を返している。

# parlの場合は逆
>>382
問題ないです。
>>384
>多くのCの標準関数は正常終了の場合、0を返している。

うそつかないでください。
387デフォルトの名無しさん:01/12/20 13:32
>>386
じゃあなにがウソなのか書くのが礼儀。
おまえはアホで礼儀知らずなのか。
それともアホで常識知らずなのか。
アホじゃないのか・・・?
証明求む。
388Kusakabe Youichi:01/12/20 13:42
In article >>387, デフォルトの名無しさん/387 wrote:
> じゃあなにがウソなのか書くのが礼儀。

あたらしい礼儀を発明したのですか? :)

# 特許とれるだろうか?
389デフォルトの名無しさん:01/12/20 13:42
>>387
>証明求む。
自分はなにの根拠も提示しないで発言するのに、
人にそういうことを望まないように。
390デフォルトの名無しさん:01/12/20 13:47
>>388
あれは礼儀の定義

>>389
俺は「何の」根拠を出せばいいの?
バカかお前は。
>>387
>多くのCの標準関数は正常終了の場合、0を返している。

あんた、これを本気で行ってたのか(^^;
初心者にうそを教えてからかってたのかと思ってたよ。
>>390
>俺は「何の」根拠を出せばいいの?

ふーん。根拠なかったんだ。
393387,390:01/12/20 13:50
>>391
あ、勘違いしてるみたいだけど>>384は俺じゃないし
別にその内容を肯定も(否定も)していない。
>>386の中途半端な書き方がムカついただけの第三者だよ。
394387,390:01/12/20 13:51
>>392
だから「何の」根拠を出せばいいのか言え。
言えないだろ?
395どうでもいいが:01/12/20 13:56
技術と関係ない部分で、言えとか言わないとかやめて欲しい。
どうしてもやりたいなら、せめてsageでね。
396387,390:01/12/20 13:58
>>395
失敬失敬。反論も即ではないみたいだし、めんどいのでもう落ちます。
>>393
>別にその内容を肯定も(否定も)していない。

技術(?)の議論からは逃げて、礼儀がどうとか言うだけかよ。
どうしようも無いやつだな。
>>397
そういうアンタも結局グチるだけか(w
この板の住人のレベルも落ちたな・・
399ふふふ:01/12/20 14:12
>>398
おいらは煽り専門だからね。
もう少し、ためてからいろいろ言おう思ったけど、
その前に相手がにげちゃった。
>>399
大体議論屋なんて短気なんだから
即レスしてあげなきゃ逃げるに決まってるじゃないかー
と 何もしなかったのに言ってみる。
しかし。。。 不毛だなー (´∀`;)
と言うか多くの?標準関数でそんなボコボコ異常終了されたら
困るんだけど (^^;
低レベルな間違い言ってる厨房ほど、ツッコミを入れられた
ときに逆ギレする法則 と言ってみる。
>>402
落ちるといってた男をなんとかして呼び戻そうとしているに新二千円札5枚
404デフォルトの名無しさん:01/12/20 14:48
おれはどーも
if(foo()){
 // エラー処理
}
つーのには、なじめない…
>>401
386の文意を汲み取ってやれば「正常終了/異常終了がある関数の多くが」じゃないの?
まあ、正常終了で0を返すより値を返す関数が多いが。
406384:01/12/20 15:13
おっ、すごいことになってる

正確に言うとCの標準関数で正常終了というステータスを返す関数は多くない。
str系,mem系は比較系関数以外は第一引数のポインタを返すし、
is系は正常終了ではなく真偽値を返すものだし、
ファイルIOは書き込んだ/読み込んだ数だし...
fopen, mallocは異常終了の場合、確かに0を返すけど
俺はNULLを返すと思いたい。

で数少ない正常終了というステータスを返す代表的な関数としては
fclose, fflush, fseek, system
でこれらは全て正常終了の場合、0を返す。

# POSIXを含めるともう少し多くなる。

で、実際Cで正常終了を0以外にしている人っているの?
俺はそんな奴はマクロを小文字で書くぐらい違和感を感じるけど
407デフォルトの名無しさん:01/12/20 15:18
char *p = "ABC";

*p = *(p+1);

↑これをUNIX機で実行するとセグメント例外(コアダンプしました)となります。
でも、ノートPCで実行すると通ります。なんでですか?教えて下さい?
408Kusakabe Youichi:01/12/20 15:22
In article >>407, デフォルトの名無しさん/407 wrote:

> char *p = "ABC";
>
> *p = *(p+1);
>
> ↑これをUNIX機で実行するとセグメント例外(コアダンプしました)となります。

まあ、そうでしょうね。

> でも、ノートPCで実行すると通ります。なんでですか?教えて下さい?

通るっていうのは "BBC"ってなるのですか?

K&Rの訳本の236ペイジを読めばいいのでは?
409デフォルトの名無しさん:01/12/20 15:26
>>406
>で、実際Cで正常終了を0以外にしている人っているの?

「ライティング ソリッドコード」って本だと、0というか、
bool値で正常・異常を返すようなスタイルを薦めてるね。
410Kusakabe Youichi:01/12/20 15:33
In article >>409, デフォルトの名無しさん/409 wrote:
> 「ライティング ソリッドコード」って本だと、0というか、
> bool値で正常・異常を返すようなスタイルを薦めてるね。

っていうことはtrueが正常でfalseがエラーですか?
(すると逆になりますね)
411デフォルトの名無しさん:01/12/20 15:38
正常か異常かの2種類だけ返すのならBOOL値でTRUEで正常。
たくさんの種類を返すのなら0が正常、1がxxxエラー、2がyyyエラーとか?
412384:01/12/20 15:42
>>409
> 「ライティング ソリッドコード」って本だと、0というか、
> bool値で正常・異常を返すようなスタイルを薦めてるね。

C99だとbool型があるんで、ありかも。
# _Boolはダサイが

でもそうなると正常終了は「真」なのか「偽」なのか?
今までのスタイルを通すと正常終了は「偽」にならざる得ないけれど、
正常終了が「偽」っていうのもなんか変だ。

# そもそもステータスを返すのが変、例外をthrowしろというのは無し
413Kusakabe Youichi:01/12/20 15:45
In article >>411, デフォルトの名無しさん/411 wrote:

> 正常か異常かの2種類だけ返すのならBOOL値でTRUEで正常。

正常っていうか「isxxxx」系のはtrue/falseでわかるんだけどねえ。
414Kusakabe Youichi:01/12/20 15:46
In article >>412, 384/sage/412 wrote:
> C99だとbool型があるんで、ありかも。
> # _Boolはダサイが

ちゃんとboolも#defineされてますよね。
415デフォルトの名無しさん:01/12/20 15:47
(ここに書かれたことにレスをつけてはいけません.)
416Kusakabe Youichi:01/12/20 15:49
In article >>415, デフォルトの名無しさん/415 wrote:

> ここに書かれたことにレスをつけてはいけません

レスって何ですか?
417デフォルトの名無しさん:01/12/20 15:52
Caml is a strongly-typed functional programming language from the ML family. Objective Caml and Caml Light are two open source implementations of Caml developed at INRIA Rocquencourt, projet Cristal.
>>406
> で、実際Cで正常終了を0以外にしている人っているの?
俺は正常/異常の二値しかない場合には関数型を BOOL にして TRUE, FALSE を返してる。
正常で 0 を返す場合には型は int にして区別しておく。

個人的には、正常/異常の区別と正常時の戻り値をまとめて返すのはやめて、代わりに

 正常/異常       戻り値
 関数で処理した結果  引数 (ポインタ渡し)

で処理した方がいいと思ってるけどね。どうも異常値を encoding する戻り値は、エラーチェックを
忘れられる運命にあるようで、これに絡んだバグ取りに時間を使ったことが何度か。

あと標準 C ライブラリは、当時の時代背景を考えれば仕方ない面があるけど、いまだと「ちょっ
となぁ」と思うインターフェースも多いから、それをもって「普通」と主張するのはどうかと。gets() や
sprintf() は言うに及ばず、1 バイト取得して結果を返すのに

 int getchar()
 // エラー時は EOF

というのも、かなりダサい仕様だと思う。
419名無しさん@Vim%Chalice:01/12/20 15:55
32bitアーキテクチャのマシンで、
2^32以上の整数を扱う方法はありますか?
>>411
> たくさんの種類を返すのなら0が正常、1がxxxエラー、2がyyyエラーとか?
俺は基本的に enum だな。あとは unsigned でエラーを定義しておいて、その論理和というのも使う
(複数のエラーをまとめて返したいとき)。
421Kusakabe Youichi:01/12/20 16:01
In article >>419, 名無しさん@Vim%Chalice/419 wrote:

> 32bitアーキテクチャのマシンで、
> 2^32以上の整数を扱う方法はありますか?

アーキテキチャはどうのは関係ないでしょう。
int_least64_tとか使えばいいんだし。
>418
たとえば、
char getchar() throw EOF_Exeption;
ならスマートか?
423デフォルトの名無しさん:01/12/20 16:10
>>411
「ライティングソリッドコード」だと、
成功、失敗は bool で返して、具体的なエラーの内容は引数で
返せって薦めてるね。

bool hoge(...., int* err_code);

こういう感じ。
(オレはしたがってないけど)
>>419
C99ではlong long intが使える
425デフォルトの名無しさん:01/12/20 21:46
 "c:\nopqrs\tuv"→"c:\\nopqrs\\tuv"というように、エスケープシーケンスが入っている文字列から、エスケープシーケンスが無い(ただし「\\」=「\という文字そのもの」はある)文字列に変換する関数を作っているところです。
 (改行とかタブとかは使わない)ファイル・ディレクトリ名を扱うため、関数を使ってもらう人には「\」を2つ重ねろとか制約をかけずに使ってもらいたいので。

 単純に"\n"(改行)→"\\n"というように置き換えるだけではうまくいかないみたいなので("\o"とか"\x"とか)、良い方法をご存じないでしょうか?

/* 使用例 */
char *path;
escape(path,"c:\nopqrs\tuv");
/* ↑ pathに変換後の文字列"c:\\nopqrs\\tuv"が入る関数 */
printf("%s",path); /* "c:\nopqrs\tuv"と表示 */
426デフォルトの名無しさん:01/12/20 21:50
Cを学ぶのにCASLの知識は必要ですか?
427デフォルトの名無しさん:01/12/20 21:54
>>426
必要無い。
Cを学ぶのにkusakabeの助けは必要ですか?
429淫乱女教師:01/12/20 22:00
>>425
まず、どの文字列がきたらどの文字列に置き換えるか
を一覧にした変換テーブルを一度書き起こしなさい。
>>428
助けになりません。
>>425
コンパイル時に処理されるものだと思っていたが違うのか?
432431:01/12/20 22:08
言いたい事分かった。
433デフォルトの名無しさん:01/12/20 22:21
>>425
仮に 8 ってコードがあったとして、\x08 にするの?それとも\t?
それとも\010?
"c:\010dir\tab\x08.txt" とか、どーすんの?
434433:01/12/20 22:25
あ、tabは9だった…
435425:01/12/20 22:53
>>429
\a(ビープ)      →\\a
\b(バックスペース)  →\\b
\f(フォームフィード) →\\f
\n(ニューライン)   →\\n
\r(キャリッジリターン)→\\r
\v(水平タブ)     →\\v
\'(シングルクォート) →\\'
\"(ダブルクォート)  →\\"
\\(円記号)      →\\\\
以上の単純変換はやってます。ただ、
\ddd= 8 進数で指定される ASCII 文字
\xdd= 16 進数で指定される ASCII 文字
の処理は分からないので、現在そのままにしてあります。

>>433
 ですよね(^^;;
「\x09」も「\t」も「\011」もすべて「文字コード9」なので、
文字コード9からの変換といっても3通りのうちどれが正しいかは分からない、
ということは変換は無理なのでしょうか(^^;;
436\:01/12/20 23:27
mallocを使ってプログラムを書いているんですが、計算を指示するために入力する数値をだんだん大きくしていくとメモリの確保ができません。これはどういうことなんでしょうか?
よろしくお願いいたします。
1:mallocの使い方が違う
2:確保する領域が大きすぎる
3:脳内mallocを使っている
438デフォルトの名無しさん:01/12/20 23:40
>>436
どういう環境で実行していて、どのくらいの大きさでmallocが失敗するか
言ってみ。
怖くないから。
439\:01/12/20 23:58
レスどもです。
環境は申し分なくもったいないくらいです。
30×30×30だとOKでそれ以上になると駄目みたいです。この説明でもいいんでしょうか?
>425
その目的なら、c:/windows/dir/tmpみたいな方式で、escapeで/->\\変換
するほうが適当だと思うのだが如何。
441デフォルトの名無しさん:01/12/21 00:00
>>437
3説が濃厚だな (´д`;)
442デフォルトの名無しさん:01/12/21 00:07
>439
それじゃわかんないよー・・
ソース書いてみれば?
>>439
普通は、たかだか27000byteで失敗はしないと思う。
UNIX系のOSで、きつい制限がかけられるって聞いたことあるけど、
使ってるOSとかコンパイラは?
444\:01/12/21 00:12
脳内mallocとは要はできていないってことですか?
445デフォルトの名無しさん:01/12/21 00:14
>>444
煽り気にしてたらここで質問なんてできないよ
446デフォルトの名無しさん:01/12/21 00:16
>444
もうちょっと具体的に書けってこと
30×30×30ってのはchar型なのか
1つ500KBの構造体なのか分からないだろ、ヘッダとかちゃんとincludeしてんのか?
ホントに知りたければもう少しコード書けよ、(つーかJMとかでも分かるし)
447\:01/12/21 00:18
>445
いいえ、できるようになるためなら気にしません
448デフォルトの名無しさん:01/12/21 00:20
>447
ここじゃなくても親切な人たくさんいるとこあるでしょうに・・
けどその心意気に感激。
解決してあげたいのでコード書いてみて?
449\:01/12/21 00:23
>>446
スイマソ
char型1つとdouble型3つのもので一つとしています。
450\:01/12/21 00:24
コードかなり長いんですがそれでもいいんですか?
自分でやらなきゃいけないのをわかっているんですが…
451\:01/12/21 00:26
>>443
OSはWin2kでコンパイラはcode warriordです。
452デフォルトの名無しさん:01/12/21 00:28
>450
自分でやってできないから質問したんでしょ?
親切な人たち(一部除く)が教えてくれるから。
いまの状態じゃなにもアドバイスしてあげられないので。
あんまし長いのはやだけど・・(^^;
問題の部分だけでも。
(領域破壊が原因だったりしたら一部分だけではどうしようもないけど)
453デフォルトの名無しさん:01/12/21 00:28
a[i++]=b[i++];
はやばそうだけど、
a[i++]=b[i];
もやばいの?
お、スマンね 冬厨たんと思ったから
#include <stdlib.h>
main ()
{
 struct foo *baz;
 baz = (struct foo *)malloc(sizeof(foo) * 1);
 for (i=2; i<100; i++)
   baz = realloc(baz,sizeof(foo) * i);
}
こんな感じ、拡張はreallocだぞ。 (つーかコード詰めて貼れ)
>>453
分かってやってるならどっちも構わん。
456デフォルトの名無しさん:01/12/21 00:33
>>455
少なくとも
a[i++]=b[i++];
はコンパイラによって処理が変わるじゃん。
もしかしてそこから間違ってるのか?
457\:01/12/21 00:34
#include "ver0.6.h"

int main ( void )
{
double rad_ccc,rad_hch,rad_coh,rad_occ,rad_rot1,rad_rot2,rad_rot3;
int buff[16];
int num_of_atom,i,j,k,l,a;
int num_of_C,*p;
POSI *posi;
char filename[]="liquid_crystal.xyz";
FILE *fp;
rad_rot1=PI*DEG_ROTATION1/180;
rad_rot2=PI*DEG_ROTATION2/180;
rad_rot3=PI*DEG_ROTATION3/180;
//データ入力
p=buff;
num_of_C=input_number(p);
j=input_number(p);
k=input_number(p);
l=input_number(p);

num_of_atom=3*num_of_C+4;
if(NULL==(posi=(POSI*)malloc(j*k*l*(num_of_atom)*sizeof(POSI))))
{
printf("<file_loading> <setting> error!!!");
exit(1);
}
if((fp=fopen(filename,"w"))==NULL)
{
printf("can't open %s!",filename);
exit(1);
}
458:01/12/21 00:35
>>439
もしかして free() し忘れてるとか・・・
んなこたないか。
>>456
=は右から評価、処理は変わらないと思うが?
>456
人はそれを未定義と呼ぶ See FAQ3.9
461\:01/12/21 00:36
でこっからは値の計算なので省いて
//回転関数
if(num_of_C%2==0)
{
*posi=rotation1(posi,j,k,l,num_of_atom,rad_rot1,rad_rot2);
}
else if(num_of_C%2==1)
{
*posi=rotation2(posi,j,k,l,num_of_atom,rad_rot2,rad_rot3);
}
//コピー関数
if(num_of_C%2==0)
{
*posi=copy1(posi,j,k,l,num_of_atom);
}
else if(num_of_C%2==1)
{
*posi=copy2(posi,j,k,l,num_of_atom);
}

fprintf(fp,"%d\n\n",j*k*l*num_of_atom);
for(i=0;i<j*k*l*num_of_atom;i++)
{
fprintf(fp,"%s\t%lf\t%lf\t%lf\n",(posi+i)->name,(posi+i)->xyz[X],(posi+i)->xyz[Y],(posi+i)->xyz[Z]);
}
fclose(fp);
exit(0);
}
main関数はここまでです。
>>449

#include <stdio.h>
#include <malloc.h>
int main()
{
struct data{
char c;
double d1;
double d2;
double d3;
} *p = NULL;
p = malloc(sizeof(struct data) * 30 * 30 * 30);
if(p){printf("ok"); free(p);}
else printf("NG");
return 0;
}


VC6でもgccでもokでした。
463デフォルトの名無しさん:01/12/21 00:42
>457
んでコンソールに、

<file_loading> <setting> error!!!

って出るの?
実際 malloc に渡してる値はどのくらいになるのか確認してみた?
input_number(int *) は、何をする関数?
buf って中身が無いような・・・
464459:01/12/21 00:42
知らんかった。何でそんな仕様にしたんだ?
465\:01/12/21 00:43
それでだいたいnum_of_Cが40とかです。
466デフォルトの名無しさん:01/12/21 00:44
>>459
それは違う。
>>460
サンキュー。FAQ見て分かった気がした。
467\:01/12/21 00:47
>>463
そうなります。
確認の仕方がわかりません…
たしかに今ではbuffは意味がないです。
input_number(int *) は例の30×30×30とnum_of_Cを入力するものです。
468デフォルトの名無しさん:01/12/21 00:49
>465
うーん。
単純にでかい領域を確保しようとしてエラーが出てる気が・・
469\:01/12/21 00:51
>>468
すいません 間違えました。
num_of_atomが40です。
470デフォルトの名無しさん:01/12/21 00:54
>468
int size = j*k*l*(num_of_atom)*sizeof(POSI);
printf("size = &d\n", size );
とかじゃだめですか?
471470:01/12/21 00:55
>468
ちゃう
>467
printf("size = %d\n", size );だろ
473470:01/12/21 01:00
>472
・・・ほんまや!!
>468
それは、あれだ、仮に他の原子も40だったとしてもヒープは到底溢れないから
if ((i=malloc(4*40*40*40*40*100))==NULL){
printf ("ERROR\n");
exit;
}
ljk辺りにdでもない値が入って無いか?
475425:01/12/21 01:11
>>440
 「/」を使う方法は私も考えてまして、「/」を使わせれば変換できるよう
な関数は作ったのですが(「\」を使っても「\x09」や「\011」のような文字
コード指定以外は動作する)、(私に作るよう)依頼した人はどうしても
「\」を使いたいようなので・・(´д`;)
476デフォルトの名無しさん:01/12/21 01:12
たとえば・・・

a[i++]=b[i++];
これって処理系依存だコンパイラ依存だとよく言うけど

つまり、これをうまく使えば、GPLでソースを公開しつつも
再コンパイルはある特定環境でないと正常なバイナリが
生成されない、すげートラップが仕掛けられると。

つまりこれってまるで一昔前のコピープロテクトのような
そんな効果を得られる、魔法のコードになるとか。

問題は、実際にこういうコード書いても昨今じゃだいたい
動きが一緒というか想像の範疇にあって、トラップを
仕掛けにくいってことか。
477\:01/12/21 01:15
>>470
10×10×10でやったら326400とでました。
たぶん本チャンで入力する値は500ぐらいになりそうなんですが…
478だ・か・らあ:01/12/21 01:16
処理系依存!=未定義な
つまりそのトラップコードとやらはお前の環境でさえいきなりコンパイル
出来なくなる可能性や、突然PCから炭素菌が吹き出してくる可能性もあるんだよ
俺様専用コンパイラでしかコンパイルできない、フリーソフト、って事だろ。

まぁ、特定の処理系でしかコンパイルできなくしても、ソースがCなら、
処理系依存なところを除去されて終いだな。
480470:01/12/21 01:24
>477
・・・326400・・・
ってなんメガ?(混乱)
まだ分かって無い奴が居る。。。  (-、-;
482470:01/12/21 01:28
ええと、
>477
326400 == 10*10*10*(num_of_atom)*sizeof(POSI)

なんですか?

んでほんちゃんでは 10 が 500 になると・・?
483\:01/12/21 01:34
>>482
まったくそのとおりです。
>\
これ通ります?、通るなら、変数に予期しない値ですよ。
input_number()とか大丈夫ですか?

if ((i=malloc(1024000000))==NULL){
printf ("Can't allocate");
} else {printf ("allocated \n");}
\はどんなコンピューターを使っているんだ?
すげぇな
>俺様専用コンパイラ
これは脳内コンパイラ、と言うか既にC言語の***ような***言語
と言う事になるよ
487476:01/12/21 01:40
>>478
例にあげたコードに関してはコンパイルは
環境が変わらない限り毎回同じコードを吐くし。
処理系依存!=未定義 とはいえ、コンパイルするときに
とりあえずの構文解析・コード生成までやってくれる。
実行時の動作は多少環境が変わっても変わらないし。
どこがおかしいか、実際の例を挙げて説明してくれない?
488470:01/12/21 01:43
>\
ちょっと確保するサイズが大きすぎるようです。
小さなサイズでもうまくいくような方法を考えてみてはどうでしょう。
489\:01/12/21 01:45
>>484
通りませんでした…
490470:01/12/21 01:45
>\
解決?
おっけい?
491\:01/12/21 01:49
了解です
皆様どうもお世話になりました。心からの感謝です。
>>487 FAQ嫁、それは「添え字が溢れても動いてるから問題無い」
ってのと何ら変わらない。
493470:01/12/21 01:51
>\
よかったね (^^
494動作未定義:01/12/21 01:52
毎回同じコード吐いて、それの実行時の動作が、「鼻から悪魔」だって事だよ。
実行時の環境が、たとえば、直前に使ってたアプリケーションが違うくらいで、
動作が変わるんだよ。
495デフォルトの名無しさん:01/12/21 01:55
この世の中、「動いてるから大丈夫」なコード、けっこう多いんだよね…
いや、おれの見たモノだけかもしれないが…
496476:01/12/21 02:02
>>494
(゚∀゚) 吐かれたバイナリ見る限りじゃ動作が変わるようには見えないニャ
497デフォルトの名無しさん:01/12/21 02:05
>>496
カタるに陥るってやつだな
498デフォルトの名無しさん:01/12/21 02:07
>>496
このバイナリはいつも同じ動作をするから動作未定義は動けばおっけー
ってことだろ。
いや、動くように見えるコードはけばおっけーってことか。
どっちにしろ、動作未定義の意味を理解させるのは無理そうだな。
屁理屈こねるなぁ・・・・(^-^;
実際、最近のコンパイラならちゃんと動くんだろけどね。
でも、それは結果論で有ってANSIや99には副作用完了点までに2回以上
変数の値を変える事の保証は無い
exitを付けただけで動作が変わるかも知れないし、毎回違うバイナリを
生成する(かもしれない) と言うだけの事。で、>>492になるんだよ
自分を信じる事は大切だけど、人には勧めてほしくないなぁ
500476:01/12/21 02:10
>>498
(゚∀゚) 理解シテルヨ !
ここで利用してる「動作未定義」はかなり限定したものだけどネ !
501Kusakabe Youichi:01/12/21 02:11
In article >>499, デフォルトの名無しさん/sage/499 wrote:
> ANSIや99には副作用

「ANSIや99」って変ないいかたですね。
502デフォルトの名無しさん:01/12/21 02:12
「利用してる」ってとこで、理解してないことが証明されてるのね。
陽一!
いいじゃねぇーか別に
おまえ、もうどっかいけ!
>>487
サービスパックを当てたら、落ちるようになったりしてね。

未初期化バッファを参照するようなコードと比べれば、まぁ挙動は安定すると思うが。
でもそんな小手先の技術でどうこうしようってのは、やめた方がいい。
505教え子にしてくれゴルァ!!:01/12/21 04:10
大先生方!
CRC32を算出してはじめからデータとしてあるCRCの値と比較する
プログラムを作りたいのですが、
どのようにCRCを算出していいかわかりません。
簡単にできそうなfileoperate.dllなるものを落として試行錯誤してみたのですが
LIBファイルが壊れているか〜ってメッセージが出てどうしてもできませんでした。
ご教授願いますぺこ <(_ _)>
506Kusakabe Youichi:01/12/21 04:19
In article >>505, 教え子にしてくれゴルァ!!/505 wrote:
> 大先生方!
> CRC32を算出してはじめからデータとしてあるCRCの値と比較するプログラムを作りたいのですが、
> どのようにCRCを算出していいかわかりません。

このへんが参考になるかも(ならないかも) > http://www.vector.co.jp/soft/dos/util/se000791.html
げっ、目が腐った。
>>506
なんか中途半端なソ−スだけどな

つーか、引数未指定のときはなんかメッセージ出せやゴルァ
>>508
パイプ処理を意識してるんだろ
510Kusakabe Youichi:01/12/21 04:33
In article >>508, デフォルトの名無しさん/sage/508 wrote:
> なんか中途半端なソ−スだけどな
> つーか、引数未指定のときはなんかメッセージ出せや(I剤戳

は? こいつかなりまぬけでは?

(文字化けもしてるし)
register使ってる意味がわからん。
昔はこれで速くなったってことか?
512Kusakabe Youichi:01/12/21 04:39
In article >>511, デフォルトの名無しさん/sage/511 wrote:

> register使ってる意味がわからん。

意味ってそう考えるまでもないことだとおもうが。

> 昔はこれで速くなったってことか?

そういうことです(かなり昔ですが)。

register使う意味って、ほかにあったっけ? (「わからん」っていうほどの)
CRCなんてけちくさいこと言わずにMD5使え。
registerを、すべての最適化をかけてよいって意味にしてくれればよかったの
に、と思うことがある
515教え子にしてくれゴルァ!!:01/12/21 04:43
とりあえずさっき教えていただいたソースを参考に組み込みはできる
と思うのですが、このソースだと何かまずいんでしょうか?
MD5でもいいんですが処理時間と、処理の難しさについていけそうも
無いので・・・
何となく先生の言ってる事が正しいのがおかしい
513は馬鹿ですか?
518Kusakabe Youichi:01/12/21 04:43
In article >>514, デフォルトの名無しさん/sage/514 wrote:

> registerを、すべての最適化をかけてよいって意味にしてくれればよかったの
> に、と思うことがある

え? 現状のように「最適化のためにいじっちゃだめなところ」を指定する方式の
ほうが合理的では?
519Kusakabe Youichi:01/12/21 04:45
In article >>516, デフォルトの名無しさん/sage/516 wrote:
> 何となく先生の言ってることが正しいのがおかしい

いつも正しいことしか言っていませんよ。もともと。
>>512
> register使う意味って、ほかにあったっけ?
規格書には書いてありませんが、現実には「コンパイラの最適化を邪魔する」という役割がありますね。
>いつも正しいことしか言っていませんよ。もともと。
これが正しいとどうして言えるのでしょうか?
522教え子にしてくれゴルァ!!:01/12/21 04:50
ちなみに聞きたいのですがなぜにクサカベ先生は嫌われ者なんですか?
毎回疑問に思うのですが・・・
>>521
あまりヴァカに餌をやらないように(苦笑)

やつの日本語は一般的な国語辞典ではなく、民明書房刊の国語辞典に準拠しているので、
話すだけ時間の無駄です。「いつも間違いを認めませんよ」ぐらいに解釈して、さっさと読み
飛ばすのが吉。

(約一名以外は、どっちが正しいかは分かってますって)
>>522
奥様が美人だから。
525Kusakabe Youichi:01/12/21 04:52
In article >>520, デフォルトの名無しさん/sage/520 wrote:

> >>512
> > register使う意味って、ほかにあったっけ?
> 規格書には書いてありませんが、現実には「コンパイラの最適化を邪魔する」という役割がありますね。

ほんとうですか?

たとえばregister宣言されている変数は「かならずレジスターにわりあて
なければならない」というものだったら、そういうこともできるでしょうけど、
実際にはそういう実装ってあまりないですよね? (規格にも)
526Kusakabe Youichi:01/12/21 04:53
In article >>521, デフォルトの名無しさん/sage/521 wrote:

> >いつも正しいことしか言っていませんよ。もともと。
> これが正しいとどうして言えるのでしょうか?

え? 正しくないとでも?
>>522
板違い。プログラマー板に行って聞いてくれ。(聞くまでも無く、プログラマー板の関連スレッドを読むと
おのずから答えはわかると思うが)
528教え子にしてくれゴルァ!!:01/12/21 04:54
今いるクサカベ先生はご本人ですか?
奥様美人ってw
529教え子にしてくれゴルァ!!:01/12/21 04:55
さっそく逝って来ます
>527さん
530Kusakabe Youichi:01/12/21 04:55
In article >>522, 教え子にしてくれゴルァ!!/522 wrote:
> ちなみに聞きたいのですがなぜにクサカベ先生は嫌われ者なんですか?

はつみみです。
531Kusakabe Youichi:01/12/21 04:55
In article >>523, デフォルトの名無しさん/sage/523 wrote:
> やつの日本語は一般的な国語辞典ではなく、民明書房刊の国語辞典に準拠しているので、
> 話すだけ時間の無駄です。

「ということにしたい」のですか? :)
>>525
信じないのは自由ですけどね。(疑うなら自分で試せよ、バカ)
533デフォルトの名無しさん:01/12/21 05:40
日本語EUCの"削除"という文字列を代入するにはどうしたらいいのでしょうか。
何か特別な文字と同じ文字コードを持っているらしく、エラーになるのです。
ひとつずつコードを代入するしかないでしょうか。
>>533
削除 ってEUCでいうと文字コードどんな感じだっけ?
535533:01/12/21 05:45
>>534

調べようにも代入できなくて調べられない状況です・・・(-_-;)
どこかに表があれば・・・
>>532
きっとハマったことがあるんだね。御愁傷様。
後学のために処理系を教えてもらえるとうれしい。
537ホレ:01/12/21 05:48
% echo 削除 | od -b
0000000 272 357 275 374 012
0000005

8bit目を落としてもヤバそうなコードはないけどなあ。
んなこたぁ無いぞい ->EUC
ちゃんとターミナルと文字コード合ってるか?
Sjisじゃ有るまいし・・・・
>>533
説明がアバウトでどんな状況なのかわからないよ。
もうすこし丁寧に説明希望。

簡単なのは
char str[] = { 0xba, 0xef, 0xbd, 0xfc };
と埋め込むことだけど。
540533:01/12/21 06:12
回答ありがとうございます。

>>537

確かに8bit目を落としても(:o=|)問題なさそうですよね。。。

>>538

それは問題ないはずです。
char *s;
s="削除";
こういう風にしているだけですから。他の文字列にすると大丈夫です。

>>539

そうしてみます。。。。
オヒオヒ (・∀・;)
それはとても危険な構文だよ!!!貴方の身に危険が!!!
早く逃げて!!!!
543デフォルトの名無しさん:01/12/21 06:25
こらこらこらこら
544デフォルトの名無しさん:01/12/21 06:27
怒涛の突っ込みだな(w
545デフォルトの名無しさん:01/12/21 06:29
何が危険なの?
末尾に'\0'が入っていないということ?
>>540
ためしてみたけど、何の問題もなくコンパイルできたよ。
OS、処理系を教えれ。
547デフォルトの名無しさん:01/12/21 06:31
char *s="削除"; になさい
548デフォルトの名無しさん:01/12/21 06:35
>>545
後生大事にそんなもん付けるのは、チキン野郎だけ!
ん、何も問題無いぞ??
配列じゃ無いよな??>質問者
わけわかんない、何がおかしいの
puts("削除");
は動くのか
551539:01/12/21 06:50
送信したあとに「あ、付け忘れた」と思ったが
どうせツッコミが入るだろうと放置した(w
552デフォルトの名無しさん:01/12/21 06:53
>>540

VC++6.0でやるとコンパイルできないな。
Linux+gccでやるとできるけど。
553539:01/12/21 06:54
ついでに言えば char 付近もいろいろやばいのだ
善処してくれ(w
>>552
CP932だと0xba, 0xef, 0xbd, 0xfcは
仮名、SJIS 1バイト目、SJIS 2バイト目、SJIS1バイト目
だから次の文字が食われちゃうね。
VC++でもシングルバイト環境ならちゃんとコンパイルできるはず。
555デフォルトの名無しさん:01/12/21 14:05
>>555
そのページ、最後に赤い文字で書いてある文章イタくないか?
まあ保存するなというのだからcahceはクリアしておくか。
しまったブラウザで表示してしまった。
558デフォルトの名無しさん:01/12/21 14:39

ifを使うのはスマートじゃないと聞いたのですが、本当ですか?
ifを使わないでまともなプログラムが作れるんですか?
559デフォルトの名無しさん:01/12/21 14:47
if(exp){}の代わりに
for(;exp;){}でも
while(exp){break;}でも
exp ? : ;でも
すきなの使っとけ。
> ifを使うのはスマートじゃないと聞いたのですが、本当ですか?
嘘です。
ただし、3項演算子や論理演算子を使った方がスマートに書ける場合もあります。

> ifを使わないでまともなプログラムが作れるんですか?
if を使うべきところでわざわざ if を避けるように書いたプログラムはあまり
まともとは言えないと思います。
561239:01/12/21 14:51
思い出したように二分木の話。対象はver.007。

> Node root={"\0",0, NULL, NULL};
空の単語も全部これにカウントすることになるが、それは意図的なもの?
Node *root = NULL;でnodeは要らないはず。

> while ((c=fgetc(fp))!=EOF || j<=MAXWORD){
charとEOFの比較はうまくいかないし、jがMAXWORDにいっても終らん。

> ptr[j]=(char *)malloc(sizeof(char)*i); /*単語を格納するための場所確保*/
> strcpy((char *)*ptr[j], temp); /*確保した場所に単語を格納*/
ターミネータの分を忘れてる。このptr自体不要だと思うが。
二分木に貯め込むってのに、別に配列に取っておく必要はないだろう。

以前も書いたが、英字以外が連続したときのことを考えていない。
iが何を意味しているか考えればできるはず。
whileの中の条件の順序を変えた方がいいと思う。
562デフォルトの名無しさん:01/12/21 15:00
if の代わりに && を使う。
if( hoge == page ) printf("hoge と page は同じ");
(hoge == page) && printf("hoge と page は同じ");
563Kusakabe Youichi:01/12/21 15:07
In article >>562, デフォルトの名無しさん/562 wrote:

> if の代わりに && を使う。
> if( hoge == page ) printf("hoge と page は同じ");
> (hoge == page) && printf("hoge と page は同じ");

elseはどうします? :)
(hoge == page) && printf("hoge と page は同じ");
(hoge != page) && printf("hoge と page は同じ");
565Kusakabe Youichi:01/12/21 15:15
In article >>564, デフォルトの名無しさん/sage/564 wrote:

> (hoge == page) && printf("hoge と page は同じ");
> (hoge != page) && printf("hoge と page は同じ");

うーむ、それじゃelseになってないような ;)
じゃあ、複数の文がある場合は?
||
567デフォルトの名無しさん:01/12/21 15:59
, (カンマ演算子)でいくらでも。
(hoge == page) && printf("i == 20"), printf("dayo");

break とか void 関数などの式じゃないものが使えないだけで、
複文だろうと else だろうとできる。
568デフォルトの名無しさん:01/12/21 16:04
テキスト形式のファイルから fread関数 で固定長レコード
を読んでいるのですが、feof関数で終了が判断できません。
仕方ないので fread関数 の戻り値が 0 になったら終了する
ようにしています。どうにかfeof関数だけで判断できないで
しょうか?

SOURCE:
FILE *fp;
int ret;
char buf[128];

if(fp = fopen("test.txt", "r") == NULL){
 return;
}
ret = 1;
while(!feof(fp) || ret > 0){
 ret = fread(buf, sizeof(char), sizeof(buf), fp);
}
fclose(fp);

お願いします。
569デフォルトの名無しさん:01/12/21 16:12
feof関数は、ふぁいるの終わりに到達した後に読込み操作を行なうと0以外を返すので

do {
 ret = fread(buf, sizeof(char), sizeof(buf), fp);
} while (!feof(fp));

で、どうよ?
570デフォルトの名無しさん:01/12/21 16:14
if 〜 else 〜 処理

int main()
{
int i;

printf("input >>");
scanf("%d", &i);

/* if( i == 20 ) printf("i == 20\n");
else printf("i != 20\n"); */
(i == 20) && (printf("i == 20\n"), 1)
|| printf("i != 20\n");

return 0;
}
571568:01/12/21 16:19
>>569
 自分のソースでも終わりに達した後に読み込み操作を行いませ
んか?終端に達して何度 fread を実行してもだめなんです(T_T
572_:01/12/21 16:58
(int)read((int)file,buf,128);
でも使ってみれば?ただ、低水準入出力関数なので、
使い勝手がわるいけど。
この関数は読み込んだデータのバイト数を返す関数なので、
128より小さければファイルの終端に来たことがわかる。
>>568
なんでfeof()にこだわるわけ?

> 仕方ないので fread関数 の戻り値が 0 になったら終了する
これでいーじゃん。正しい使い方だお。
574デフォルトの名無しさん:01/12/21 17:11
>>572

あんたのやってることは
if( fp = (fopen("test.txt", "r") == NULL) ) {
  return;
}

だから fp に比較演算の結果を代入してるのよ。
ちゃんと括弧をつけなさい。

if( (fp = (fopen("test.txt", "r")) == NULL )
575デフォルトの名無しさん:01/12/21 17:13
すまそ

>> 568
if( (fp = fopen("test.txt", "r")) == NULL )
576Kusakabe Youichi:01/12/21 17:51
In article >>567, デフォルトの名無しさん/567 wrote:

> , (カンマ演算子)でいくらでも。
> (hoge == page) && printf("i == 20"), printf("dayo");

408ペイジに演算子の結合の優先度の表が乗っているので、
そこを見直して勉強し直しましょう:)
577Kusakabe Youichi:01/12/21 17:52
In article >>568, デフォルトの名無しさん/568 wrote:

> テキスト形式のファイルから fread関数 で固定長レコード
> を読んでいるのですが、feof関数で終了が判断できません。

ほんとうに切りのいいバイト数だけ入っているファイルなのですか?
それに「固定長」なのになぜ「テキスト」モードで読むようなことをするのですか?
578Kusakabe Youichi:01/12/21 17:53
In article >>575, デフォルトの名無しさん/575 wrote:

> すまそ
> if( (fp = fopen("test.txt", "r")) == NULL )

なんでifにくっつけるのに内側はあけたりするのかなあ。
何か悪い本の影響だろうか?
579デフォルトの名無しさん:01/12/21 17:59
>>578

細かいところつっこむねー。
580Kusakabe Youichi:01/12/21 18:03
In article >>579, デフォルトの名無しさん/579 wrote:
> 細かいところつっこむねー。

どのへんでしょうか? > 細かいところ。
>580
「なんでifにくっつけるのに内側はあけたりするのか」
どうみてもここしかないだろ。
582Kusakabe Youichi:01/12/21 18:58
In article >>581, デフォルトの名無しさん/sage/581 wrote:
> 「なんでifにくっつけるのに内側はあけたりするのか」
> どうみてもここしかないだろ。

そうですか? > どうみても

何箇所もいろいろな指摘してるので、どこかと思って。
日下部たんは、>580とか、>449とかの番号指定による言及
について理解していないものと思われます。
これは偽者だ。絶対。
つっこむだけで、何も生まないのは、本物と一緒だけどね。
586Kusakabe Youichi:01/12/21 20:28
In article >>585, デフォルトの名無しさん/sage/585 wrote:

> つっこむだけで、何も生まないのは、本物と一緒

「だということにしたい」のですか? :)

ようするに私が「役に立って」いるところは見たくないのですね:)
587デフォルトの名無しさん:01/12/21 20:36
removeで、あるフォルダにある全てのファイルを消したいんですけど、

remove("C:\\test\\*.*")

で消せません。ワイルドカード使っちゃ駄目ですか?
>「だということにしたい」のですか? :)
>ようするに私が「役に立って」いるところは見たくないのですね:)

「だということにしたい」のですね:)
589Kusakabe Youichi:01/12/21 20:50
In article >>587, デフォルトの名無しさん/587 wrote:

> removeで、あるフォルダにある全てのファイルを消したいんですけど、
>
> remove("C:\\test\\*.*")
>
> で消せません。ワイルドカード使っちゃ駄目ですか?

ワイルドかーどはだれが展開しているかを考えましょう:)

fopen("c:/test/*.*" ...) で全部のファイルがオープンしますか? :)
>全部のファイルがオープンしますか?
ファイルが何をオープンするというのでしょうか?
>>589
それが分かったら多分苦労してません。
小人さんがせっせと(以下自粛)
北極グマかわいいです。
594587:01/12/21 21:13
>>589
ワイルドカードは使うなって事ですか?
何を使って消せばいいんでしょうか?
ワイルドかーどはだれが展開しているかを考えましょう〜
でも、考えてわかることじゃないから、答えは出ないですぅぅ
考えてわかる事と、調べないとわからないことは、ちゃんと区別しましょう。
596デフォルトの名無しさん:01/12/21 21:18
>>587
ファイルの一覧をもらってくる関数を使って1つづつ消すか、
ワイルドカードを使ってファイルを削除するコマンドを起動するのがいいでしょう。
597本当に親切な人:01/12/21 21:34
>>594
こうだよ。

for(i=0;i<1000;i++) {
 remove("C:\\test\\*.*")
}

本当なら、1000回ループではなくて、ディレクトリにある
ファイルの数を調べてやるべきなだけど、初心者なら、
適当に1000か10000回ぐらいまわせばOKだろう。
598587:01/12/21 21:37
1回で出来ない事を1000〜10000回繰り返すんですか?
599本当に親切な人:01/12/21 21:41
>>598
ディレクトリにあるファイルと同じ数かそれ以上まわすと、
一気に削除されるよ。
>>598
それはプロは絶対やらない、初心者向けの方法。
あまりremove()をワイルドカードでやりすぎると、まずいことが
起こることもあるけど、めったに起こらないから気にしなくてもいい。
601ぽてと=150:01/12/21 21:57
>>561
いつも指摘してくれてありがとうございます。

>> Node root={"\0",0, NULL, NULL};
>空の単語も全部これにカウントすることになるが、それは意図的なもの?
>Node *root = NULL;でnodeは要らないはず。

addNode()で返ってきたものを逐一Nodeに再代入して使っているので、
ルートの位置を保存しておく(あとでTraverseNode()で使う)ためにnodeを宣言していました。
だからnodeをなくすとルートの位置が保存できなくなると思うのですが。

>> while ((c=fgetc(fp))!=EOF || j<=MAXWORD){
>charとEOFの比較はうまくいかないし、jがMAXWORDにいっても終らん。

これは…いままでおもいっきり while ((c=getchar())!=EOF) なんていう式を使っていたので
それに倣っていました。でもEOFは0か1を返すのでcharと比較しても大丈夫なような…。

>> ptr[j]=(char *)malloc(sizeof(char)*i); /*単語を格納するための場所確保*/
>> strcpy((char *)*ptr[j], temp); /*確保した場所に単語を格納*/
>ターミネータの分を忘れてる。このptr自体不要だと思うが。
>二分木に貯め込むってのに、別に配列に取っておく必要はないだろう。

ターミネータ('¥0'ですよね?)は忘れていました。
ptrは…。ちょっと理解するのが難しいのでじっくり考えます。ノードのなかにポインタがあるから、
それを使えば他のノードも指せるということですよね。(ptrを使わなくても)

夜中に少しソースを改訂させます。
602デフォルトの名無しさん:01/12/21 21:59
>>578

全部くっつけると醜いからに決まってるだろ。
スタイルはあまりに奇抜でなければ良い悪いも無いと思うが?
おまえ、嬉しそうに

i=j---k;

なんて書いて「これの意味は?」なんて聞いてる厨だろ?
usenet に行け。
603デフォルトの名無しさん:01/12/22 01:41
>594

ワイルドカードはOSの機能だから、C言語のすべての関数で使えるわけじゃないと思うぞ。
LSI-Cのヘルプにも
>>unlink(), remove()はfilenameで示されるファイルを削除します。ワイルド
>>・カード文字(*と?)は使用できません。

system()でコマンドラインからファイル削除しちゃだめか。
DOSならdelをつかうとか。
604239:01/12/22 01:46
>>601
> addNode()で返ってきたものを逐一Nodeに再代入して使っているので、
> ルートの位置を保存しておく(あとでTraverseNode()で使う)ためにnodeを宣言していました。
> だからnodeをなくすとルートの位置が保存できなくなると思うのですが。
addNode()が返してるもの自体がルートだろ?

> これは…いままでおもいっきり while ((c=getchar())!=EOF) なんていう式を使っていたので
> それに倣っていました。
fgetc()やgetchar()の戻り値をなぜcharに代入しちゃいけないかは、
はっきりいってFAQなので>>1にあるリンクを読んでくれ。

> でもEOFは0か1を返すのでcharと比較しても大丈夫なような…。
それと、EOFとfeof()かなにかを混同してないか。

> ptrは…。ちょっと理解するのが難しいのでじっくり考えます。ノードのなかにポインタがあるから、
> それを使えば他のノードも指せるということですよね。(ptrを使わなくても)
「読み込んだ単語は全部ツリーにコピーされてるわけだから、
それと別に保存しておく意味はないだろ」ということをいってるんだが、
伝わってるかな。
605デフォルトの名無しさん:01/12/22 02:56
>>561
>> Node root={"\0",0, NULL, NULL};
>空の単語も全部これにカウントすることになるが、それは意図的なもの?
>Node *root = NULL;でnodeは要らないはず。
>>601とは違う理由だけど、おれは*rootは初期状態でノードを指してる
のがいいと思う。
たとえばリストの場合
LIST* p; p=root; //書いてないところは想像してね
while(p->next != NULL) p=p->next; // これでケツまで行ける
ってかんじで、root==NULLの判定をしなくていいからすっきり。
606ぽてと=150:01/12/22 03:05
>>604
おかげで完成させることが出来ました。
ちゃんと動きますよ!一応アルファベット順に並んでますし。
たしかにポインタ配列に単語を指させたアドレスを全部ぶちこんでおくのは
無駄、というか無意味でしたね。せっかく二分木作ってるのに。
(というか、そのために二分木を作っていたんですね…鬱氏)

なんかはっと気づくことが出来たような気がします。
まだまずいところとかありましたら教えて下さい。
607Kusakabe Youichi:01/12/22 03:28
In article >>590, デフォルトの名無しさん/sage/590 wrote:
> ファイルが何をオープンするというのでしょうか?

ちゃんと辞書をひきましょう。(まさか自動詞の意味をしらないとか?^^;)
608Kusakabe Youichi:01/12/22 03:28
In article >>592, デフォルトの名無しさん/sage/592 wrote:

> 小人さんがせっせと

そのエサはどうするのですか?
609Kusakabe Youichi:01/12/22 03:29
In article >>595, デフォルトの名無しさん/sage/595 wrote:

> ワイルドかーどはだれが展開しているかを考えましょう〜
> でも、考えてわかることじゃないから、答えは出ないですぅぅ
> 考えてわかる事と、調べないとわからないことは、ちゃんと区別しましょう。

いえ、これは調べる前にまず考えることです。
610Kusakabe Youichi:01/12/22 03:29
In article >>597, 本当に親切な人/sage/597 wrote:
> こうだよ。
> for(i=0;i<1000;i++) {
>  remove("C:\\test\\*.*")
> }
>
> 本当なら、1000回ループではなくて、ディレクトリにある

ぼけ。
611239:01/12/22 03:30
>>606
コンパイル通らんぞ(藁。
word008.c: In function `main':
word008.c:78: `j' undeclared (first use in this function)
word008.c:78: (Each undeclared identifier is reported only once
word008.c:78: for each function it appears in.)

while ((c=getchar())!=EOF)に関してはここを読め。
http://www.catnet.ne.jp/kouno/c_faq/c12.html#1

>   else if (i==0){/*英文字でなく、なおかつ以前も英文字でなかった時*/
>      ;
>   }
ふつーこういうのは条件を逆にするだろ。

>   else{ /*英文字でなく、なおかつ前が英文字であった時*/
コメントが分かりづらい。要するに単語の終り?
何をやってるかとか直接の条件なんてのは、コードを読めば分かることだから、
コメントにはコードの意図を書いたほうがいい。

feof()してからfgetc()してるのは…うーん、これのおかげで英字で終ってる
ファイルでも正しく扱えてるんだが、そこまで考えてる?

あとはまぁ、tempのオーバーフローのチェックとか、Node::wordを可変長にす
るとか、argvからファイル名を取るようにするとか、そんなとこかな。
612239:01/12/22 03:45
>>605
そうすると今度はtraverseNode()で判定が必要になりそうなので、場合に依り
けりでは。少なくとも、addNode()は再帰を使ってきれいにまとまってると思
うし。

ついでにいうと、ケツを探すということに関しては、
LIST *root, **p = &root;
while (*p) p = &(*p)->next;
という書き方もできる。
613デフォルトの名無しさん:01/12/22 04:40
質問があります。
C言語でモニタのガンマ値を取得することは可能なのでしょうか?
JAVAだとあるんですけど。
どうしてもその方法がみつかりません。
知ってる方がいたら教えていただけないでしょうか。
614デフォルトの名無しさん:01/12/22 05:03
例えば、 “01gate”のような数字と文字列が混じったものから、
数字だけを美しく取り出す方法を教えて下さい。
>613
Java厨ですか?
>614
VB厨ですか?
>615
冬厨ですか?
>>614
sscanf
617デフォルトの名無しさん:01/12/22 06:33
>>616
ありがとうございました
恥ずかしいかぎりです,Cは数年ぶりなんで
>>613
スレ違い。激しく環境に依存する。
619605:01/12/22 10:18
>>612
二進木の場合はあてはならないのはわかったよ、さんきゅ。

にしても
>LIST *root, **p = &root;
>while (*p) p = &(*p)->next;
でもいい、っていうなら、
traverseNode(node->left);
traverseNode(node->right);
でいいじゃんって言いたくなるけどね。
620612:01/12/22 12:24
>>619
うーん、正確じゃなかったかな。612の例は、むしろケツの
要素というよりは、末尾に追加するときのポインタの位置を
探すコードだから。

本当に最後の要素を探したいなら、確かに605のようにしな
いとまずい。だとしても、見付からなかったときは別扱いが
必要のような気がするけど。rootを使うかNULLを使うかの違
いだけで。
621初心者:01/12/22 12:34
あのー、Pro*cの中にPL/SQLを記述することは可能
なのでしょうか??
初心者なもので、すいません。。。
622デフォルトの名無しさん:01/12/22 12:47
外部変数を関数の引数で渡しているソースを見たのですが、
これは何か意味があるのでしょうか?
>>622
たまに内部変数を渡したりも出来るように。
624デフォルトの名無しさん:01/12/22 12:58
C++で
cout << a << ' ';の' 'ってどういう意味ですか?
>>624 スレ違い。
Cだと' 'は(asciiの場合)32のことだ。
626デフォルトの名無しさん:01/12/22 13:19
>>625
空白文字
627624:01/12/22 14:54
ありがとうございました。
628デフォルトの名無しさん:01/12/22 15:15
出力結果はどうなるか。

#include <stdio.h>
int main(void)
{
char a;
char *b;
char **c;
char ***d;
char ****e;
char *****f;

b=&a;
c=&b;
d=&c;
e=&d;
f=&e;

*****f=5;

printf("%d",a);
}
5
630デフォルトの名無しさん:01/12/22 16:44
switchのdefaultでexitしたとき、breakは書かなくてもいい?

switch( age )
{
case 1:
 break;
default:
 printf( "えらー" );
 exit(1);
 break;
}
631デフォルトの名無しさん:01/12/22 16:50
default の break は書いても書かなくてもいいが、漏れは書く。
exitが失敗する可能性がある処理系だったら
break付けておいた方がいいかもな(藁
むしろ、defaultにbreakを書くか、書かないかではなく、
exitの後にbreakを書くか、書かないか、という話では。

exitなら、書くかなぁ。returnとかだと、書かないけど。
つまんねー質問なんだけど
たとえば int型の足し算で桁あふれ起こしたとき
キャリーオーバーはどうやって検出する?
635Kusakabe Youichi:01/12/22 17:11
In article >>630, デフォルトの名無しさん/630 wrote:

> switchのdefaultでexitしたとき、breakは書かなくてもいい?
>
> switch( age )

switchにくっつけるくせに、内側は空けるのか :)

# 入門用に選んだ本がはずれだったのだろうか?
636Kusakabe Youichi:01/12/22 17:12
In article >>631, デフォルトの名無しさん/631 wrote:

> default の break は書いても書かなくてもいいが、漏れは書く。

これはデマですね > default の break は書いても書かなくてもいい

# 本気にする人がいるので念のため。
637デフォルトの名無しさん:01/12/22 17:13
>>634 足す前より値が小さくなったらキャリーオーバと判定する
unsigned add(unsigned a, unsigned b)
{
  unsigned c = a + b;
  if (c < a || c < b) throw overflow();
  return c;
}
>>636
>これはデマですね > default の break は書いても書かなくてもいい

作法として?文法として?
>>638
文法として。書かなくてもいいのは最後のcase/default。
640デフォルトの名無しさん:01/12/22 17:31
何をもっていいとか悪いと言うかは知らないが、必要じゃなくてもdefaultにはbreak
は書いておくようにすすめます(とK&Rには書いてあった)
>>639
それって作法って言うんじゃないの?
Cの言語仕様に基づく文法?
 最後じゃないcaseにbreakを付けなくても、別にコンパイルエラーは
おこらないとは思うけど。警告とか出る?
643デフォルトの名無しさん:01/12/22 17:55
今、結城 宏の
C言語プログラミング レッスン 文法編
の第9章 制御の流れ
の183ページを読んでるんだけど、
<quote>
 最後のbreak文は不要ですが、プログラミングスタイルとしてはあったほうが安全です
</quote>
と書いてあります。
>>641,642
たしかにbreakはまったく書かなくても文法的には正しい。
意味が変わってもいいというならだが。
645デフォルトの名無しさん:01/12/22 18:04
くさかべセンセーもたまには間違えるんだね。
>>645
だねだね。
647Kusakabe Youichi:01/12/22 18:13
In article >>638, デフォルトの名無しさん/sage/638 wrote:

> >>636
> >これはデマですね > default の break は書いても書かなくてもいい
>
> 作法として? 文法として?

「文法として」は「書かなくても書いても同じ」なわけはないですから。

もしかしてこの2人はどちらも「defaultは最後に書く」ことを
前提にしていないだろうか? (^^;
648Kusakabe Youichi:01/12/22 18:14
In article >>640, デフォルトの名無しさん/640 wrote:

> 何をもっていいとか悪いと言うかは知らないが、必要じゃなくてもdefaultにはbreak
> は書いておくようにすすめます(とK&Rには書いてあった)

ちゃんと読み直せ。
649デフォルトの名無しさん:01/12/22 18:16
よーするに、センセーは
「defaultが最後に置かれるとは限らないから、breakを省略してもよいとは言えない」という意味で言ったんだ
といーたいらしーが、だったら最初からそういえ。
「ボクはこういうつもりで言ったんだ」
とかデンパ飛ばすな。
まったくコミュニケーション能力ゼロだな。
(ということにしたい)
650638:01/12/22 18:18
>>647
>「文法として」は「書かなくても書いても同じ」なわけはないですから。

「同じ」かどうかなんて話どこから出てきたの?:)
651Kusakabe Youichi:01/12/22 18:18
In article >>645, デフォルトの名無しさん/645 wrote:

> くさかべセンセーもたまには間違えるんだね。

どう間違えたのですか?
652Kusakabe Youichi:01/12/22 18:21
In article >>649, デフォルトの名無しさん/649 wrote:

> よーするに、センセーは
> 「defaultが最後に置かれるとは限らないから、breakを省略してもよいとは言えない」という意味で言ったんだ
> といーたいらしーが、だったら最初からそういえ。

は?

そうじゃなくて「defaultのbreakは書いても書かなくても同じ」ってのは
「デマだ」って言っただけですよ?
653Kusakabe Youichi:01/12/22 18:25
In article >>650, 638/sage/650 wrote:
> >「文法として」は「書かなくても書いても同じ」なわけはないですから。
>
> 「同じ」かどうかなんて話どこから出てきたの?

べつにどこからでてきたわけでもないですよ。そこにあるだけで。

学習の途中で「何でもおしえる」のは良くないので、
適切な教え方をするべきで、誤って勘違いしているのもあえて自分で考え
させる場合も多いですが、「あきらかな誤り」だけは、さすがに
「それはちがいます」とだけ言っておかないと、複数人のときに
それをそのまま信じちゃうひともいますからね。

「switch末尾のbreak」をどうするべきかは117ペイジに詳しく解説
されていますが、

ここではそうではなく「defaultラベルのところのbreakは書いても書かなくてもよい」
は明らかな間違いであることを指摘しただけです。(そこで「なぜ?」と考えることが
重要)。
>>652
>そうじゃなくて「defaultのbreakは書いても書かなくても同じ」ってのは
>「デマだ」って言っただけですよ?

そう言ってるようには読めないけど?
655650:01/12/22 18:28
>>653
>ここではそうではなく「defaultラベルのところのbreakは書いても書かなくてもよい」
>は明らかな間違いであることを指摘しただけです。(そこで「なぜ?」と考えることが
>重要)。

ですから、それが「作法」としてなのか「文法」としてなのかを聞いたわけです。
>「switch末尾のbreak」をどうするべきかは117ペイジに詳しく解説

なんの本の117ページだよ。
コミュニケーション能力ゼロだな
(ということにしたい)
>>656
>なんの本の117ページだよ。

本とは限らないですよ。
『117ペイジ』というモノなのでしょう。きっと。
658Kusakabe Youichi:01/12/22 18:33
In article >>654, デフォルトの名無しさん/sage/654 wrote:

> >>652
> >そうじゃなくて「defaultのbreakは書いても書かなくても同じ」ってのは
> >「デマだ」って言っただけですよ?
>
> そう言ってるようには読めないけど?

「読めないことにしたい」だけですか? :)

ほんの何十分か前の発言なので再掲すると...

> > default の break は書いても書かなくてもいいが、漏れは書く。
> これはデマですね > default の break は書いても書かなくてもいい
> # 本気にする人がいるので念のため。

ですから
「defaultのbreakは書いても書かなくても同じ」ってのは「デマだ」って言っただけ
は正しいのでは?

そう「読めない」ってのはただの希望ですか?:)
659デフォルトの名無しさん:01/12/22 18:33
case 文の、default: が、最後にある限り、default: に
break を書いたところで、なんの意味もない。

文法がどうのこうの言ってる馬鹿がいるが、書かないことによる
問題点でも指摘しない限り、これ以上相手不要。
fj で、また笑い物になることであろう。
660Kusakabe Youichi:01/12/22 18:34
In article >>656, デフォルトの名無しさん/sage/656 wrote:

> >「switch末尾のbreak」をどうするべきかは117ペイジに詳しく解説
>
> なんの本の117ページだよ。

そんなことはあなたに聞いていません。

> コミュニケーション能力ゼロだな

「ということにしたい」のですか? :)
書けばいいじゃん>break
662デフォルトの名無しさん:01/12/22 18:35
つまんねー質問なんだけど
たとえば int型の足し算で桁あふれ起こしたとき
キャリーオーバーはどうやって検出する?
663Kusakabe Youichi:01/12/22 18:36
In article >>659, デフォルトの名無しさん/659 wrote:

> case 文の、default: が、最後にある限り、default: に
> break を書いたところで、なんの意味もない。

それはcaseだって同じでしょ > 最後にある限りbreak を書いたところで意味は少ない
(同じコードがでる)

逆に言えば「defaultだから」ってことはないわけです。
途中にあれば意味はかわってくるわけですので。
664652:01/12/22 18:37
>>658
>そう「読めない」ってのはただの希望ですか?:)

希望じゃなくて、事実「読めない」だけですよ。

あなたは、
「書いても書かなくてもいい」を「書いても書かなくても同じ」
にしたいのですね。

そうならそう書けばいいのに。:)
665Kusakabe Youichi:01/12/22 18:38
In article >>661, デフォルトの名無しさん/sage/661 wrote:

> 書けばいいじゃん> break

switch文の末尾に...話題だったら、117ペイジに書いてある通りですね(書くかどうか)。

「defaultラベルのところのbreak」が、「書いても書かなくても同じ」っての
については「デマ」だと述べました。
666Kusakabe Youichi:01/12/22 18:39
In article >>662, デフォルトの名無しさん/662 wrote:

> つまんねー質問なんだけど
> たとえば int型の足し算で桁あふれ起こしたとき
> キャリーオーバーはどうやって検出する?

「キャリーオーバーを検出」って意味不明ですね。

「桁あふれが起きたことを検知」することを言っているのか、
「キャリーオーヴァー分がどれだけかを知りたい」のか
667Kusakabe Youichi:01/12/22 18:40
In article >>664, 652/sage/664 wrote:

> >>658
> >そう「読めない」ってのはただの希望ですか?:)
>
> 希望じゃなくて、事実「読めない」だけですよ。

おや、もう一回引用しましょうか? :)
668デフォルトの名無しさん:01/12/22 18:40
>>665

お前って引用するときにコピーしないんだな。いちいち手書きしているのか。
(>じゃなくて>が正しい。)
>switch文の末尾に...話題だったら、117ペイジに書いてある通りですね(書くかどうか)。

だからどの本の117ページに書いてあるんだよ?
世の中にCの本は1000種類ほど(当社調べ)出てるんだから、本の名前を指定しないと相手に伝わらないだろ。
まったく言語中枢麻痺してんのかね。
(ということにしたい)
670くさきゃう゛ぇ:01/12/22 18:42
いなーてぃくる >>669

作って分かるCプログラミングに決まっているだろう!!
671658:01/12/22 18:42
>>667
>おや、もう一回引用しましょうか? :)

引用してください。
700ゲット
>>670
勝手に推測しないでね。
674Kusakabe Youichi:01/12/22 18:43
In article >>669, デフォルトの名無しさん/sage/669 wrote:

> >switch文の末尾に...話題だったら、117ペイジに書いてある通りですね(書くかどうか)。
>
> だからどの本の117ページに書いてあるんだよ?

ですから、あなたには聞いていません。
>>674
>> だからどの本の117ページに書いてあるんだよ?
>ですから、あなたには聞いていません。

聞いているのではなく、聞かれていますよ。:)
676Kusakabe Youichi:01/12/22 18:45
In article >>668, デフォルトの名無しさん/668 wrote:
> お前って引用するときにコピーしないんだな。いちいち手書きしているのか。

なんてことを書いても ごまかせませんよ :)
677デフォルトの名無しさん:01/12/22 18:46
日下部祭りやめろよ。
放置すれば奴がレスしないってのはマ板で証明済み。
678デフォルトの名無しさん:01/12/22 18:47
で、沖縄インターネット協議会の方々からはどのくらい白い目で見られましたか?
>>677
スマソ、趣味なので。
680デフォルトの名無しさん:01/12/22 18:47
>>677

レス専用共用ハンドルだしな。
681デフォルトの名無しさん:01/12/22 18:48
>>679

ワラタ
>ですから、あなたには聞いていません。

聞いてるとかきーてないとかの問題じゃないんだよ。
ここはパブリックな場なの。 email で個人的なやりとりをする場しゃないの。
ここはプログラム板なの。技術板なの。
なんか発言するときは、確実なソースを示すのがルールなの。
おみゃーが117ページに書いてありますぅ、っていってるから、こっちは、その本を確認して裏を取りたいの。
本の題名言えないなら、ネタとして処理するぞ。

ネタ発言したいときは、プログラマー板ってものがちゃんと用意されてるから、そっちにいきな。
683Kusakabe Youichi:01/12/22 18:48
In article >>664, 652/sage/664 wrote:
> > そう「読めない」ってのはただの希望ですか?:)
> 希望じゃなくて、事実「読めない」だけですよ。

そうですか? 読めない「ことにしたい」としか思えませんけど;)

: これはデマですね > default の break は書いても書かなくてもいい
: # 本気にする人がいるので念のため。

これが、

: > そうじゃなくて「defaultのbreakは書いても書かなくても同じ」ってのは
: >「デマだ」って言っただけですよ?
:
: そう言ってるようには読めないけど?

そう「読めない」としたら、「どう読める」のかを知りたいですね :)
684Kusakabe Youichi:01/12/22 18:49
In article >>670, くさきゃう゛ぇ/sage/670 wrote:
> 作って分かるCプログラミングに決まっているだろう!!

確認したのですか? > そのペイジに載っているかどうか
685Kusakabe Youichi:01/12/22 18:49
In article >>678, デフォルトの名無しさん/678 wrote:

> で、沖縄(I課整発貯ぢ協議会の方々からはどのくらい白い目で見られましたか?

文字化けしてますよ。
それともハブに噛まれて中枢神経マヒしてるってうわさは本当だったのか
(ということにしたい)
>>668
記号とか英数は、自動的に変換されるツールを使用してると思われ。
688Kusakabe Youichi:01/12/22 18:50
In article >>682, デフォルトの名無しさん/sage/682 wrote:

> >ですから、あなたには聞いていません。
>
> 聞いてるとかきーてないとかの問題じゃないんだよ。

なるほど。じゃあ問題ではないのですね。
>>685
文字化けしているところはOIAの事ですよ。
文章から類推することが出来ると思ったのですが。

で、お返事は?
690あぼーん:あぼーん
あぼーん
691664:01/12/22 18:54
>>636
>これはデマですね > default の break は書いても書かなくてもいい

って書いたよね。それが、

>>683
>: > そうじゃなくて「defaultのbreakは書いても書かなくても同じ」ってのは
>: >「デマだ」って言っただけですよ?

と変わっている。

>そう「読めない」としたら、「どう読める」のかを知りたいですね :)

「書かなくてもいい」と「書かなくても同じ」は違うよね?
わかるかな?:)
やーっぱ、くさかべは、一生地方のコーダーで終わりそうだな。
コンピューターと同化しちゃってて、まともに人間とコミュニケーション取れないし。
(ということにしたい)
693デフォルトの名無しさん:01/12/22 18:55
In article

:)←これ何?
694デフォルトの名無しさん :01/12/22 18:55
おい!陽一、おまえ! 何やってんだこんなところで!
もういい、おまえちょっとメロンパン買って来い!!
>>693
>:)←これ何?

文字化け。本人の公式見解。
>>692
でも儲けてるからうらやましい。
>:)←これ何?

それはスマイリーといって、核心を突かれてあせっているときに、
「俺様はこんなに心に余裕があるんだよ」
ということを装いたいときに使います。
(ということにしたい)
698デフォルトの名無しさん:01/12/22 19:00
>>697

スマイリーて:-)←こうじゃなかった?亜種?:)
>>697
>それはスマイリーといって、核心を突かれてあせっているときに、

そうだったのか。使うの控えよう。:)
>>696
うらやましいよな。
自然豊かな場所で仕事しながら、仕事はネット経由でばりばり最先端。
あこがれちゃうよ。
701デフォルトの名無しさん:01/12/22 19:01
>>700

こんなところで騙られていることなんて気にもとめないところがカコイイ!!
702Kusakabe Youichi:01/12/22 19:03
In article >>702, デフォルトの名無しさん//701 wrote:

> >>700

> こんなところで騙られていることなんて気にもとめないところがカコイイ!!

ということにしたいのですね?:)
703デフォルトの名無しさん:01/12/22 19:05
オイこら! 陽一! おまえ 外にでるなっていっただろ!
けいこの味噌汁辛すぎるんだよ!! ちゃんとちゅういしとけよ!!
>>702
> > こんなところで騙られていることなんて気にもとめないところがカコイイ!!
> ということにしたいのですね?:)

藁田。
騙られていることを気にとめていることにしよう。
>>702

文字化けしてないじゃん。まったく!
>>705 ワラタ
陽一の書いたコード見てぇな
書籍のサンプルじゃないやつどっかあるか?
さがすのめんどくせぇからポインタくれ
708クサカーベ:01/12/22 19:09
>>707

117ページに書かれています。
>>707
彼は丘プログラマーですから、コードなどないのでは?
だからどの本の117ページなんだよ!
てめぇは郵便だすときに
「やまださんの家」
とだけ書いてだすのかゴルァ
711日下部名無しさん:01/12/22 19:12
>>710

デフォルトという言葉を知らないのですね?:)
次の二つについて1000文字以内で論ぜよ。
(1)日曜の朝は【デフォルト】でコメットさんを見ます。
(2)コメットさんが【デフォルト】になりました。
713デフォルトの名無しさん:01/12/22 19:16
ヲッチャーは見てるだけにして、クサカベにネタを振るな、コラ!
また延々と、ソウオモイタイ、ハツミミデス、発言が続くだけだろ。
しっかし、なんで本の名前くらい書かないんだ?
書けばすむのに。
>>712
デフォルトの使い方が間違っています。
私ならこのように使います。

(1)日曜の夕方は【デフォルト】でだぁ!だぁ!だぁ!を見ます。
(2)だぁ!だぁ!だぁ!さんが【デフォルト】になりました。
>>714
本ではありません。
『117ペイジ』というモノに書いてあります。
717日下部名無しタン:01/12/22 19:19
>>714

面倒という言葉を知らないのですね?:)
>>715
(2)は名塚佳織が自己破産したということでしょうか?
センセイの場合、面倒というより、脳梁がせまくて情報伝達がうまくいってないのでは?
(とはつみみですがおもいたい)
720デフォルトの名無しさん:01/12/22 19:22
急にカキコが途絶えたね。
俺とおなじで「これマジ」のスカイフィッシュが気になって仕方ないのか?
>>719
キチガイですから、脳が物理的な損傷を受けている可能性は高いですね。
722デフォルトの名無しさん:01/12/22 19:24
>>720

ということにしてみたら? :)
>>720
モー娘。を見ろーーーーーー!
>>717
 何か本の名前を書くのと、「本の名前かけー」という人に煽り返す
のと比べると、後者の方が面倒だと思うのだが。
>>720
> 急にカキコが途絶えたね。

反論できなくなったからです。
#と煽れば、またきてくれるかな:)
>>725
来んでええ。
727Kusokabe Youichi:01/12/22 19:27

完敗です。m(_ _)m
もう二度と書き込まないことを誓います。
>>727

breakの使い方なんて、だれでも間違うことあるよ。
気にするな。元気出せ。
>>728

Kus"o"kabeになってるじゃん。
メール欄も変だし
日下部と日下部叩きはマ板に逝ってくれないか?
731728:01/12/22 19:37
>>729
>Kus"o"kabeになってるじゃん。

そのことを折れに指摘してどうしたいの?
732デフォルトの名無しさん:01/12/22 19:53
つまんねー質問なんだけど
たとえば int型の足し算で桁あふれ起こしたとき
キャリーオーバーはどうやって検出する?

>>666
桁あふれが起きたことを検知する方法はあるの?

キャリーオーバー分がどれだけか は
桁あふれが起きたことを検知できれば
なんとかなるし
733Kusakabe Youichi:01/12/22 19:55
In article >>691, 664/sage/691 wrote:
> >これはデマですね > default の break は書いても書かなくてもいい
>
> って書いたよね。それが、

> >: > そうじゃなくて「defaultのbreakは書いても書かなくても同じ」ってのは
> >: >「デマだ」って言っただけですよ?
>
> と変わっている。
>
> >そう「読めない」としたら、「どう読める」のかを知りたいですね :)
>
> 「書かなくてもいい」と「書かなくても同じ」は違うよね?
> わかるかな?

そうではなく、「じゃあどう読めるのか?」を質問したのですか?
734Kusakabe Youichi:01/12/22 19:56
In article >>692, デフォルトの名無しさん/sage/692 wrote:

> やーっぱ、くさかべは、一生地方のコーダーで終わりそうだな

いいなー
735Kusakabe Youichi:01/12/22 19:56
In article >>693, デフォルトの名無しさん/693 wrote:
> :)←これ何?

括弧とじでは?
>>732

AとBを足したとき
答えがA(またはB)よりも小さければ
キャリーが出てる。
737Kusakabe Youichi:01/12/22 19:57
In article >>707, デフォルトの名無しさん/sage/707 wrote:

> 陽一の書いたコード見てぇな

買えばいいのに。
738Kusakabe Youichi:01/12/22 19:57
In article >>711, 日下部名無しさん/711 wrote:
> デフォルトという言葉を知らないのですね?

債務不履行のことでしょ?
739Kusakabe Youichi:01/12/22 19:58
In article >>730, デフォルトの名無しさん/sage/730 wrote:

> 日下部と日下部叩きはマ板に逝ってくれないか?

っていうか私は特に問題のあることを書いているわけじゃあないですね。
740Kusakabe Youichi:01/12/22 20:00
In article >>731, 728/sage/731 wrote:
> > Kus"o"kabeになってるじゃん。
>
> そのことを折れに指摘してどうしたいの?

2人分書いて「こうなればいいなあ」と「希望」を示したことが
理解されなかったのでは?

そういう場合は名前を変えておくとかじゃなくって、右下とかに「(希望)」って
書いておけば勘違いする人もいなくなるのでは?
741691:01/12/22 20:00
>>733
>そうではなく、「じゃあどう読めるのか?」を質問したのですか?

『そう』と『「じゃあどう読めるのか?」』がどの部分を
指しているのかを説明してもらえますか?
「質問したのですか?」と言われても答えようがありません。
742712:01/12/22 20:02
>>738
>債務不履行のことでしょ?

そういうことです。
743Kusakabe Youichi:01/12/22 20:06
In article >>741, 691/sage/741 wrote:

> >>733
> >そうではなく、「じゃあどう読めるのか?」を質問したのですか?
>
> 『そう』と『「じゃあどう読めるのか?」』がどの部分を
> 指しているのかを説明してもらえますか?

「そうは読めない」の代わりの部分ですが?
>>743
頼む、マ板に逝ってくれ!
745731:01/12/22 20:10
>>740

>>731の意図としては
「Kusokabe Youichiに名前の似ている人」にとって
>>728のような発言をされたら惨めだろう
と思って書き込んだのですが
>>729が、>>731の発言の対象を「マジで」勘違いしている
と勘違いしたので、訂正を促す意味で書いたまでです。
746デフォルトの名無しさん:01/12/22 20:12
>>736
unsigned ならそれでいいんだけど・・・

あーちょっと待って!
なんかいいロジックが思いつきそう・・・!

ヒントサンクス!
>>745見苦しい
おいクソカベ、料理板でお前の好きなシーチキンとスパゲッティの
ネタが出てるぞ。気分転換にレスつけてこいよ。
749745:01/12/22 20:15
>>747
すまんすまん。
750Kusakabe Youichi:01/12/22 20:17
In article >>748, デフォルトの名無しさん/sage/748 wrote:

> おい(I舷桐泗ぢ、料理板でお前の好きなシーチキンとスパゲッティの
> ネタが出てるぞ。

文字化けしてますよ。
751741:01/12/22 20:17
>>743
>「そうは読めない」の代わりの部分ですが?

質問してるの?:)
>>746
signed でも問題ないと思うが。
753736:01/12/22 20:20
>>752
だよね。
754デフォルトの名無しさん:01/12/22 20:20
>>750
オマエ ニセモノ ダロ?
ホンモノハ ハンカクカタカナ チャント ヨメテルゾ
>>751
いい加減に帰るかコテハン使ってくれ(ホットゾヌの NG ワードに登録するから)
756751:01/12/22 20:23
>>755
御意。

ミイラ取りがミイラになってしまった。
コテハンは何がいいと思う?
757IQ低いかも:01/12/22 20:25
unsinged charの場合
255+1=256 → 0

signed char の場合
-127-127=-254 → 2

足し算の場合、もとよりも小さくなってたら
引き算の場合、もとよりも大きくなってたら
キャリーオーバー

かな?
758 :01/12/22 20:26
>>756
ここでやらないで
>>757
正の数を足して小さくなったらキャリー発生
負の数を足して大きくなったらボロー発生
でいいんじゃない?
760756:01/12/22 20:39
>>758
やめるように努力する。
761Kusakabe Youichi:01/12/22 20:40
In article >>751, 741/sage/751 wrote:
> >「そうは読めない」の代わりの部分ですが?
>
> 質問してるの?:)

そんなこと書いてもごまかせませんよ。
762Kusakabe Youichi:01/12/22 20:41
In article >>756, 751/sage/756 wrote:
> ミイラ取りがミイラになってしまった。

っていうか最初からあらしているのはそのひとりでは?
763751,756:01/12/22 20:46
>>761
>>762
ここで君の相手をしてあげることはできなくなりました。
ごめんね。機会があれば、また別のところでやりましょう。
Cの話をしてください。
>>764
でも、このスレって
「Cハッカー日下部陽一」に聞く
スレッドなんだね(^^;
次スレの1は脱くさかべキボンヌ。
>>766
そのためにKusakabe Youichiを煽って素早く1000を目指す
っていうのは、やっぱだめ?
768Kusakabe Youichi:01/12/22 21:01
In article >>763, "751,756/sage/763" wrote:
> ここで君の相手をしてあげることはできなくなりました。

っていうか、相手してもらえると勝手に勘違いしてのこのこあなたが
でてきただけのことでしょうに :)
769デフォルトの名無しさん:01/12/22 21:04
ココって質問スレだよね・・・。教えてください。

reallocってどう?
mallocで取ったchar *pStrで
if((p = (char *)realloc(pStr, size)) == NULL){
ってやるとエラーになる。使い方ヘンですか?
770あぼーん:あぼーん
あぼーん
771デフォルトの名無しさん:01/12/22 21:09
独習Cで勉強しいるのですが、やはり紹介されている本で勉強したほうが
いいんでしょうか?あと、Cを覚えた後c++で格ゲー作りたいのですが、
可能でしょうか。房な質問ですいません。
772763:01/12/22 21:09
>>768
もうネタ振りしないでよ。
反応したいけど迷惑になるみたいだからさ。

#と反応してしまう、折れも弱いな(藁
>>770
うぜ。
774デフォルトの名無しさん:01/12/22 21:12
>>771
推薦図書/必読書のためのスレッド in プログラム板
http://pc.2ch.net/test/read.cgi/tech/1005897052/

推薦図書/必読書のためのスレッド7
http://pc.2ch.net/test/read.cgi/prog/1006353701/
775769:01/12/22 21:12
>>771
独習Cは名著です。しっくりこなければ何冊か別のをあたってもいいでしょう。
Cを覚えた後C++覚えるのは順当です。核ゲー作りたいならDirectXも読みましょう。
核ゲーの作り方はその手の本を探そう。

それより俺の質問にも誰か答へて
>769
なんのエラー?
>>771
とりあえず、JAVAから入って、(JAVAがいいかどうかは別にして)
クラスを使ってプログラミングする癖をつけてから
C++に行くって言うのはどうでしょう?
CからC++に行くと、結局Cになっちゃうから。
778Kusakabe Youichi:01/12/22 21:14
In article >>771, デフォルトの名無しさん/771 wrote:

> 独習Cで勉強しいるのですが、やはり紹介されている本で勉強したほうが
> いいんでしょうか?

その本のどのへんが不満なんですか?
779Kusakabe Youichi:01/12/22 21:14
In article >>772, 763/sage/772 wrote:
> もうネタ振りしないでよ。
> 反応したいけど迷惑になるみたいだからさ。

わたしはねたふりなんかしてませんよ。

低能なくせにいちいち反応するなって。
(内容あること話せないくせに)
780769:01/12/22 21:15
>>776
Win2000。
アクセスヴァイオレーション。
bcc32とVCの両方でメモリエラーが出るみたい・・・
781Kusakabe Youichi:01/12/22 21:16
In article >>775, 769/775 wrote:
> それより俺の質問にも誰か答へて

どんな質問ですか?
782769:01/12/22 21:17
>>781
>>769で書いたヤツです。
>>779
>(内容あること話せないくせに)

たまには面白い事言うね。
>>783
> たまには面白い事言うね。

あまり面白くないような気もするけど。
>780
いま
Win98でやってみたけど、
おかしいとこないみたい
変数sizeは初期化してるよね?
>>780
realloc() を呼んだ時点で保護違反を食らってるの? それは pStr の値が腐ってる気がするな。

環境がわからんが VC6 ならデバッグビルドにして

_CrtSetDbgFlag(_CRTDBG_ALLOC_MEM_DF | _CRTDBG_CHECK_ALWAYS_DF | _CRTDBG_LEAK_CHECK_DF);
_CrtIsValidHeapPointer();

あたりでヒープのチェックかけてみ。
787769:01/12/22 21:24
>>785
うん。たぶん。
最初のmallocで取ったのが33バイト。次に33バイト必要なのでsize=66なんだけど・・・

>>786
やってみます。
788Kusakabe Youichi:01/12/22 21:32
In article >>782, 769/782 wrote:
> >>769で書いたヤツです。

どんなのだろう...。
789Kusakabe Youichi:01/12/22 21:32
In article >>783, デフォルトの名無しさん/sage/783 wrote:

> > (内容あること話せないくせに)
>
> たまには面白い事言うね。

まだしつこく反応してるし:)
Cに行く前にやっぱりBのモミモミを先やらないとね。
あせっちゃ駄目だ。Aをネチネチで酔わせてから、ゆっくりボタンをはずせ。
そして丁寧に愛撫するんだ。そう、もうグッチョリヌレヌスキーになってきただろ。
さぁ、Cの出番だ。うまくじらして突きまくるのさ。
791Kusakabe Youichi:01/12/22 22:09
In article >>790, デフォルトの名無しさん/sage/790 wrote:

> Cに行く前にやっぱりBのモミモミを先やらないとね。

Bは参考文献がないからなあ。BCPLのも以前は書店にあったが、
最近は見かけない。
792Delフサギコ:01/12/22 22:32
|
|,,∧
|Д゚彡 ジー  
⊂ミ
| ,;゙  エロッ
793Delフサ名無しさん:01/12/22 22:50

|            ∧,,∧   あ・・・・・・ホットゾヌだから
|            ミ;゚Д゚彡  クサカベタンを見つけられなかった。
|            (ミ  ミつ
|           〜ミ  ミ   ・・・キーワード設定してたから・・・
|             ∪゙∪


|   ヒィ    トテテテテ・・・
|   ∧,,∧ 三
|  ミ゚Д゚,,彡 二  ≡
|   ⊂⊂ ミ 三 =  =
|    `@゙@ ー 二

|
|  サッ
|)彡
|
|
|

|コソーリ  
|,,∧
|Д゚彡 ジー  
⊂ミ
| ,;゙  マキコマレタクニャイ、、
794Error401:01/12/22 22:51
>>621
>あのー、Pro*cの中にPL/SQLを記述することは可能
>なのでしょうか??

微妙にスレ違いな気が。
無名PL/SQLブロックを入れることが出来るよ。

確か、
EXEC SQL EXECUTE 〜 END-EXEC;
だったと思う。

おそらくマニュアルに載ってると思うけど。
なければ、OTN Japanでダウンロード。
Pro*C より OO4O の方が使いやすいよね。
エラー処理がしづらいけど。
796769:01/12/22 23:20
>>785-786さん
ありがとうございます。解決しました。やはりpStrで取ったメモリを使った処理で
メモリの上限を越えてました。その瞬間にはエラーにならないのですが、これが
いわゆるヒープの不整合ってヤツなんですね。
この状態だと関係ないメモリのfree()までコケる事もあるみたいですね。
はずかしいのでsage
いいアイデア欲しいんですが。

C/C++で、引数の数を可変にするには

foo( ... );

みたいにかけるじゃないですか。
じゃあ、呼び出し側が、
状況によって fooの引数の数を1個にでも10個にでも100個にでもしたい場合、
どう書いたらイイっすかね。

誰か知恵貸してくれると嬉しいんですが。
(stdcallの規約に従ってアセンブラでスタックに引数積むっていう手は考えたけど、
これだと汎用性が・・・・)
va_listを渡すようにするか、
型が固定で単に可変長なだけなら配列で渡す。
799239:01/12/23 03:15
定期連絡(藁。

細かいとこだけ。

> else if (!strcmp(str, p->word))
> p->count++;
> else if (strcmp(str, p->word)<0)
> p->left=addNode(p->left, str);
二回strcmp()する必要はない。

>  else if (!isalpha(c) && i>0){ /*単語を1つ読み終えたとき*/
ここはすでに!isalpha(c)なのは明らか。

まぁあとは、短い単語でも長い単語でもNodeでは一律64とっ
てしまうところとか、バッファオーバーフロー対策くらいだ
ろう。

feof()というのはfgetc()とかがEOFを返してからでないと真
にならない。つまり、0.08では必ず一回はc==(char)EOFでルー
プすることになるんだが、これは普通isalpha()ではないの
でたまたま番兵として働いてるということ。
800797:01/12/23 03:23
関数の仕様自体は決まってて、
その関数を使いたいケースがマジで引数の型も個数も可変なんですよ。
だから配列は不可。

va_listって呼び出し元でも使えるの?だとするとちょい目から鱗なんだけど。
引数として渡すとちゃんと順番に全部スタックに積んでくれるのかしら。
801797:01/12/23 03:27
どんなケースを想定しているかというと、
可変引数をサポートしているスクリプトエンジンをC++で書いてて、
スクリプトの内容によって、引数の型、個数など、あらゆる場合がありうる。
(んで、それを解釈・実行する可変引数の関数が1つ既に存在している。
そこに、スクリプトを分析して得たパラメータを全部一気に渡す。)
802 :01/12/23 03:27
>>800
おれなら void型(Linuxなら慣例でunsigned longか)のポインタを渡すね。
受け取り側で適当な構造体なりなんなりをはめなおす。
>>801 設計が悪いと思われ(w
>>800,801
va_listは呼び出し元では使えない。
どういうデータを扱えるかにもよるが、>>802が一番妥当かも。
void*なりlongなりにキャストできるデータが前提、つまりおそらくdoubleや
構造体の値渡しはできないが。
あと、引数の数や型はどうやって渡すわけ?
>>797
XML。
>>801
AppleEventやITypeInfoを参考にしれ。
807デフォルトの名無しさん:01/12/23 08:36
crypt関数はunistd.hをインクルードしただけでは使えないんですか?
>807
ココムだか暗号なんたらだかに引っ掛かって入ってない
適当に拾ってこい
>>801

>(んで、それを解釈・実行する可変引数の関数が1つ既に存在している。
>そこに、スクリプトを分析して得たパラメータを全部一気に渡す。)

これはどうやって機能を実現してるの?
>>809
それが実現できなくて悩んでると思われ。
>>801
VBのバリアント型みたいな機能を持ったクラス自作するとかってのはどう?
812801:01/12/23 13:45
>(んで、それを解釈・実行する可変引数の関数が1つ既に存在している。

これはすでに実現できていて

>そこに、スクリプトを分析して得たパラメータを全部一気に渡す。)

これが実現できなくて困ってるなり。
やぱーし仕様変えてもらおうかなぁ。
813801:01/12/23 13:49
C/C++可変引数の関数って、呼び出された側は柔軟だけど、
呼び出し側は引数の数を決めたコーディングしかできないよな・・・。

まあでも、パラメータの数20個までとか制限付けちゃえば、
(現実に、そんな大量のパラメータをセットするヤツは居ないはず。)
残り全部をNULLでダミー送ってしまう手はあるな。ちょい無駄っぽいけど。

提案どうもありがとうございました>ALL
でも引き続きいい案がありましたら教えてください。
814805:01/12/23 14:26
>>801
おいおい、オレの提案は無視かよ。
>>813
残りがNULLでOKならvoid*の配列でいいじゃん。
816デフォルトの名無しさん:01/12/23 18:05
sqrt()に対して負の数を与えた時に返される値はどんなもので参照できるのですか?
もし記号定数があるのならば教えてください。
817816:01/12/23 18:06
sqrt(-1)の戻り値を参照すればいいのですが、あまりよくないと思いますので。
>>816
不定なので参照すべきものではないかと。
>>816
エラー処理したかったら、_matherr()を定義するとか。
820デフォルトの名無しさん:01/12/23 18:14
>>818

不定ってそういうことだったんですか・・・てっきり処理系によって変わることかと・・・・
ありがとうございます。
>>816
直接参照するんじゃなくてisnan()とか使う。

isnan(sqrt(-1.0)) != 0
このスレって誰に聞けばいんですか?
とりあえず日下部陽一ではないことはわかるんですが・・・。
823デフォルトの名無しさん:01/12/23 19:36
>>822

掲示板で特定の人に聞くのはナンセンスです。
特定の人に聞きたいのなら電子メールを利用しましょう。
824Kusakabe Youichi:01/12/23 20:02
In article >>822, デフォルトの名無しさん/sage/822 wrote:

> このスレって誰に聞けばいんですか?

「俺」では? そう書いてあるし。
825ぜろ:01/12/23 21:06
あるファイルの1行のサイズを知りたいのですが、
その1行が長い場合があるため

fgets(s, fp)
linesize = sizeof(s);

みたいではなく、
#include<stdio.h>
int main(void) {
int linsize = 0;
FILE *fp;
fp = open("input.txt", "r");
while(fgetc(fp) != '\n')
linesize++;
printf("linesize : %d\n", linesize);
close(fp);
return(0);
}

としているのですが、うまくいかないことがあります。
なぜなのでしょうか?教えてください。
826Kusakabe Youichi:01/12/23 21:10
In article >>825, ぜろ/825 wrote:

> としているのですが、うまくいかないことがあります。

っていうか、なんでfgetcのにopenなの?
827デフォルトの名無しさん:01/12/23 21:10
キャストって重要ですか?
>>825
よーわからんが、そのファイルって全行同じ長さなの?
>>827ケースバイケース、としか答えられない質問だよ、それは。
830ぜろ:01/12/23 21:14
>>826 さん
編集するときに間違えたようです。
>fp = open("input.txt", "r");
ではなく、
fp = fopen("input.txt", "r");
でした。
>>825
このwhile(fgetc(fp) != '\n') ってループしないの?
>>831
ごめん。見間違え。
833ぜろ:01/12/23 21:18
>>828 さん
いいえ。
ただ、1ファイルは必ず3行なのですが。
>>833このコードだと

>while(fgetc(fp) != '\n')
>linesize++;

は最初の行のサイズだけをカウントして、おしまいだよ。
2、3行目は無視してる。
835ぜろ:01/12/23 21:27
>>834 さん
ありがとうございました。無事解決できました。
836(゚д゚)ウマ-:01/12/23 21:46
C言語開始というかプログラム開始して1週間です。
void main() と void main (void) って一緒ですか?

マジれすを頂戴したい・・・
>836
いっしょ
>>827
使わなければどうにもならない場合は重要だし、
要らないキャストで混乱させられる場合も重要。
mainの戻り値ってvoidでいいの?
840(゚д゚)ウマ-:01/12/23 21:54
>>837
ありがとうございます
>>836
ちがう
voidでも動くが正しくはint
>>839
ANSI C では次のように決められている

int main(void)
int main(int argc, char* argv[])
int main(int argc, char** argv)

argc とかの変数名は任意。
844Kusakabe Youichi:01/12/23 22:07
In article >>836, (゜д゜)ウマ-/836 wrote:
> void main() と void main (void) って一緒ですか?

> マジれすを頂戴したい・・・

19ペイジを読みましょう。
845Kusakabe Youichi:01/12/23 22:08
In article >>837, デフォルトの名無しさん/sage/837 wrote:
> > 836
> いっしょ

またこういうウソ教えるし:)
846デフォルトの名無しさん:01/12/23 22:08
>>839

main()でいいんじゃない?省略したらint型と見ると決められているし。
847Kusakabe Youichi:01/12/23 22:08
In article >>842, デフォルトの名無しさん/sage/842 wrote:

> voidでも動くが正しくはint

またこういう嘘教えるし。
848(゚д゚)ウマ-:01/12/23 22:09
禿混乱
849Kusakabe Youichi:01/12/23 22:13
In article >>843, デフォルトの名無しさん/sage/843 wrote:
> ANSI C では次のように決められている

まず「ANSI C」とか言ってるあたりでまぬけ。(C89のことかなあ?)

> int main(void)
> int main(int argc, char* argv[])
> int main(int argc, char** argv)
> argc とかの変数名は任意。

こういうデマを平気でおしえるからなあ。
850Kusakabe Youichi:01/12/23 22:13
In article >>846, デフォルトの名無しさん/846 wrote:

> main()でいいんじゃない>? 省略したらint型と見ると決められているし。

昔はそうでしたね > 省略したらint
現在の標準規格ではちがいます。
さすがコーダーどもは説明がうまいな。
質問者があまりのわかりやすさに感激してるぞ。
>>844
>19ペイジを読みましょう。

どの19ペイジ?
853846:01/12/23 22:15
>>850

おいてめぇ、"じゃない"と"?"の間には>なんて入れていないぞ。
>>852
目を合わせちゃダメ
855Kusakabe Youichi:01/12/23 22:21
In article >>852, デフォルトの名無しさん/sage/852 wrote:
> > 19ペイジを読みましょう。
>
> どの19ペイジ?

20ペイジの前のペイジです。
>>855
>20ペイジの前のペイジです。

どの20ペイジ?
857デフォルトの名無しさん:01/12/23 22:47
tmpfile()で作成されるファイルは実行ファイルと同じディレクトリに作成されるんですよね? 
とりあえず、main の引数と戻り値をどう書くかってのは別にして、
関数を宣言するときに、引数リストを空にするのと、(void)にするのが一緒かってことなら、

C++では一緒。
(C++ では引数リストを省略すると (void) とみなされる)
C言語では最近の仕様はよく知らんけど、昔は違う意味になったはず。
(昔の仕様だと、引数リストを省略すると、 (int) と同じ意味になった)

じゃなかったっけ?
859デフォルトの名無しさん:01/12/23 22:51
>>858

intになったとして、どんな名前の仮引数に値が格納されるの?
そして、仮引数の個数は?
省略するとint型になるのは戻り値の型だと思う。
860Kusakabe Youichi:01/12/23 23:05
In article >>858, デフォルトの名無しさん/sage/858 wrote:
> C++では一緒。
> (C++ では引数リストを省略すると (void) とみなされる)
> C言語では最近の仕様はよく知らんけど、昔は違う意味になったはず。

いまもそうですね。
違う意味になるのはプロトタイプの時だけじゃないの?
862デフォルトの名無しさん:01/12/24 00:02
あの、教えて頂きたいんです
最近「Kusakabe Youichi」って名前のおじさんをよく見るんですが
一体だれですか?
関数宣言の場合
type funcname(); → type funcname(...);
関数定義の場合
type funcname() → type funcname(void)
864主治医:01/12/24 00:08
ハブにかまれて中枢神経がマヒし言語障害を併発し、病院からリハビリの一環として書き込んでるおじいちゃんです。
>>862
>>864
あまり、いじらないように。うざいから。
866 :01/12/24 00:16
>>862
大学を一応卒業したもののあまりの性格の悪さから就職もできず、
中途半端な才能しかないのでC言語しか覚えられなくて院にも行けず、
そのうち本州に居づらくなったので沖縄に逃亡し、
いたいけで可愛い女子大学生をかどわかして強引に結婚させ、
たまに得たC言語本の仕事で毒舌を放ちまくるも、
結局売れないので2chでの書き込みを日課して、
一生を過ごしている可哀想なおじいちゃんです。
お前ら全員マ板行けよ
モニタからお前らの粘着粘液がにじんで来るんだよ
>>857
違う。
869857:01/12/24 02:04
補足。man tmpfileより。

説明
    tmpfile()関 数は<stdio.h>で定義されている P_tmpdirをパスの
    先頭に使ったユニークなファイルを作成する。テンポラリファイ
    ルはバイナリリードライトモード(w+b)で作成される。このファ
    イルはクローズ時またはプログラムの終了時に自動的に削除され
    る。

準拠
    SVID 3, POSIX, BSD 4.3, ISO 9899

実行ファイルと同じディレクトリに書き込み権限があるとは限らないし、
そもそもPOSIXでは実行ファイルのディレクトリを知る方法を定義していない。
870Kusakabe Youichi:01/12/24 03:45
In article >>862, デフォルトの名無しさん/862 wrote:

> あの、教えて頂きたいんです
> 最近「Kusakabe Youichi」って名前のおじさんをよく見るんですが
> 一体だれですか?

昨日も同じこと言ってましたね:)
871Kusakabe Youichi:01/12/24 03:46
In article >>866,  /866 wrote:
> C言語しか覚えられなくて

はつみみです :)

> 院にも行けず、

はつみみです :)
872 :01/12/24 05:11
LinuxでもDOSでもなんでもいいんだけど、

「 main() に飛んでくるまでのロジック 」について解説してるHPが
あったら教えてください。
書籍でもいいです。

検索キーワードだけでもいいです。
google行っても何で検索したらいいかさっぱり
873デフォルトの名無しさん:01/12/24 05:45
>>872
「スタートアップルーチン」とかで検索してみれば?
874 :01/12/24 06:41
>872
LSI-C86に、スタートアップルーチンのソースが
いくつか付いてるよ。
875801:01/12/24 07:36
>>814氏へ
>>805の提案って?すまん、意味がわからんのですが。XMLだと解決になるの?

>>815氏へ
残りがNULLでいいというか、20個というのは実用上妥当であろう数を大まかに言っただけのことです。
理想的なのはスタックに積む引数の数を変えられることなんですけどね。

まあ、>>802氏、>>804氏の提案も分かるんですが、
問題は既に可変引数の関数が実在しちゃってることなのです。

ココデモ ロクデモナイ コトシカ カカナイ
Kusakabeたんは何か提案ないの?(とか振ってみる)
まともでかつ有益な提案がもらえたら、
本の一冊くらいは買ってあげるところだけど。(w
876デフォルトの名無しさん:01/12/24 08:41
>>869

あ、そうなんですか。ありがとうございます。
> 実行ファイルと同じディレクトリに書き込み権限があるとは限らないし、
そうです。これが心配だったのです。
>876
結果的には、ふつー、UNIX系では/tmpに出来るし、Windows系では
%TEMP%に出来ると思うけど。
http://www.nurs.or.jp/~nspixp/void/
面白い人なんですね。
日下部たんの本を立ち読みしようと思って
デオデオ内のコンピュータ書籍売り場にいって
c言語のコーナーを見たけど売ってなかったよ?
c言語の本だけでも4段くらいあったんだけど。。。

絶版?
880デフォルトの名無しさん:01/12/24 12:16

Kusakabe Youichiの母です(以下略
>>875
> 問題は既に可変引数の関数が実在しちゃってることなのです。
それが根本的に間違ってる。
vprintf()を使ってprintf()を実装することは容易だが、逆はできない。
va_listをとる関数をベースにして、可変引数の関数でラップするもんだ。
882Kusakabe Youichi:01/12/24 14:30
In article >>879, デフォルトの名無しさん/sage/879 wrote:
> デオデオ内のコンピュータ書籍売り場にいって
> C言語のコーナーを見たけど売ってなかったよ?

けっこう売りきれるのが速いみたいです。またそのうち入荷するでしょう。
>>879
その本は警視庁から回収命令が出されました。
出版社が回収中です。(w
クサカベさん、
MFCの本かいてください。
クサカベさん、
ATOKの本かいてください。
886Kusakabe Youichi:01/12/24 19:54
In article >>884, デフォルトの名無しさん/sage/884 wrote:

> クサカベさん、
> MFCの本かいてください。

書いてどうするの?
>>881
> > 問題は既に可変引数の関数が実在しちゃってることなのです。
> それが根本的に間違ってる。
> vprintf()を使ってprintf()を実装することは容易だが、逆はできない。
> va_listをとる関数をベースにして、可変引数の関数でラップするもんだ。

んー、それがわかってるから
スタックに積む数を動的に変える方法ない?って聞いてるんだけどな。
可変引数はCの関数の墓場ということでしょうか(藁
まあ、Cの弱いところだからしょうがないか・・・・。(^_^;;

で、日下部先生、なんかいい手はないですかね。
呼び出し側で引数の数(=スタックに引数を積む数の意)を可変にする方法。
知ってたら教えてください。
888Kusakabe Youichi:01/12/24 20:15
In article >>887, デフォルトの名無しさん/sage/887 wrote:
> んー、それがわかってるから
> スタックに積む数を動的に変える方法ない?って聞いてるんだけどな。

っていうか、「引数や戻り値のやりとりはスタックで実現」するという実装で
なければいけないなんていう話はどこにもないのでは?

> まあ、Cの弱いところだからしょうがないか・・・・。(^_^;;

でもprintf()は初期からありましたよ。

> で、日下部先生、なんかいい手はないですかね。
> 呼び出し側で引数の数(=スタックに引数を積む数の意)を可変にする方法。
> 知ってたら教えてください。

ちゃんと本なり規格書を読みましょう。
想像していた程度の答えだね>日下部
890Kusakabe Youichi:01/12/24 20:16
In article >>889, デフォルトの名無しさん/sage/889 wrote:

> 想像していた程度の答えだね > 日下部

ということにしたいいのですね? :)
まあクサカベはこの程度だ。アイテニスルダケ無駄だよ>>887
想像を絶する答えだね>日下部
893887:01/12/24 20:25
新事実。

問題の関数は内部で va_list を使った関数をラップしているだけらしいことが
分かりました。(まあ、普通の人ならそういう風に作るよな・・・)
そっちの関数を外に公開してもらうことで、当座の問題解決はなんとかなります。

ご意見くださったみなさま、どうもありがとうございました。
(但し、日下部以外)
894デフォルトの名無しさん:01/12/24 20:48
>>863
その辺の話って、規格のどこを読めばいいの?
895 :01/12/24 20:51
>>894
カニチャーハンにある程度載ってるね
896デフォルトの名無しさん:01/12/24 22:25
age
897881:01/12/25 03:44
>>887
解決したようだが。

> スタックに積む数を動的に変える方法ない?って聞いてるんだけどな。
存在しないと思う。こういう力業以外。

switch (argc) {
case 0:
ret = foo();
break;
case 1:
ret = foo(argv[0]);
break;
// ....
}

あとva_listをとる関数があっても、va_listを作るのは
可変長引数の関数内じゃないとできないはず。
このスレは何?

C の超カンタンなことなら漏れに聞け
http://pc.2ch.net/test/read.cgi/tech/1009190994/
>>898
クソカベの隔離スレ
900RA・イール:01/12/25 11:32
僭越ながら質問させてください。
UTFビット列をUnicodeビット列に変更するプログラムを
作成しているのですが。
どのようにマスクを掛けたり、ビットをずらしたりすれば
良いのか思い浮かびません。
どなたかご教授願えませんでしょうか。

            UTFビット列         Unicodeビット列
1バイトコード  0aaa bbbb            0000 0000 0aaa bbbb
2バイトコード  110a aabb 10bbc ccc       0000 0aaa bbbb cccc
3バイトコード  1110 aaaa 10bb bbcc 10cc dddd aaaa bbbb cccc dddd
>僭越ながら質問させてください。
興味深い日本語だ。
1バイトかどうか (c1 & 0x80) == 0
2バイトかどうか (c1 & 0xe0) == 0xc0
3バイトかどうか (c1 & 0xf0) == 0xe0
4バイトかどうか (c1 & 0xf8) == 0xf0
5バイトかどうか (c1 & 0xfc) == 0xf8
6バイトかどうか (c1 & 0xfe) == 0xfc

2バイトのとき (c1 & 0x1f) << 6 | (c2 & 0x3f)
3バイトのとき (c1 & 0x0f) << 12 | (c2 & 0x3f) << 6 | (c3 & 0x3f)
4バイトのとき (c1 & 0x07) << 18 | (c2 & 0x3f) << 12 | (c3 & 0x3f) << 6 | (c4 & 0x3f)
5バイトのとき (c1 & 0x03) << 24 | (c2 & 0x3f) << 18 | (c3 & 0x3f) << 12 | (c4 & 0x3f) << 6 | (c5 & 0x3f)
6バイトのとき (c1 & 0x01) << 30 | (c2 & 0x3f) << 24 | (c3 & 0x3f) << 18 | (c4 & 0x3f) << 12 | (c5 & 0x3f) << 6 | (c6 & 0x3f)
903RA・イール:01/12/25 13:25
>>901さん
変な日本語になってますね。
僭越の意味が「身分や権限などを越えて、差し出がましいことをする」
だからこの場合おかしな表現でした。「不躾」であっていますかね?

>>902さん
私宛ての解答ですよね?
ありがとうございます。
これを参考に頑張ってみます。
904デフォルトの名無しさん:01/12/25 13:46
typedefしたものを使わずに関数をキャストするにはどうやりますか。
void foo(int, char *);

int (*bar)(long *, ...) = (int (*)(long *, ...))foo;
906Kusakabe Youichi:01/12/25 13:53
In article >>903, RA・イール/903 wrote:

> >>901さん
> 変な日本語になってますね。
> 僭越の意味が「身分や権限などを越えて、差し出がましいことをする」
> だからこの場合おかしな表現でした。「不躾」であっていますかね?

っていうか、余計な前置きしている暇があるなら、さっさとわかりやすく質問
すればいいのでは?
>>905
ありがとー。
908RA・イール:01/12/25 14:03
>>906
こういうところって前置きいらないですか?
909デフォルトの名無しさん:01/12/25 14:05
マクロを可変引数に対応させたい場合はどうやったらいいですか?
#define macro(s,...) printf(s,...)
910ズバット怪傑:01/12/25 14:08
>>909
#define macro printf
911Kusakabe Youichi:01/12/25 14:09
In article >>908, RA・イール/908 wrote:
> こういうところって前置きいらないですか?

しちゃだめです。
>>909
gccの独自拡張なら
#define macro(format, args...) \
printf (format , ## args)

C99なら……、知らん。
913デフォルトの名無しさん:01/12/25 14:16
>>910
ごめんなさい、説明不足でした。

デバッグ出力のために使うのでシンボルDEBUGが定義されていない場合
コードを消したいんです。

#ifdef DEBUG
#define macro(str) puts(str)
#else
#define macro(str)
#endif

のような感じで…
>>913ならこうじゃん

#ifdef DEBUG
#define macro printf
#else
#define macro
#endif
915ズバット怪傑:01/12/25 14:27
>>913
#ifdef DEBUG
#define macro printf
#else
#define macro 1?(void)0:printf
#endif
916914:01/12/25 14:27
あ、そか、だめだ。
>>912
> C99なら……、知らん。
#define macro(format, ...) \
printf(format, __VA_ARGS__)
918RA・イール:01/12/25 14:32
>>911
わかりました。以後注意します。
919デフォルトの名無しさん:01/12/25 14:51
>>917
ありがとう、できました!
920Kusakabe Youichi:01/12/25 17:38
皆さん素晴らしいレスをありがとうございました。
おかげでとても面白いスレッドになりました。
最優秀スレッド賞をひろゆきからいただきました。
単行本にも掲載されるそうです。
皆さん楽しみにしていてください。
ではごきげんよう。
え、C99対応のコンパイラ使ってんの? 何?
922Kusakabe Youichi:01/12/25 17:43
正直、レベルが低くてがっかりだ。
またクソスレ立ててやるからしっかり煽ってくれよ。
>>908
全然かまわないよ−。偽日下部なんか無視して、
どんどん前置き書いて−。
だからといって時候の挨拶から入るなよ。
925デフォルトの名無しさん:01/12/26 21:43
Cで終了コードを取得するにはどうすればよいでしょうか?
以下のようなコードをためしたのですが:

geho.c:

int main(void)
{
  exit(2);
}

hoge.c:

int main(void)
{
  int ret;
 
  ret = system("./geho");
  printf("%d\n", ret);

  return 0;
}

しかし、出力は2とはならずに、512となってしまいます。
926お胸おっぱい:01/12/26 22:18
>>925
OS が何かは知らないけど、上位 8bit は確かに 2 だ。
927デフォルトの名無しさん:01/12/26 23:59
ret=system(...)/256 とすべきでわ?
厳密にはスレ違いだが。
wait()システムコールで得られる値には、
下位8ビットにcore dumpしたかのフラグとシグナルの値が入ってる。
子プロセスがexit()に渡した値は上位8ビットだけ。
929デフォルトの名無しさん :01/12/27 18:25
struct age *sage = (struct age *)malloc(10 * sizeof(struct age));
で動的に割り当てた構造体の記憶領域の解放のしかたは
free((struct age *)sage);
であってる?
freeの中でキャストいるんだっけ?
free(sage)でいいんじゃないの?
つーかmalloc()もキャストはいらん。
void*からの代入はOKだし、void*をサポートしてない処理系がエラーや警告を
出すとも思えん。
ただし、当然#include <stdlib.h>はしてるものとする。
次元配列の宣言は、「実際には配列の配列」って言ってるけど、
ほんとの次元配列ってのはどういうものか教えてください。
次元配列ってなんだよ。
SF板かアニメ板のルパンスレにでも逝け。
また、つまらぬレスをつけてしまった・・・
935デフォルトの名無しさん:01/12/28 02:41
ヘッダファイル内にはそのヘッダが依存するヘッダの
インクルードも書いておくべきだ!
それぞれのヘッダには二重定義防止マクロを記述しておけばよい。
この考え方に賛成の人〜!
ふつうそうなってないか?
937sage:01/12/28 05:19
それが常識なら文句ないっす。
938Kusakabe Youichi:01/12/28 05:29
In article >>937, sage/937 wrote:

> それが常識なら文句ないっす。

っていうか、まず自分で確かめろって。
鬱陶しいね〜 このオヤジ
早く死ねよ〜〜 
>939
off会で殺せよ
>>938
読解力ないね。
そろそろなので、新スレを作りました。
移動をお願いします。

http://pc.2ch.net/test/read.cgi/tech/1009499565/l50
943ねね:02/01/26 20:17
CのソースからPealのソースを呼び出すにはどーすればいいの?コンパイル時にリンクさせるには・・・・。それとも直接ファイル指定での呼び出しが可能?シェルじゃないしそれはムリかな?だれか教えて。
944デフォルトの名無しさん:02/01/26 20:19
>>943
system()
>>943
system("〜.pl")が最も簡単な手。
>>943
Perl5でCとの親和性が高くなったらしいから調べてみては?
>>943
Pealってなんだ。っつーか>>942が読めねーのかこの文盲。
どうでもいいけど新スレへ

C言語なら、俺に聞け! <11>
http://pc.2ch.net/test/read.cgi/tech/1009499565/