如何使用char结构正确建立链表

时间:2019-06-27 05:07:34

标签: c data-structures linked-list

我有一个动态结构链表,我需要创建以下功能:
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>

感谢您的帮助

1 个答案:

答案 0 :(得分:0)

代码存在多个问题。

  1. 您正在使用AddElement写入文件,然后使用ReadElement进行读取。从第二项开始,您将读取read函数中的所有元素。因此,如果您写了10张专辑,则每次都将在ReadElement中阅读所有专辑。对于下一次写入,您将丢弃读入链接列表的10张专辑,然后再次阅读11张专辑。

ReadElement在这种情况下不起作用,可以丢弃。

  1. AddElement中,您正在编写albA,而在ReadElement

  2. 中读取了许多其他参数
  3. 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;
    }     
}