2012-05-06 10 views
1

私はcars.txtreservation.txtの2つのファイルを持っていますが、両方のファイルに共通してresIDがあります。構造体の異なる配列の2つの要素を比較しますか?

私は日付を入力し、が利用できない車を表示するためにその日付を使用したい場合は、を入力してから(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年3月15日」に「2012年2月12日」入力文字列を使用しています

他の入力文字列は最初のif文を超えません。

ご協力いただければ幸いです。

+0

宿題は、右ですか? –

+0

'for(k = 0; k wildplasser

+0

なぜ単に 'grep'と' cut'を使わないのですか? –

答えて

2

問題は、最初の予約をテストすることだけです。

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

はまた、ループ制御がない<=あなたのコードのように、(上記のコードのように)だけ<を持つ必要があります注意してください。

+0

ありがとう!それが問題でした。 1つのbreakステートメントがプログラム全体をどのようにダウンさせることができるか、驚くべきことです。 もう一度お世話になります。 –

関連する問題