サイトマップ / C言語講座出入り口総目次目次:ヒープ領域双方向リスト(ヘッダ)||ソース1||ソース2(出入り口)

青い直線

双方向リスト(ソース1)

青い直線
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#include "Myhead.h"

  /* ファイルの読み書きに使う書式文字列 */
  /* 書式指定子はスペースで区切る */
static char *FIELD = "%40s %8lu";

  /* ファイルからデータを読み込む */
shop *ReadData(shop *head, FILE *fp)
{
    shop *p;
    char name[MAX_ITEM_NAME + 1];
    unsigned long prise;

      /* ファイルからデータ読み込みに成功したら */
    while ((fscanf(fp, FIELD, name, &prise)) != EOF) {
          /* メモリを割り付けて */
        if ((p = (shop *)malloc(sizeof(shop))) == NULL) {
            fprintf(stderr, "メモリ不足です。\n");
            exit(2);
        }
          /* データを書き込む */
        strcpy((*p).item.name, name );
        (*p).item.prise = prise;

        p->previous = head;    /* head の後ろに */
        head->next = p;        /* p が来るように */
                               /* ポインタのつなぎ変え */

        p->next = NULL;        /* データーの末尾 */

        head = p;              /* 次のループに備える */
    }
    return (head);
}

  /* ファイルにデータを書き込む */
void *WriteItem(FILE *nfp, shop *head)
{
    head = head->next;      /* head にはゴミが入っている */

    while (head != NULL) {
        fprintf(nfp, FIELD, (*head).item.name, (*head).item.prise);
        head = head->next;
    }
}
青い直線

/* (C) 2000- YFプロ. All Rights Reserved. */    提供:C言語講座−それ自体コンパイルできる教材を使った講座です−

青い直線

サイトマップ / C言語講座出入り口総目次目次:ヒープ領域双方向リスト(ヘッダ)||ソース1||ソース2(出入り口)