sscanf没有检测到零

时间:2012-03-18 01:03:10

标签: c project

我很难用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

1 个答案:

答案 0 :(得分:5)

问题不在于扫描,而在于打印。如果你使用这样的格式

printf("%02d", n);

零将确保有一个像你想要的前导零