0
我基本上是从文本文件读取行并将其保存到队列中。但是,我需要确保的一部分行不重复,所以我需要一个函数来检查该字符串是否已经在队列中。如何比较我从文件中读取的值并将其与队列中的所有值进行比较?
这是我的主要功能结构和组成部分:
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;
}
我inTheSystem函数返回“Nein”的无限循环。我已经知道它不会与队列中的所有元素进行比较,我真的不知道该怎么做。我希望我的问题很清楚。我只想比较最近由程序读取的fdetails,并将其与之前读取并保存在队列中的所有之前的fdetails进行比较。
注意:不要介意额外声明的变量,这个程序只是一半完成。
了解如何使用调试器。他们很平静(至少在大多数时候),是有帮助的,并且会解决你的问题,或者至少缩小它的范围。 – Downvoter