2014-04-05 54 views
0

我正在查詢程序中從CSV文件中搜索特定車型。 CSV文件的格式如下:在C程序中循環嵌套時遇到問題

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

'while(compareyear == compareyear == data [x] .year)''''compareyear''似乎有點_too_。 – mah

+0

對外部'while'使用'for'循環,並且當語句不是單行時,在循環體的周圍使用大括號。你的縮進是誤導性的; 'x ++;'縮進一層太多,而後面的第二個大括號與所示代碼中的任何開放大括號不匹配。 –

回答

2

如果compareyear != data[x].year那麼你的代碼進入一個無限循環,因爲x沒有在第一循環遞增。我會將x++添加到兩個循環中。

另外,compareyear == compareyear == data[x].year可能不是你想要的。 compareyear == compareyear評估爲1,因此如果1 == data[x].year的整個表達式僅評估爲true。重寫表達式爲compareyear == data[x].year

我也不完全確定爲什麼你有一個嵌套循環,沒有必要在你的代碼中。

+0

謝謝,你能幫我弄清楚我在哪裏插入「2001沒有記錄」在我的代碼? –