【发布时间】:2014-12-07 05:15:56
【问题描述】:
我正在加载一个文件:
05 11 2014 14 53 00
AB01 52.408 -4.217
XY23 51.750 -4.300
PQ29 52.100 -6.000
NY23 52.000 -5.900
第一行被放入一个 dateTime 结构中。然后我的代码应该遍历其余的行,将它们放入结构的链接列表中。但是,它会在无限循环中创建相同元素的链表。
typedef struct observer{
char id[21];
float lat;
float longitude;
struct observer *next;
} observer;
printf("Please enter the name of the observer file: ");
scanf("%s", fileName);
FILE* f1 = fopen(fileName, "r");
if(f1 == NULL)
{
perror("Error opening file");
return;
}
fscanf(f1, "%d %d %d %d %d %d", &dateTime.date, &dateTime.month,
&dateTime.year, &dateTime.hour, &dateTime.minute, &dateTime.second);
while(fscanf(f1, "%s %f %f", temp_id, &temp_lat, &temp_long))
{
struct observer *new_obs = make_observer(temp_id, temp_lat, temp_long);
insert_observer(new_obs, &observer_start);
print_observer(&observer_start);
}
fclose(f1);
observer* make_observer(char *id, float lat, float longitude)
{
observer *node = (observer*) malloc(sizeof(observer));
strcpy(node->id, id);
node->lat = lat;
node->longitude = longitude;
node->next = NULL;
return node;
}
void insert_observer(observer *node, observer **list)
{
observer *current;
observer *previous = NULL;
//int inserted = 0;
if(*list == 0)
{
*list = node;
return;
}
current = *list;
while(current != NULL)
{
if(previous != NULL)
{
previous->next = node;
}
else
{
*list = node;
}
previous = current;
current = current->next;
}
}
【问题讨论】:
-
呈现的代码甚至无法编译。
-
我只展示了问题的相关代码,而不是我的整个文件
-
所以,问题可能出在
temp_id。哦,等等,您还没有包含该变量的定义。不过不用担心,你肯定它不相关。 -
贴出
temp_id、fileName的定义。它肯定是该问题的候选贡献者。 -
首先将
while(fscanf(f1, "%s %f %f", temp_id, &temp_lat, &temp_long))更改为while(fscanf(f1, "%4s %f %f", temp_id, &temp_lat, &temp_long) == 3)。
标签: c list file-io linked-list