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];

我似乎无法将数据从文件复制到 main 中的结构。谁能帮我这个?

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;
}

上面的代码有一些问题,根据你输入的文件格式可能不是问题,但是这里有:


首先,您while使用 a 来控制循环,该循环fgets会抛出一条线。你确定那是你想要的。


其次,您应该始终检查返回值malloc,以防万一失败。


第三,您假设每个字段都在自己的行上。你应该确认一下。


第四,您并没有真正正确地插入到链表中。如果您的意图是在列表的开头插入新项目,请更改:

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

进入:

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

并确保您将其称为:

actualHead = ReadFile (actualHead);

正确更新head指针。


于 2012-10-06T08:50:39.387 回答