#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 добавил и это, но как насчет различных списков, которые мне нужно создать? Возможно ли это?