【问题标题】:Having trouble with nesting while loops in C program在 C 程序中嵌套 while 循环时遇到问题
【发布时间】:2014-04-05 20:01:18
【问题描述】:

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

【问题讨论】:

  • while (compareyear==compareyear==data[x].year) 似乎对compareyear 有点感兴趣。
  • 对外部while 使用for 循环,并在语句不是单行时在循环体周围使用大括号。您的缩进具有误导性; x++; 缩进一级太多,之后的第二个右大括号与所示代码中的任何左大括号都不匹配。

标签: c loops while-loop nest


【解决方案1】:

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

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

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

【讨论】:

  • 谢谢,你能帮我弄清楚在我的代码中在哪里插入“2001 No record”吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-06-06
  • 2017-06-02
  • 1970-01-01
  • 1970-01-01
  • 2015-01-19
  • 2015-07-04
相关资源
最近更新 更多