c - sscanf 没有检测到零

标签 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

最佳答案

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

printf("%02d", n);

那个零将确保有一个前导零,就像你想要的那样

关于c - sscanf 没有检测到零,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9755177/

相关文章:

java - "Verify EAR Libraries"链接资源错误

common-lisp - 罗斯威尔 - 如何开始一个新项目?

android - 打开项目时遇到问题

arrays - 使用标准库将 char 转换为 wchar_t?

c - Linux 内核 : strncpy_from_user() copying too many bytes

c++ - 如何从 OCIErrorGet 获取约束错误?

c - c 中的二进制文件更新....fwrite 未成功写入整个结构

java - Eclipse - java源文件组织

excel - 根据里程碑/任务/子任务创建动态编号列表

c - 无法杀死在 NVIDIA GPU 上运行的坏内核