住所録の単方向リストによる作成
Posted: 2013年6月13日(木) 00:42
現在、課題でC言語で単方向リストによる住所録実装をしているのですが、すでに登録されているデータの変更でつまづいており
/* -------------------------------------------------------------------------------------- */
/* typedef宣言 */
/* -------------------------------------------------------------------------------------- */
typedef struct Address{
unsigned char name[256]; /* 氏名 */
char phonenumber[20]; /* 電話番号 */
char postcode[10]; /* 郵便番号 */
struct Address* next; /*次のアドレス格納領域 */
} ADDR;
/*プロトタイプ宣言(void amend(void)やvoid mainで登録、参照選択switch分)などのため省略
void amend(void)
{
long file_size=0;
long loop;
long j=0;
FILE *fp;
fp=fopen("aaa.data","rb");
ADDR *ptr = NULL; /* メモリ確保用 */
ADDR *now = NULL; /* 検索用 */
ADDR *addr = NULL; /*単方向リスト先頭アドレス*/
fseek(fp,0,SEEK_END);
file_size=ftell(fp);
fclose(fp);
for(loop=0;loop < file_size;loop += sizeof( ADDR )){
/* メモリ確保 --------------------------------------------------------------------------- */
ptr = (ADDR *)malloc( sizeof( ADDR ));
if( ptr == NULL ){
printf("メモリ確保失敗\n");
break;
}
/* 確保したメモリ領域を初期化 ----------------------------------------------------------- */
memset( ptr, 0, sizeof( ADDR ));
fp= fopen("save.data","rb");
fseek(fp,loop,SEEK_SET);
fread( ptr,sizeof( ADDR ),1,fp);
if( addr == NULL ){
addr = ptr;
}else{
for( now = addr; now->next != NULL;now = now->next );
now->next = ptr;
}
fclose(fp);
}
fp=fopen("save.data","wb");
printf("何件目を変更しますか?");
scanf("%s",&j);
まで完成したのですがこのjをどのようにして選んだデータと結びつけてデータの変更をするのかが困っております。
もし、よろしければご教授お願いします。
/* -------------------------------------------------------------------------------------- */
/* typedef宣言 */
/* -------------------------------------------------------------------------------------- */
typedef struct Address{
unsigned char name[256]; /* 氏名 */
char phonenumber[20]; /* 電話番号 */
char postcode[10]; /* 郵便番号 */
struct Address* next; /*次のアドレス格納領域 */
} ADDR;
/*プロトタイプ宣言(void amend(void)やvoid mainで登録、参照選択switch分)などのため省略
void amend(void)
{
long file_size=0;
long loop;
long j=0;
FILE *fp;
fp=fopen("aaa.data","rb");
ADDR *ptr = NULL; /* メモリ確保用 */
ADDR *now = NULL; /* 検索用 */
ADDR *addr = NULL; /*単方向リスト先頭アドレス*/
fseek(fp,0,SEEK_END);
file_size=ftell(fp);
fclose(fp);
for(loop=0;loop < file_size;loop += sizeof( ADDR )){
/* メモリ確保 --------------------------------------------------------------------------- */
ptr = (ADDR *)malloc( sizeof( ADDR ));
if( ptr == NULL ){
printf("メモリ確保失敗\n");
break;
}
/* 確保したメモリ領域を初期化 ----------------------------------------------------------- */
memset( ptr, 0, sizeof( ADDR ));
fp= fopen("save.data","rb");
fseek(fp,loop,SEEK_SET);
fread( ptr,sizeof( ADDR ),1,fp);
if( addr == NULL ){
addr = ptr;
}else{
for( now = addr; now->next != NULL;now = now->next );
now->next = ptr;
}
fclose(fp);
}
fp=fopen("save.data","wb");
printf("何件目を変更しますか?");
scanf("%s",&j);
まで完成したのですがこのjをどのようにして選んだデータと結びつけてデータの変更をするのかが困っております。
もし、よろしければご教授お願いします。