我正在开发一个查询程序,用于从CSV文件中搜索特定的车辆模型。 CSV文件的格式如下:
2000,VOLVO,V70 T5 TURBO,STATION WAGON,2.3,A4,Z,12.4,8.0,2084,4793
2000,VOLVO,V70R AWD TURBO,STATION WAGON,2.4,A5,Z,13.1,9.2,2269,5219
2001,ACURA,3.2TL,MID-SIZE,3.2,AS5,Z,12.3,7.4,2019,4644
2001,ACURA,INTEGRA,SUBCOMPACT,1.8,A4,X,10.0,7.1,1739,4000
...
2014,VOLVO,XC90 AWD,SUV - STANDARD,3.2,AS6,X,13.3,8.6,2240,258
CSV的结构是以下代码中的CarRecord。
每年有一个或一个与查询匹配的记录。因此,如果我在2000场比赛中找到记录,打印出数据,并跳转到2001继续搜索,如果2001没有与查询匹配的记录,打印出来" 2001没有记录",任何人都可以帮助我我在哪里插入" 2001没有记录"在我的代码中?
struct CarRecord{
int year;
char make[20];
char model[40];
char type[30];
float engineSize;
char transmissionType[4];
char fuelType;
float city;
float hwy;
float fuelPerYear;
float co2;
}data[14500];
struct QueryS{
char make[20];
char model[40];
char transmissionType[4];
float engineSize;
}squery[100];
int x=0;
int ctr=0;
int compareyear=2000;
while (compareyear==data[x].year){ //assume that there are no more than 14500 records.
for(x=0;x<14500;x++){
if (strcmp(squery[ctr].make,data[x].make) == 0 && strcmp(squery[ctr].model, data[x].model) == 0 && strcmp(squery[ctr].transmissionType, data[x].transmissionType) == 0 && squery[ctr].engineSize==data[x].engineSize){
fprintf(otreport," %4d | %14.1f | %17.1f | %21.0f | %10.0f \n", data[x].year, data[x].city, data[x].hwy, data[x].fuelPerYear, data[x].co2);
compareyear++;
x++;
}
}
}
答案 0 :(得分:2)
如果compareyear != data[x].year
,则代码进入无限循环,因为x
在第一个循环中没有递增。我会在两个循环中添加x++
。
此外,compareyear == compareyear == data[x].year
可能不是您想要的。 compareyear == compareyear
评估为1
,因此整个表达式仅在true
时评估为1 == data[x].year
。将表达式重写为compareyear == data[x].year
我也不完全确定为什么你首先有一个嵌套循环,你的代码中不需要它。