我有一个动态结构链表,我需要创建以下功能:
1.将从文本文件加载数据。
2.将新元素添加到我的链表结构中。
3.输出链接列表中存在的所有数据。
我也有菜单,因此我调用这些功能来输入控制台中需要的内容。
我想我在动态数据分配和指针方面存在问题。
https://imgur.com/a/8ynqar8
我已经苦苦挣扎了几天,试图用适当的分配指针解决问题。
void ReadElement (void)
void LoadData(void)
void OutpuAll(void)
这些函数结尾处的指针给我带来一些麻烦
<div class="form-group row">
<div class="input-group mb-3">
<div class="custom-file">
<input type="file" class="custom-file-input" id="inputGroupFile02">
<div class="custom-file-label">
<div class="progress" style="height:40px">
<div class="progress-bar" role="progressbar" aria-valuenow="25" style="width: 25%" aria-valuemin="0" aria-valuemax="100"></div>
</div>
</div>
</div>
<div class="input-group-append">
<button class="btn btn-outline-secondary" type="button">Upload</button>
</div>
</div>
</div>
感谢您的帮助
答案 0 :(得分:0)
代码存在多个问题。
AddElement
写入文件,然后使用ReadElement
进行读取。从第二项开始,您将读取read函数中的所有元素。因此,如果您写了10张专辑,则每次都将在ReadElement
中阅读所有专辑。对于下一次写入,您将丢弃读入链接列表的10张专辑,然后再次阅读11张专辑。 ReadElement
在这种情况下不起作用,可以丢弃。
在AddElement
中,您正在编写albA
,而在ReadElement
AddElement
以"r"
模式打开文件,该模式会将文件指针设置为文件的开头。您需要以"a"
模式打开它
还有其他问题,您可以查看下面的代码以供参考。
LEL *head = NULL;
LEL *currrent = NULL;
void AddElement (void) // I have an empty file that i fill and then read and link to my main structure(this works fine)
{
char albN[25], albR[11], albL[11], albA[25], albI[5];
FILE * fileD;
fileD = fopen("DATAinput.txt", "a");
printf("Enter album artist \n");
scanf("%s", albA);
fprintf(fileD, "%s ", albA);
// add other scanf and fprintfs
fclose(fileD);
}
void LoadData(void)
{
LEL *ptr;
FILE * file;
file = fopen("DATA.txt", "r");
if (file == NULL) {
printf("Can not open the file\n");
}
while(fscanf (file, "%s %s %s %s %s", ptr->inform.index, ptr->inform.name, ptr->inform.release, ptr->inform.length, ptr->inform.artist) == 5)
{
ptr = malloc(sizeof(LEL));
ptr->next=NULL;
printf("\n %s Album: %s Released: %s Length: %s Artist: %s", ptr->inform.index, ptr->inform.name, ptr->inform.release, ptr->inform.length, ptr->inform.artist);
if (head == NULL)
{
head = ptr;
current = ptr;
}
else
{
current ->next = ptr;
current = current->next;
}
}
fclose(file);
}
void OutpuAll(void) // Trying to output data that i previously loaded from files to structure.
{
LEL *ptr;
LEL* ptr = head;
while (ptr!=NULL) {
printf("\n Id:%s Album: %s Released: %s Length: %s Artist: %s", ptr->inform.index, ptr->inform.name, ptr->inform.release, ptr->inform.length, ptr->inform.artist);
ptr = ptr->next;
}
}