1

ファイルをコピーするための私のコードは次のとおりです。

song_t *ReadFile(song_t *head){
FILE *input;
input = fopen("MusicLibrary.txt", "r");
song_t *temp = head;
string title;
string artist;
string album;
string genre;
string store;
string buffer;

while(fgets(buffer, MAXSIZE, input) != NULL){
    temp = (song_t *)malloc(sizeof(song_t));
    fgets(temp->title, MAXSIZE, input);
    fgets(temp->artist, MAXSIZE, input);
    fgets(temp->album, MAXSIZE, input);
    fgets(temp->genre, MAXSIZE, input);
    fgets(store, MAXSIZE, input);
    temp->rating = atof(store);
    temp->next == NULL;
    temp = temp->next;
}

fclose(input);
return head;
}

そして、ここに私の構造体のコードがあります:

typedef struct song{
string title;
string artist;
string album;
string genre;
float rating;
struct song *next;
}song_t;

また、typedef char string[30];

ファイルからメインの構造にデータをコピーできないようです。誰でもこれで私を助けることができますか?

4

1 に答える 1

3
while(fgets(buffer, MAXSIZE, input) != NULL){
    temp = (song_t *)malloc(sizeof(song_t));
    fgets(temp->title, MAXSIZE, input);
    fgets(temp->artist, MAXSIZE, input);
    fgets(temp->album, MAXSIZE, input);
    fgets(temp->genre, MAXSIZE, input);
    fgets(store, MAXSIZE, input);
    temp->rating = atof(store);
    temp->next == NULL;
    temp = temp->next;
}

上記のコードには、入力ファイル形式によっては問題にならない問題がいくつかありますが、次のようになります。


まず、行を捨てる a でwhileループを制御します。fgetsそれがあなたが望んでいたことだと確信していますか。


malloc次に、失敗した場合に備えて、からの戻り値を常に確認する必要があります。


3 番目に、各フィールドがそれぞれの行にあると想定しています。あなたはそれを確認する必要があります。


第 4 に、リンクされたリストに正しく挿入していません。リストの先頭に新しい項目を挿入することが目的の場合は、次のように変更します。

temp->next == NULL;
temp = temp->next;

の中へ:

temp->next == head;
head = temp;

次のように呼び出すようにしてください。

actualHead = ReadFile (actualHead);

headポインターを正しく更新します。


于 2012-10-06T08:50:39.387 に答える