【发布时间】:2015-08-01 20:22:12
【问题描述】:
我正在尝试编写一个程序,它将 .bin 文件读入动态分配的结构中。 似乎在做我想做的事,直到我需要打印结果。我一遍又一遍地遇到同一个结构的无限循环,而不是每个结构只有一次。代码如下:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<time.h>
main(){
//File pointer
FILE *binFile = NULL;
//Struct declaration
typedef struct flightData_struct {
char flightNum[7];
char origCode[5];
char destCode[5];
int timeStamp;
struct flightData_struct* next;
} flightData;
flightData myFlightData;
struct flightData_struct *head;
struct flightData_struct *tail;
//Opening file
printf("Opening file...\n");
binFile = fopen("acars.bin", "rb");
if (binFile == NULL){
printf("ERROR: Could not open file. Please try again.");
return -1;
}
//Malloc'ing first struct
struct myflightData *point = (struct myFlightData*) malloc(sizeof(flightData));
fread(point, sizeof(flightData), 1, binFile);
head = point;
tail = point;
//Malloc'ing structs
while (!feof(binFile)){
flightData *temp = (struct flightData*) malloc(sizeof(flightData));
fread(temp, sizeof(flightData), 1, binFile);
temp->next = NULL;
tail->next = temp;
tail = tail->next;
}
tail = head;
while (tail != 0){
int t;
t = tail->timeStamp;
time_t time = t;
printf("%s| %s| %s| %s\n\n", tail->flightNum, tail->origCode, tail->destCode, asctime(gmtime(&time)));
}
//Closing file
printf("Closing file...");
fclose(binFile);
return 0;
}
这是我从中得到的输出(它似乎无限循环)。
【问题讨论】:
-
如果这个循环
while (tail != 0)一旦开始,你为什么期望它结束,tail的值在循环内永远不会改变? -
哦!现在我看到了,谢谢。不过,现在我不确定我应该怎么做才能解决这个问题。有什么建议吗?
-
我认为这是家庭作业:看看如何在分配循环中将节点添加到列表中。另请注意,您已存储头部。为了更好地打印,从头开始从一个节点到下一个节点,直到
next指针为NULL。 -
不管某些教练告诉你什么,这个:
while (!feof(binFile))是错误的,因为你正在使用它。 Read this 了解原因。您忽略了从fread返回的任何读取失败,并假设它始终有效。假设是一切之母......
标签: c printing struct linked-list infinite-loop