-1
我確信我錯過了這裏的一個小細節,但我似乎無法把它放在手指上。如果你能指出我正確的方向,我會非常感激。我用C寫的一個非常簡單的排隊功能:Enqueue函數僅在第二次迭代中覆蓋第一個條目
int enqueue(char **queue, char *new_item) {
if (queueLength >= MAX_ITEMS) {
perror("Item count exceeds allowed range\n");
return 1;
}
else {
if (queueStart == -1) { // empty queue
queueStart = 0;
queueEnd = 0;
}
else {
if (queueEnd == MAX_ITEMS - 1)
queueEnd = 0;
else queueEnd++;
}
// if queue[queueEnd] has not been initialized, allocate memory to initialize
if (queue[queueEnd] == NULL) {
if ((queue[queueEnd] = (char *)malloc(PATH_MAX * sizeof(char))) == NULL) {
perror("Could not allocate enough space for data");
return 1;
}
}
strcpy(queue[queueEnd], new_item);
queueLength++;
}
// print queue
int j = queueStart;
while (j <= queueEnd) {
printf("%s\n", queue[j]);
j++;
}
printf("-----\n");
return 0;
}
調用一次給一個項目添加到我的隊列後,我的隊列是這樣的:
item1
調用它第二次後,我的隊列是這樣的:
item2
item2
第三,第四和第五時間後:
item2
item2
item3
item4
item5
所以這個問題與第二次迭代是分離的。歡迎任何有用的觀察,想法或評論!
此外,這是一個調用enqueue的代碼片段。 inputFile是一個打開的文件流。
char **queue;
char buff[PATH_MAX];
while (fgets(buff, PATH_MAX, inputFile) != NULL) {
if (enqueue(queue, buff)) {
printf("Failed to add client %s to queue", buff);
return 1;
}
}
看到調用'unqueue'並打印該數組的代碼會很有幫助。 –
感謝您的迴應。我添加了用於打印隊列內容的代碼。 – Kaitlyn
注意:我的打印代碼僅用於調試目的,並且我意識到,當隊列結束迴繞到開始時它不起作用。 – Kaitlyn