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