在 C 程序中循环时嵌套时遇到问题



我正在开发一个查询程序,从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++;
        }
    }
}

如果compareyear != data[x].year,则代码进入无限循环,因为x在第一个循环中不会递增。我会在两个循环中添加x++

此外,compareyear == compareyear == data[x].year可能不是您想要的。 compareyear == compareyear计算结果为 1 ,因此整个表达式的计算结果仅在1 == data[x].year时计算为 true 。将表达式重写为 compareyear == data[x].year

我也不完全确定为什么你首先有一个嵌套循环,你的代码中不需要它。

最新更新