2012-03-18 8 views
3

sscanfを使用してリストから時間と分をスキャンするのに苦労しています。以下はリストの小さな抜粋です。sscanfがゼロを検出しない

1604 124 12:05p 1:21p Daily 
1605 124 1:20p 2:40p Daily 
1606 173 3:15p 4:38p Daily 
1607 173 4:20p 5:43p Daily 
1608 124 8:20p 10:00p Daily 
1609 124 9:00p 10:37p Daily 
1610 173 8:40a 10:05a Daily 
1611 124 10:50p 12:20a Daily 
1701 17 9:25a 1:00p Daily 
1702 17 10:10a 1:45p Daily 
1703 86 1:55p 5:15p Daily 
1704 86 2:30p 5:50p Daily 
1711 17 10:40a 2:15p 5 
1712 86 3:10p 6:30p 1 
1731 48 6:25a 9:30a 156 
1732 100 10:15a 1:30p Daily 
1733 6 2:15p 3:39p Daily 

私はこれを試してみたが、時間のいくつかのために非常に重要である、ゼロを落としている。(私は構造にこの情報を入れています)。

put_flights_into_array(int size){ 

     int i,check_enter,x,c; 

     check_enter=0; 
     x=0; 

     /*Puts the temp_flights to all_flights*/ 

     for (i=0;i<size;i++){ 
     if(temp_flights[i] == '\n'){ 
      all_flights[check_enter][x]='\0'; 
      check_enter++; 
      x=0; 
     }else{ 
      all_flights[check_enter][x]=temp_flights[i]; 
      x++; 
     } 
     } 

     /*Puts all_routes into proper structures*/ 

     for(i=0;i<check_enter;i++){ 
     sscanf(all_flights[i], 
     "%d %d %d:%d%c %d:%d%c %s", 
     &all_flights_divid[i].flight_number, 
     &all_flights_divid[i].route_id, 
     &all_flights_divid[i].departure_time_hour, 
     &all_flights_divid[i].departure_time_minute, 
     &all_flights_divid[i].departure_time_format, 
     &all_flights_divid[i].arrival_time_hour, 
     &all_flights_divid[i].arrival_time_minute, 
     &all_flights_divid[i].arrival_time_format, 
     &all_flights_divid[i].frequency); 
     } 

これは私の構造を宣言した方法です。

struct all_flights{ 
    int flight_number; 
    int route_id; 
    int departure_time_hour; 
    int departure_time_minute; 
    char departure_time_format; 
    int arrival_time_hour; 
    int arrival_time_minute; 
    char arrival_time_format; 
    char frequency[10]; 
}; 
struct all_flights all_flights_divid[3000]; 

これは私が得た結果です。どのように1604で時間が12 5であることに注意してください、それは12 05でなければなりません、5の前にゼロにはどうなりますか? 1609年にも同じことが起こり、最初のゼロは消えた。

1604 124 12 5 p 1 21 p Daily 
1605 124 1 20 p 2 40 p Daily 
1606 173 3 15 p 4 38 p Daily 
1607 173 4 20 p 5 43 p Daily 
1608 124 8 20 p 10 0 p Daily 
1609 124 9 0 p 10 37 p Daily 
1610 173 8 40 a 10 5 a Daily 
1611 124 10 50 p 12 20 a Daily 
1701 17 9 25 a 1 0 p Daily 
1702 17 10 10 a 1 45 p Daily 
1703 86 1 55 p 5 15 p Daily 
1704 86 2 30 p 5 50 p Daily 
1711 17 10 40 a 2 15 p 5 
1712 86 3 10 p 6 30 p 1 
1731 48 6 25 a 9 30 a 156 
1732 100 10 15 a 1 30 p Daily 
1733 6 2 15 p 3 39 p Daily 
+0

うわー、ロッタcodezをしたいように先行ゼロがあることを確認します。幸運 – Coffee

+1

中央のセクションだけがコードです。残りは私が比較しようとしているデータです。 –

+2

'int'sは先行ゼロを格納しません - あなたの印刷機能は正しく印刷していないと思います。 – zapl

答えて

5

スキャンに問題がありません。印刷しています。あなたがゼロこの

printf("%02d", n); 

のような形式を使用する場合は

+0

ありがとうございます。私たちは常にこのことについてクラスで話しましたが、今まではそれを使用していませんでした。これは私の問題の2つを実際に解決しました。私はStackoverflow、特にその上の人々が大好きです! –

+0

喜んで助けになる! – dldnh