掲示板ランキング  インターネット・Web開発(e-ビジネス)


掲示板利用宣言

 次のフォームをすべてチェックしてからご利用ください。

 私は

 題名と投稿者名は具体的に書きます。
 課題の丸投げはしません。
 ソースの添付は「HTML変換ツール」で字下げします。
 返信の引用は最小限にします。
 環境(OSとコンパイラ)や症状は具体的に詳しく書きます。
 返信の付いた投稿は削除しません。
 マルチポスト(多重投稿)はしません。

掲示板1

管理者用メニュー    ツリーに戻る    携帯用URL    ホームページ    記事検索    ログ    タグ一覧

No.6486

構造体データの検索
投稿者---meko(2006/09/14 21:56:09)


構造体データ
struct test {
    char name[20];
    int id;
    int score;
};

から、検索対象(例えばscore)を選択、データを入力して、
一致するリストのみを表示するプログラムです。

過去ログに似た事例があったので参考にソースを変更したのですが、
エラーになってしまいます。
ソースを載せますのでおかしい部分をご指摘いただければと思います。

struct test *search(struct test *list)
{
  char buf[BUF], dummy[BUF];
  char *target[] = {"名前", "学籍", "得点"};
  int i, cnt = 0,count = 0;
  struct list *t = list;
  int Num = atoi(buf);
  
  while (1) {
    puts("何で探しますか?\n名前:1 学籍:2 得点:3");
    scanf("%d", &i); gets(dummy);
    if (1 <= i && i <= 3) break;
  }
  printf("%sを入力して下さい:", target[--i]);
  gets(buf);
    
  while (t != NULL) {
    switch (i) {
    case 0:
      if (!strcmp(t->name, buf)) goto print;
      break;
    case 1:
      if (Num==(t->id)) goto print;
      break;
    case 2:
      if (Num==(t->score)) goto print;
      break;
    default:
      break;
    }
    t = t->next;
    cnt++;
    continue;
print:;
    printf("%d: 名前:%s 学籍:%d 得点:%d\n", ++cnt, t->name, t->id, t->score);
    t = t->next;
    count++;
  }
  printf("%d件見つかりました\n", count);
  
  return(list);
}



この投稿にコメントする

削除パスワード

発言に関する情報 題名 投稿番号 投稿者名 投稿日時
<子記事> Re:構造体データの検索 6488 meko 2006/09/14 21:59:39
<子記事> Re:構造体データの検索 6489 nano 2006/09/14 22:11:40
<子記事> Re:構造体データの検索 6490 かずま 2006/09/14 22:19:05
<子記事> Re:構造体データの検索 6492 nano 2006/09/14 22:22:31
<子記事> Re:構造体データの検索 6493 yoh2 2006/09/14 22:49:16


No.6488

Re:構造体データの検索
投稿者---meko(2006/09/14 21:59:39)


環境を書き忘れました。
OSはWindows、Visual C++です。


この投稿にコメントする

削除パスワード

No.6489

Re:構造体データの検索
投稿者---nano(2006/09/14 22:11:40)


>過去ログに似た事例があったので参考にソースを変更したのですが、
>エラーになってしまいます。

どんなエラーでしょうか?

>ソースを載せますのでおかしい部分をご指摘いただければと思います。

そのプログラムは、main関数とsearch関数の2個の関数から
できているのですか?
その場合、main関数はこちらで勝手に作ってもかまいませんか?
できましたら、最初からソース全体を載せてくださる方が、
コンパイル〜実行がすぐにできて手間が省けるのですが…。


この投稿にコメントする

削除パスワード

No.6490

Re:構造体データの検索
投稿者---かずま(2006/09/14 22:19:05)


Num の値は?


この投稿にコメントする

削除パスワード

No.6492

Re:構造体データの検索
投稿者---nano(2006/09/14 22:22:31)


>ソースを載せますのでおかしい部分をご指摘いただければと思います。

とりあえず1つだけ。

>  int Num = atoi(buf);

atoi関数を実行するタイミングが不適切です。
まだgets関数を実行していませんので、
この時点でbufに何が入っているかはわかりません。

他にも問題があるかもしれませんが、
それはソースコード全体がそろってから、ということで。


この投稿にコメントする

削除パスワード

No.6493

Re:構造体データの検索
投稿者---yoh2(2006/09/14 22:49:16)


> struct test {
>     char name[20];
>     int id;
>     int score;
> };
>     t = t->next;

nextというフィールドが見当りませんけど。
実は配列というオチ?

他に、listを作成した時、NULLで終わるように作られているかどうかも確認しておくといいかも。


この投稿にコメントする

削除パスワード

No.6494

解決しました。ありがとうございます。
投稿者---meko(2006/09/14 23:09:33)


皆様、レスありがとうございます。お陰で問題が解決しました。

>できましたら、最初からソース全体を載せてくださる方が、
>コンパイル〜実行がすぐにできて手間が省けるのですが…。
次の機会があれば質問する時は全て掲載するよう心にとめておきます。
エラーは「エラーが発生しました」といって強制終了になるものでした。

>atoi関数を実行するタイミングが不適切です。
atoiをbuf取得後に実行したらエラーがなくなりました。

>nextというフィールドが見当りませんけど。
コピーした時に範囲に含めるのを忘れてしまいました。すみません。
struct test *next が実際には宣言されています。

今後のために、一応main関数も掲載させていただきます。
int main( void )
{
        struct test *list= NULL;
        int code;

        while( 1 ) {
            printf( "機能>>読込:1 検索:5 終了:9\n");
            scanf( "%d", &code );

            if ( code == 9 )    break;
            else if ( code == 1 ){     /* 読み込み処理 */
            }else if ( code == 5 ){   list = search(list);
            }else{                    fflush(stdin);
            }
        }
        return 0;
}



この投稿にコメントする

削除パスワード

管理者用メニュー    ツリーに戻る    携帯用URL    ホームページ    記事検索    ログ    タグ一覧





掲示板提供:(有)リアル・インテグリティ