所有。
在阅读了细分错误后,我仍然无法弄清楚这个问题的来源。我知道它来自这个特定的功能;我的驱动程序中的其他所有工作。
值得注意的是,所有样式都是枚举数据类型StyleT。
被调用的函数:
openList(&list, "List.txt");
函数的定义:
void openList(VehicleListT *list, char *infilename)
{
FILE *infile;
int i = 0;
char styleString[20];
newList(list);
if((infile = fopen(infilename, "r")) == NULL)
{
fprintf(stderr, "ERROR: Cannot open source file!\n");
exit(1);
}
fscanf(infile, "%s\n", list->vehicles[i].vin);
while(!feof(infile))
{
fscanf(infile, "%i\n", list->vehicles[i].year);
fscanf(infile, "%lf\n", list->vehicles[i].price);
fscanf(infile, "%s\n", list->vehicles[i].make);
fscanf(infile, "%s\n", styleString);
if((strcmp(styleString, "TWO_DOOR")) == 0)
{
list->vehicles[i].style = TWO_DOOR;
}
if((strcmp(styleString, "FOUR_DOOR")) == 0)
{
list->vehicles[i].style = FOUR_DOOR;
}
if((strcmp(styleString, "CONVERTIBLE")) == 0)
{
list->vehicles[i].style = CONVERTIBLE;
}
if((strcmp(styleString, "TRUCK")) == 0)
{
list->vehicles[i].style = TRUCK;
}
if((strcmp(styleString, "SUV")) == 0)
{
list->vehicles[i].style = SUV;
}
fscanf(infile, "%s\n", list->vehicles[i].color);
fscanf(infile, "%s\n", list->vehicles[i].vin);
i++;
list->count++;
}
fclose(infile);
return;
}
答案 0 :(得分:1)
在其他问题中,我找不到,因为我没有完整的代码,一个明显的错误,在你的程序中给你一个分段错误
fscanf(infile, "%i\n", list->vehicles[i].year);
fscanf(infile, "%lf\n", list->vehicles[i].price);
上面的行应该是,
fscanf(infile, "%i\n", &list->vehicles[i].year);
fscanf(infile, "%lf\n", &list->vehicles[i].price);
答案 1 :(得分:0)
一些想法:
我会检查数据是如何加载的,或者在while循环的每次迭代结束时将其打印出来。如果'i'太大,还建议安全检查错误输出。