ページ 11

文字列判定プログラム

Posted: 2007年6月10日(日) 01:29
by マサキ
あらかじめ与えられた文字列の集合に対し、文字を入力して、その集合の要素かどうかを判定するプログラムを作っています。
プログラムの条件としては
1 文字列の集合を、以下の構造体を用いたリストとして記述すること

 struct cell{
char animal[20];
struct cell *next;
};

2 再帰的関数memberを使って、文字列の判定を行うこと。
  memberのプロトタイプ宣言
  int member(char * , struct cell *);
第1引数:文字列 第2引数:リストへのポインタ
  返り値:第1引数の文字列が第2引数のリストの要素なら1を、そうでなければ0を返す。

3 今回、文字列の集合は
  {rat,cat,dog,elephant,horse,bat,hamster}
と与えられている。

4 00と入力すると、プログラム終了

という条件の下私はこのようなプログラムを作りました.(添付ファイル)
このプログラムは、コンパイルはできるのですが、実行するとセグメントエラーをおこしてしまいます。
コンパイル時にエラーが表示されない以上、私の実力ではどうすることもできません。
このプログラムはどこがいけないのでしょうか?
何処を改善すればちゃんと作動するようになるのでしょうか?
是非とも教えていただきたいです。宜しくお願いします。

Re:文字列判定プログラム

Posted: 2007年6月10日(日) 11:05
by box
問題点を逐一説明するのがたいへんなので、サンプルコードを提示します。
よろしければ研究してみてください。

Re:文字列判定プログラム

Posted: 2007年6月10日(日) 11:16
by しっぽ
実行時にエラーになるのはポインタaのポイント先を指定しないで、
ポインタaを使用しているためです。

strcpy(a->animal, str1);
で、aが実体のないオブジェクトをポイントしてしまっています。

リストについての復習するのが近道です。

Re:文字列判定プログラム

Posted: 2007年6月10日(日) 13:10
by マサキ
おかげさまでプログラムが完成しました。
以前作ったリスト構造のプログラムを復習したとこと、先ほどの自分のプログラムが間違いだらけであることにきづきました。
全然リスト構造を理解できてませんでした。
boxさん、わざわざプログラムまで載せて下さって、どうもありがとうございました。