掲示板ランキング  靴下・ストッキング(かかとケア用靴下)


掲示板利用宣言

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

 私は

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

掲示板1

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

No.7013

リストに関する処理について(関数未使用)
投稿者---蒼(2007/01/17 12:14:09)


こんにちは。

今回は、リストに関する処理について質問させて下さい。

以下のようなプログラムを書いたのですが、
データの追加と、終了はちゃんと出来るのですが、
リストの表示がされません。
どこに問題があるのか教えていただけないでしょうか。

環境は、ウィンドウズXP、コンパイラはputtyです。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define BUFSIZE 100
#define NAMESIZE 100

struct CELL {
  char name[NAMESIZE];
  struct CELL *next;
};

int main(void)
{
  char buf[BUFSIZE];
  struct CELL *head, *tail;
  struct CELL *tmpc;

  head = NULL;
  tail = NULL;

 while (1) {
    printf("q) Quit\n");
    printf("1) Add data\n");
    printf("2) Delete data\n");
    printf("3) Show list\n");
    printf("Input command -> ");

    fgets(buf, BUFSIZE, stdin);

    if (strchr(buf, 'q') != NULL) {
      break;
    } else if(strchr(buf, '1') != NULL) {
      printf("Input name -> ");
      fgets(buf, BUFSIZE, stdin);
      buf[strlen(buf) - 1] = '\0';

      tmpc = (struct CELL *)malloc(sizeof(struct CELL));
      if (tmpc == NULL) {
      printf("memory allocation error!!\n");
      exit(EXIT_FAILURE);
      }

    strcpy(tmpc->name, buf);

    if (head == NULL) {
    head = tmpc;
  } else {
    tail->next = tmpc;
  }
  tail = tmpc;
  tail->next = NULL;
    } else if (strchr(buf, '2') != NULL) {
      if (head != NULL) {
        if (head->next == NULL) {
          tail = NULL;
        }
        tmpc = head->next;
        free(head);
        head = tmpc;
   } else if (strchr(buf, '3') != NULL) {
     for (tmpc = head; tmpc != NULL; tmpc = tmpc->next) {
      printf("%s\n", tmpc->name);
  }
    }
}
}
}


よろしくお願いします。


この投稿にコメントする

削除パスワード

発言に関する情報 題名 投稿番号 投稿者名 投稿日時
<子記事> Re:リストに関する処理について(関数未使用) 7014 kolona 2007/01/17 12:52:13
<子記事> Re:リストに関する処理について(関数未使用) 7015 bar 2007/01/17 13:44:10
<子記事> Re:リストに関する処理について(関数未使用) 7016 wis 2007/01/17 17:01:31
<子記事> Re:リストに関する処理について(関数未使用) 7024 2007/01/19 21:16:41


No.7014

Re:リストに関する処理について(関数未使用)
投稿者---kolona(2007/01/17 12:52:13)


>こんにちは。
>
>今回は、リストに関する処理について質問させて下さい。
>
>以下のようなプログラムを書いたのですが、
>データの追加と、終了はちゃんと出来るのですが、
>リストの表示がされません。
>どこに問題があるのか教えていただけないでしょうか。
>
>環境は、ウィンドウズXP、コンパイラはputtyです。
>

処理はほぼ完全にできてます。
しかし、インデントがおかしいため、入力数値による処理の振り分けがおかしくなってます。
インデントし直して}を1個つけ直すだけで解決します。

ps.
puttyはコンパイラじゃないと思います。
普通、puttyといったらsshクライアントソフトですから
リモートホストにアクセスして、リモートホスト先でコンパイルしているのでは?



この投稿にコメントする

削除パスワード

No.7015

Re:リストに関する処理について(関数未使用)
投稿者---bar(2007/01/17 13:44:10)


  }
    }
}
}
}


コードを書くときにインデントをしっかり意識していれば、
こういう風になることはまずありえません。
「これは美しくないぞ」という感覚を持つことが大事です。


この投稿にコメントする

削除パスワード

No.7016

Re:リストに関する処理について(関数未使用)
投稿者---wis(2007/01/17 17:01:31)


悪いところは括弧の対応ですね。
自分で貼り付けたものと、
コメントを入れたものを
比較してみると分かるかも。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define BUFSIZE 100
#define NAMESIZE 100

struct CELL {
  char name[NAMESIZE];
  struct CELL *next;
};

int main(void)
{
  char buf[BUFSIZE];
  struct CELL *head, *tail;
  struct CELL *tmpc;

  head = NULL;
  tail = NULL;

  while (1) {

    printf("q) Quit\n");
    printf("1) Add data\n");
    printf("2) Delete data\n");
    printf("3) Show list\n");
    printf("Input command -> ");

    fgets(buf, BUFSIZE, stdin);

    if (strchr(buf, 'q') != NULL) {
      break;
    } else if(strchr(buf, '1') != NULL) {

      printf("Input name -> ");
      fgets(buf, BUFSIZE, stdin);
      buf[strlen(buf) - 1] = '\0';
      tmpc = (struct CELL *)malloc(sizeof(struct CELL));
      if (tmpc == NULL) {
        printf("memory allocation error!!\n");
        exit(EXIT_FAILURE);
      }//if (tmpc == NULL)


      strcpy(tmpc->name, buf);

      if (head == NULL) {
        head = tmpc;
      } else {
        tail->next = tmpc;
      }//if (head == NULL)


      tail = tmpc;
      tail->next = NULL;

    } else if (strchr(buf, '2') != NULL) {

      if (head != NULL) {
        if (head->next == NULL) {
          tail = NULL;
        }//if (head->next == NULL)


        tmpc = head->next;
        free(head);
        head = tmpc;
      }//if (head != NULL)


    } else if (strchr(buf, '3') != NULL) {
      for (tmpc = head; tmpc != NULL; tmpc = tmpc->next) {
        printf("%s\n", tmpc->name);
      }//for (tmpc = head; tmpc != NULL; tmpc = tmpc->next)

    }// if (strchr(buf, 'q') != NULL)

  }//while (1)


  return 0;
}

#あまりコメントを入れすぎるのも良くありませんが、
#括弧の中身が長い場合は対応する括弧の跡に
#コメントを入れたりする場合もあります。
#まぁ、そういう場合は殆ど関数化しますが。。。



この投稿にコメントする

削除パスワード

No.7024

Re:リストに関する処理について(関数未使用)
投稿者---蒼(2007/01/19 21:16:41)


修正したところ、きちんと動くようになりました。

遅くなりましたが、教えて頂いた皆さん、
有難うございました。
失礼します。


この投稿にコメントする

削除パスワード

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





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