Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ajax/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/ant/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 如何将从文件中读取的值与队列中的所有值进行比较?_C_Queue - Fatal编程技术网

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

C 如何将从文件中读取的值与队列中的所有值进行比较?,c,queue,C,Queue,我基本上是从文本文件中读取行并将其保存到队列中。但是,我需要确保行的一部分没有重复,因此我需要有一个函数来检查该字符串是否已经在队列中 以下是我的结构和主要功能的一部分: struct Runway0TakeOff{ char fdetails[10]; int TakeOffHours; int TakeOffMins; int passengers; int WaitingTime; struct Runway0TakeOff *n

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

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

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]='\0';
            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;
}
struct Runway0TakeOff{
char-fdetails[10];
国际航班起飞时间;
国际起飞;
国际旅客;
国际等待时间;
结构跑道0takeoff*nextPtr;
};
类型定义结构跑道0起飞跑道0起飞;
typedef runzeroaftoff*runzeroaftoffptr;
void AddToRunway0T(runzerotakoffptr*r0ThPtr、runzerotakoffptr*r0TtPtr、char fdetails[],国际起飞时间、国际起飞分钟、国际乘客);
系统中的int(runzerotakoffptr currentPtr,char fdetails[]);
int isEmpty(runzerotakoffptr r0ThPtr);
int main()
{
int c,行数,s,k,n,f,t;
字符选项代码[行][列]、详细信息[10]、详细信息[10];
国际起飞时间、起飞时间、乘客、到达时间、到达时间;
runzerotakoffptr r0ThPtr=NULL;
runzerotakoffptr r0TtPtr=NULL;
文件*fPointer;
fPointer=fopen(“planes.txt”、“r”);
c=0;
while((cTakeOffHours=起飞时间;
newPtr->TakeOffMins=起飞分钟;
新建PTR->乘客=乘客;
newPtr->nextPtr=NULL;
newPtr->WaitingTime=0;
printf(“%s%d%d%d%d\n”,F详细信息、起飞时间、起飞分钟、乘客、等待时间);
如果(isEmpty(*r0ThPtr))
{
*r0ThPtr=newPtr;
}
其他的
{
(*r0TtPtr)->nextPtr=newPtr;
}
*r0TtPtr=newPtr;
}
}
int isEmpty(runzerotakoffptr r0ThPtr)
{
返回r0ThPtr==NULL;
}
int在系统中(runzerotakoffptr currentPtr,char fdetails[])
{
同时(currentPtr->nextPtr!=NULL)
{
if(strcmp(fdetails,currentPtr->fdetails)==0)
{
printf(“匹配!\n”);
}
否则{
printf(“无”);
}
}
currentPtr=currentPtr->nextPtr;
}
我的inTheSystem函数返回一个无限循环“Nein”。我已经知道它无法与队列中的所有元素进行比较,我也不知道如何做到这一点。我希望我的问题足够清楚。我只想比较程序最近读取的FD详细信息,并将其与之前在队列中读取和保存的所有FD详细信息进行比较


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

通过比较
currentPtr
NULL
在循环内部您必须迭代到下一个元素
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;
}