Как я могу создать разные списки для каждого текстового файла?

#c #list

#c #Список

Вопрос:

До сих пор я писал программу ниже, но дело в том, что она создает список для всех пакетов, которым удается войти в список. Я хочу иметь 10 списков вместо 1, и это потому, что мне нужно открыть 10 текстовых файлов. Я думаю, что использование одной и той же функции вставки 10 раз создаст один и тот же список, поэтому нужно ли мне создавать 10 указателей на заголовки, чтобы при открытии текстового файла 1 пакеты из него попадали в список 1 и т. Д.? Любая помощь будет очень признательна.

 struct Packet {  int rollnumber;  int src;  int dest;  double gentime;  struct Packet *next;  }* head;  void insert(int rollnumber, int src, int dest, double gentime) {  struct Packet * packet = (struct Packet *) malloc(sizeof(struct Packet));   packet-gt;rollnumber = rollnumber;  packet-gt;src=src;  packet-gt;dest=dest;  packet-gt;gentime = gentime;  packet-gt;next = NULL;   if(head==NULL){  // if head is NULL  // set packet as the new head  head = packet;  }  else{  // if list is not empty  // insert packet in beginning of head  packet-gt;next = head;  head = packet;  }  }  void display() { struct Packet * temp = head; while(temp!=NULL) {  printf("Roll Number: %dn",temp-gt;rollnumber);  printf("src: %dn", temp-gt;src);  printf("dest: %dn", temp-gt;dest);  printf("gentime: %0.1fnn", temp-gt;gentime);  //printf("offtime: %0.1fnn", temp-gt;offtime);  temp = temp-gt;next;  } }  int main(int argc, char **argv) {  char line[MAX_LINE_LENGTH] = {0};  int src,dest; int rollnumber; double gentime;  int i=1;  static unsigned long pos[] = {0};  FILE *file; char filename_format[] = "fptg_%d.txt";  double Time=12.0;  int insertedpackets[1000];    struct node * head = NULL;     for (Time=12.0; Timelt;60.0; Time=Time 12.0){    for(i=1;ilt;=10;i  ){    char to_open[32];  snprintf(to_open,32, "fptg_%d.txt", i);  printf("nnFPTG_%d.txtn", i);    if ((file = fopen(to_open, "r")) == NULL)  {  break;  }else{  fseek(file , pos[i], SEEK_CUR);  fgets(line, sizeof(line), file);  sscanf(line,"%d %d %d %lf",amp;rollnumber, amp;src, amp;dest, amp;gentime);  printf("%s", line);  printf("Return value=%dn",sscanf(line, " %d %d %d %lf", amp;rollnumber, amp;src, amp;dest, amp;gentime));  printf("gentime=%.1fn", gentime);  pos[i] = ftell(file);  if (gentimelt;Time){    printf("okn");  insert(rollnumber,src,dest,gentime);   printf("Time=%0.1fn", Time);    }  fclose(file);   }   }  }  printf("nnTHE LIST:n");  display(); }  

Комментарии:

1. char filename[sizeof(filename_format) 4]; не имеет смысла, эта переменная все равно не используется. Ваш код может быть воспроизводимым, но это не минимум.

2. @BarmakShemirani просто немного отредактировал, чтобы быть минимальным, извините за беспокойство раньше

3. После вызова fopen позвоните fclose , когда вам больше не понадобится указатель на файл. Похоже, что это попытка доступа к fopen одному и тому же файлу, во второй раз она завершится неудачей и не выдаст ошибку.

4. @BarmakShemirani добавил и это, но как насчет различных списков, которые мне нужно создать? Возможно ли это?