現在、課題で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をどのようにして選んだデータと結びつけてデータの変更をするのかが困っております。
もし、よろしければご教授お願いします。
住所録の単方向リストによる作成
Re: 住所録の単方向リストによる作成
・とりあえずコードはインデントを揃えた形にしてください.見難いとそれだけで見る気が失せる→結果回答が減る 可能性があります.
・aaa.data, save.data といったファイルの役割はなんですか?
・おそらく「既存のデータをファイルからロードした後で,特定のデータを変更」ということをしたいのだと思いますが…
その前に「既存データをロードしたら→それらの内容を列挙して表示する」ことが実現できますか?
(これができるなら,「j番目のデータがどれか?」は自明です.)
・課題であれば,さしつかえなければ その問題文を全文そのまま書いた方が無駄な問答を繰り返さなくて済むかもしれません.
(たとえば,”1個のデータだけを変更したら終了していいのか,引き続き他のデータの変更も行えるのか?”とかいった事柄の確認等)
#なんかこの手の課題が多いような…? 流行っているのでしょうか?
・aaa.data, save.data といったファイルの役割はなんですか?
・おそらく「既存のデータをファイルからロードした後で,特定のデータを変更」ということをしたいのだと思いますが…
その前に「既存データをロードしたら→それらの内容を列挙して表示する」ことが実現できますか?
(これができるなら,「j番目のデータがどれか?」は自明です.)
・課題であれば,さしつかえなければ その問題文を全文そのまま書いた方が無駄な問答を繰り返さなくて済むかもしれません.
(たとえば,”1個のデータだけを変更したら終了していいのか,引き続き他のデータの変更も行えるのか?”とかいった事柄の確認等)
#なんかこの手の課題が多いような…? 流行っているのでしょうか?