如何比较我从文件中读取的值并将其与队列中的所有值进行比较?

How to compare a value that I read from a file and compare it to all the values in a queue?

我基本上是从文本文件中读取行并将其保存到队列中。但是,我需要确保行的一部分没有重复,所以我需要一个函数来检查该字符串是否已经在队列中。

这是我的结构和主要功能的一部分:

struct Runway0TakeOff{      
    char fdetails[10];
    int TakeOffHours;
    int TakeOffMins;
    int passengers;
    int WaitingTime;
    struct Runway0TakeOff *nextPtr;
};

typedef struct Runway0TakeOff RunZeroTakeOff;
typedef RunZeroTakeOff *RunZeroTakeOffPtr;

void AddToRunway0T(RunZeroTakeOffPtr *r0ThPtr, RunZeroTakeOffPtr *r0TtPtr, char fdetails[], int TakeOffHours, int TakeOffMins, int passengers);
int inTheSystem(RunZeroTakeOffPtr currentPtr, char fdetails[]);
int isEmpty(RunZeroTakeOffPtr r0ThPtr);

int main()
{
    int c, numberoflines, s, k, n, f, t;
    char  OptionCode[ROW][COLUMN], details[10], fdetails[10];

    int TakeOffHours, TakeOffMins, passengers, ArrivalTimeMins, ArrivalTimeHours;

    RunZeroTakeOffPtr r0ThPtr=NULL;
    RunZeroTakeOffPtr r0TtPtr=NULL;

    FILE * fPointer;
    fPointer = fopen("planes.txt","r");

    c=0;

    while ((c < ROW) && fgets(OptionCode[c], COLUMN, fPointer))
    { 
        ++c;
    }

    for(k=0;k<8;k++)
    {
        n=0;
        for (s = 2; s < 9; s++)
        {
            details[n] = OptionCode[k][s];
            ++n;
            details[7]='[=10=]';
            sprintf(fdetails, "%c%c %c%c%c%c%c", details[0], details[1], details[3], details[4], details[5], details[6], details[7]);
        }

        if(OptionCode[k][0]=='T')
        {  
            TakeOffHours=((OptionCode[k][10]-'0')*10)+(OptionCode[k][11]-'0');
            TakeOffMins=((OptionCode[k][13]-'0')*10)+(OptionCode[k][14]-'0');
            passengers=((OptionCode[k][16]-'0')*100)+((OptionCode[k][17]-'0')*10)+(OptionCode[k][18]-'0');
            AddToRunway0T(&r0ThPtr, &r0TtPtr, fdetails, TakeOffHours, TakeOffMins, passengers);

            printQueue(r0ThPtr);
            inTheSystem(r0ThPtr,fdetails);
        }
        fclose(fPointer);
    }
}

void AddToRunway0T(RunZeroTakeOffPtr *r0ThPtr, RunZeroTakeOffPtr *r0TtPtr, char fdetails[], int TakeOffHours, int TakeOffMins, int passengers)
{
    RunZeroTakeOffPtr newPtr;
    int WaitingTime=0;

    newPtr=malloc( sizeof(RunZeroTakeOff) );

    if( newPtr!=NULL)
    {
        strncpy(newPtr->fdetails,fdetails,sizeof(RunZeroTakeOff));
        newPtr->TakeOffHours=TakeOffHours;
        newPtr->TakeOffMins=TakeOffMins;
        newPtr->passengers=passengers;
        newPtr->nextPtr=NULL;
        newPtr->WaitingTime=0;

        printf("%s %d %d %d %d\n", fdetails, TakeOffHours, TakeOffMins, passengers, WaitingTime);

        if( isEmpty(*r0ThPtr))
        {
            *r0ThPtr=newPtr;
        }
        else
        {
            (*r0TtPtr)->nextPtr=newPtr;
        }

        *r0TtPtr=newPtr;
    }
}

int isEmpty(RunZeroTakeOffPtr r0ThPtr)
{
    return r0ThPtr==NULL;
}

int inTheSystem(RunZeroTakeOffPtr currentPtr, char fdetails[])
{
    while(currentPtr->nextPtr!=NULL)
    {
        if(strcmp(fdetails,currentPtr->fdetails)==0)
        {
            printf("It's a match!\n");
        }
        else{
            printf("Nein\n");
        }
    }
    currentPtr = currentPtr->nextPtr;
}

我的 inTheSystem 函数 returns 是 "Nein" 的无限循环。我已经知道它不会与队列中的所有元素进行比较,而且我也真的不知道该怎么做。我希望我的问题足够清楚。我只是想比较程序最近读取的fdetails,并与之前读取并保存在队列中的所有fdetails进行比较。

注意:不要介意额外声明的变量,这个程序只完成了一半。

你可以通过比较 currentPtrNULL 来控制循环 在你的循环中你必须迭代到下一个元素currentPtr=currentPtr->nextPtr;(你在外面做的)

int inTheSystem(RunZeroTakeOffPtr currentPtr,char *fdetails[])
{
    int count = 0;
    while ( currentPtr != NULL )
    {
        if(strcmp(fdetails,currentPtr->fdetails)==0)
        {
            count ++;
            printf("It's a match!\n");
        }
        else{
            printf("Nein\n");
        }
        currentPtr=currentPtr->nextPtr;
    }
    return count;
}