1

リンクされたリストを作成してからファイルに書き込み、再度読み取ります。fwrite と fread を使用して、一度に構造体のインスタンス全体を読み書きしています。しかし問題は、それが正しく機能していないことです。出力ファイルを見た後、書き込みは正常に機能していると思いますが、まだよくわかりません。しかし、読書はまったく機能していません。

以下は構造です

struct student
{
int roll_num;
char name[100];
struct student *next;
};

以下はロジックです

ifd = fopen("qwer1234.txt","wb");
struct student *temp;
temp = start;
while(temp != NULL)
{
    fwrite(temp, sizeof(struct student), 1, ifd);
    temp = temp->next;
}
close(ifd);


ifd = fopen("qwer1234.txt","rb");
temp = NULL;
temp = malloc(sizeof(struct student));
fread(temp, sizeof(struct student), 1, ifd);
start = temp;
//temp->next = NULL;
printf("%s\t%d\n",temp->name,temp->roll_num);
temp = malloc(sizeof(struct student));
/*while(fread(temp, sizeof(struct student), 1, ifd) == 1)
{

    temp->next = start;
    start = temp;
    printf("%d/n",temp->roll_num);
    temp = malloc(sizeof(struct student));

}*/
close(ifd);

当分の間、1 つのインスタンスしか読み取っていませんが、まだ機能していません。temp->name には何も格納されず、temp->roll_num には 0 が格納されます。私は過去4時間それに立ち往生しています。構造体の要素を個別に格納することで実現できますが、今回は別の方法で実現したいと考えました。

そして、それが重要なすべての人にとって、これは宿題の質問です.

どんな助けでも大歓迎です。ありがとう :)

4

1 に答える 1

1

手始めに、

close(ifd); 

記述子ではないため、正しくありませんFILE*。使用する:

fclose(ifd);

フラッシュしていないので、かなりのリストでない限り、まだ何も書き込まれていない可能性があり、ファイルにまだデータがないため、新しい割り当てがリスト内の唯一の割り当てになります。

于 2013-01-20T07:32:57.017 に答える