2012-05-06 105 views
1

我有两个文件,cars.txtreservation.txt,这两个文件共有resID在不同的结构数组中比较两个元素?

我希望用户输入一个日期,使用日期一看就知道是不可用的汽车,然后将其打印(通过resID)。

car.txt: (从左至右:reservationIDcarIDcarYOMcarMakecarModelcarFuelcatagory

R001;V001;2003;Toyota;Camry;Petrol;Budget 
R002;V002;2005;Toyota;Prius;Petrol;Economy 
R003;V003;1999;Ford;Falcon;Petrol;Midsize 
R004;V004;2007;Ford;Territory;Diesel;Fullsize 
R005;V005;2010;Ferrari;599;Petrol;Fullsize 
R006;V006;1998;Holden;Comadore;Diesel;Midsize 
R007;V007;2008;Honda;Civic;Petrol;Budget 
R008;V008;2000;Mazda;MX5;Petrol;Economy 

reservation.txt: (从左至右:reservationIDcustomerIDreservationStartDatereservationStartTimereservationEndDatereservationEndTime。)

R001;C005;2012/02/12;09:15A.M;2012/03/15;05:00P.M 
R002;C002;2012/04/15;10:00A.M;2012/04/22;10:30A.M 
R003;C003;2012/01/16;02:11P.M;2012/04/15;12:00P.M 
R004;C004;2012/05/05;03:00P.M;2012/05/08;10:40A.M 
R005;C005;2012/05/15;10:00A.M;2012/04/23;05:00P.M 
R006;C006;2012/04/11;05:30P.M;2012/04/15;10:00A.M 
R007;C008;2012/05/15;03:15P.M;2012/05/18;11:00A.M 
R008;C007;2012/04/15;11:40P.M;2012/04/23;09:00A.M 

有问题的代码:

#include <stdio.h> 
#include <string.h> 
#define MAX_CAR 100 
#define MAX_RES 100 

int main(){ 

    typedef struct{     //car struct 
     char reservationID[20]; 
     char carID[20]; 
     char carYOM[20]; 
     char carMake[20]; 
     char carModel[50]; 
     char carFuel[20]; 
     char catagory[20]; 
    } car_t; 

    typedef struct{     //res struct 
     char reservationID[20]; 
     char customerID[20]; 
     char reservationStartDate[20]; 
     char reservationStartTime[20]; 
     char reservationEndDate[50]; 
     char reservationEndTime[20]; 
    } res_t; 

    car_t car[MAX_CAR];    //car array 
    res_t reservation[MAX_RES];  //res array 
    FILE *carHandle; 
    FILE *resHandle; 
    char line[100]; 
    char *item; 
    int rescount = 0; 
    int carcount =0; 
    int k; 
    int i; 
    int option; 
    char choice[20];  

    resHandle = fopen("reservation.txt","r");  

    while (fgets(line, 99, resHandle)){ 
     //cut up the reservation file line by line and put the bits into the res array. 
     item = strtok(line,";"); 
     strcpy(reservation[rescount].reservationID,item); 
     item = strtok(NULL,";"); 
     strcpy(reservation[rescount].customerID,item); 
     item = strtok(NULL,";"); 
     strcpy(reservation[rescount].reservationStartDate,item); 
     item = strtok(NULL,";"); 
     strcpy(reservation[rescount].reservationStartTime,item); 
     item = strtok(NULL,";"); 
     strcpy(reservation[rescount].reservationEndDate,item); 
     item = strtok(NULL,"\n"); 
     strcpy(reservation[rescount].reservationEndTime,item); 
     rescount++; 
    } 

    fclose(resHandle); 

    carHandle = fopen("car.txt","r");  

    while (fgets(line, 99, carHandle)){ 
     //cut up the car file line by line and put the bits into the car array. 
     item = strtok(line,";"); 
     strcpy(car[carcount].reservationID,item); 
     item = strtok(NULL,";"); 
     strcpy(car[carcount].carID,item); 
     item = strtok(NULL,";"); 
     strcpy(car[carcount].carYOM,item); 
     item = strtok(NULL,";"); 
     strcpy(car[carcount].carMake,item); 
     item = strtok(NULL,";"); 
     strcpy(car[carcount].carModel,item); 
     item = strtok(NULL,";"); 
     strcpy(car[carcount].carFuel,item); 
     item = strtok(NULL,"\n"); 
     strcpy(car[carcount].catagory,item); 
     carcount++; 
    } 

    fclose(carHandle); 

    printf("Enter todays date (in YYYY/MM/DD format):"); 
    scanf("%s", choice); 
    for (k=0;k<=rescount; k++){ 
     if (strcmp(choice,reservation[k].reservationStartDate)>=0 && strcmp(choice,reservation[k].reservationStartDate)>=0){ 
      for (i=0;i<=carcount; i++){ 
       if (strcmp(car[i].reservationID,reservation[i].reservationID)==0){ 
        printf("\nreservationID: %s\nreservationStartTime: %s\ncustomerID: %s\ncarid: %s\nyom: %s\nmake: %s\nmodel: %s\nfueltype: %s\ncategory: %s\n\n", car[k].reservationID, reservation[i].reservationStartTime, reservation[i].customerID, car[k].carID, car[k].carYOM, car[k].carMake, car[k].carModel, car[k].carFuel, car[k].catagory); 
        goto outofloop; 
       } 
      } 
     }else printf("\nall the cars are available\n"); 
     break; 
    } 
    outofloop: 

    return(0); 
} 

目前的代码只适用于输入字符串“2012/02/12”为“2012/03/15”(即预约文件的第一行)

任何其他输入字符串都不会超过第一个if语句。

任何帮助将不胜感激!

+0

家庭作业,对吧? –

+0

'for(k = 0; k wildplasser

+0

为什么不使用'grep'和'cut'? –

回答

2

你的问题是,你只测试第一个保留。

for (k = 0; k < rescount; k++) { 
    if() { 
    } else { 
    } 
    break; 
} 

还要注意的闭环控制应该有<只(如上面的代码),而不是<=在你的代码。

+0

谢谢!这是问题所在。令人惊讶的是,单个break语句会如何影响整个程序。 再次感谢您的帮助。 –

相关问题