私が取っているクラスの割り当てをする必要があります。 Cの簡単な電話帳アプリです。プログラムに新しいものを使用する必要があるため、少し問題があります。期限はかなり厳しいです。mallocされたリンクリストをバイナリファイルから読み書きする
私は周りを見回して答えを見つけましたが、毎回新しいものが出ました。私は本質的でない部分を残し
typedef struct record
{
char fname[31];
char lname[31];
char tel[21];
struct record *next;
} record;
record *new_entry(record *first, char *fname, char *lname, char *tel)
{
record *new;
new=(record*) malloc(sizeof(record));
strcpy(new->fname, fname);
strcpy(new->lname, lname);
strcpy(new->tel, tel);
new->next=first;
}
void fileopen (char *db_file)
{
FILE *fp;
fp=fopen(db_file, "rb");
if (fp==NULL)
{
fp=fopen(db_file, "wb");
fclose(fp);
fp=fopen(db_file, "r+b");
}
}
int main
{
char db[51];
record *next = NULL;
printf("File: "); scanf("%s, db);
fileopen(db);
printf("First name: "); scanf("%s", fname);
printf("Last name: "); scanf("%s", lname);
printf("Phone number: "); scanf("%s", tel);
first=new_entry(*first, fname, lname, tel);
}
::)
これは私の(簡体字)プログラムです。 今はあまり分かりませんが、私のクラスリーダーは、バイナリファイルを使ってデータを保存して復元するべきだと言いました。しかし、私はfreadとfwriteをどうやって使うべきなのか、本当に混乱しました。
ありがとうございました!私はその概念を理解し始めると思う。 新しいバイナリファイルを起動すると、プログラムは要求時にデータを正しく表示しますが、閉じると、プログラムはデータを保存します(少なくとも、私はそれがそうだと思います。同じファイルを再度開くと、連絡先を一覧表示しようとしても何も起こりません。
ここでオープン関数(再び簡略化され、私は実際の割り当てに1つのレコード内の10件の詳細を持っている)だ:私が使用し、
record *open (char *db_file, record start)
{
FILE *fp
record *temp = start;
fp=fopen(db_file, "rb");
while (fread(temp, sizeof(rekord), 1, fp)>0)
{
fread(temp->fname, sizeof temp->fname, 1, fp);
fread(temp->lname, sizeof temp->lname, 1, fp);
fread(temp->tel, sizeof temp->tel, 1, fp);
temp=temp->next;
}
fclose(fp);
return temp;
}
そしてメインで():
start=open(db, start);
宣言部分:
record *start=NULL;
誰かが返信する場合はもう一度おねがいします。
何があなたを混乱させるのですか? – alk
ようこそStackOverflowへ。あなたは 'fread'と' fwrite'を使わなければいけませんか?あなたは 'fscanf' /' fprintf'を使うことが許されていますか?またあなたの特定の質問を忘れて、現在あなたの投稿は問題の説明だけです。 – Zeta
new_entry()の最後に 'return new;'を追加します。 – wildplasser