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

时间:2014-04-05 20:01:19

标签: c loops while-loop nest

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

1 个答案:

答案 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

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