sscanf没有检测到正确的数字

时间:2012-03-17 19:27:58

标签: c project

我很难用sscanf从列表中扫描小时和分钟。下面是列表的一小部分。

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

我已经尝试了这个,但它一直让我分段错误。(我将这些信息放入结构中)。

 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_minute,
    &all_flights_divid[i].arrival_time_minute,
    &all_flights_divid[i].arrival_time_format,
    &all_flights_divid[i].frequency);

    printf("%d ",all_flights_divid[i].flight_number);
    printf("%d ",all_flights_divid[i].route_id);
    printf("%d ",all_flights_divid[i].departure_time_hour);
    printf("%d ",all_flights_divid[i].departure_time_minute);
    printf("%c ",all_flights_divid[i].departure_time_format);
    printf("%d ",all_flights_divid[i].arrival_time_hour);
    printf("%d ",all_flights_divid[i].arrival_time_minute);
    printf("%c ",all_flights_divid[i].arrival_time_format);
    printf("%s\n",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];

这些是我得到的结果

1704 86 2 30 p 0 50 p Daily
1711 17 10 40 a 0 15 p 5
1712 86 3 10 p 0 30 p 1
1731 48 6 25 a 0 30 a 156
1732 100 10 15 a 0 30 p Daily
1733 6 2 15 p 0 39 p Daily

2 个答案:

答案 0 :(得分:2)

小错误,可能是问题:

这个:

&all_flights_divid[1].flight_number,

应该是:

&all_flights_divid[i].flight_number,
//                 ^

编辑:

另外,您阅读了arrival_time_minute两次,而根本没有阅读arrival_time_hour。修复它,它应该没问题。

答案 1 :(得分:2)

除第一个字段外,大多数结果似乎都很好。

现在,如果你检查你的代码..

&all_flights_divid[1]

修复它
&all_flights_divid[i]