【问题标题】:using scanf to parse hh:mm:ss, strange error with some inputs使用 scanf 解析 hh:mm:ss,一些输入出现奇怪错误
【发布时间】:2015-05-31 04:33:04
【问题描述】:

以下代码用于解析时间,例如 07:04:51:

#include <stdio.h>

int main() {
    int hh, mm, ss;
    scanf("%i:%i:%i\n", &hh, &mm, &ss);
    printf("%i:%i:%i\n", hh, mm, ss);
}

有些时候可以解析,有些则不能:

$ echo 07:04:51 | ./test.exe 
7:4:51
$ echo 08:04:51 | ./test.exe 
0:0:32767
$ echo 09:04:51 | ./test.exe 
0:0:32766
$ echo 10:04:51 | ./test.exe 
10:4:51
$ echo 11:09:10 | ./test.exe 
11:0:32764

是什么原因?

ideone

【问题讨论】:

  • ...检查scanf的返回值,否则看不到错误。
  • @user3121023:你应该这样回答。

标签: c parsing time scanf


【解决方案1】:

在这种情况下,最好使用 %d 而不是 %i。使用 %i,如果值有前导零,则该值将被读取为八进制值(以 8 为基数)。 08 和 09 不是有效的八进制值。
scanf 将返回成功扫描的项目数。使用

if ( scanf("%d:%d:%d", &hh, &mm, &ss) == 3)

验证是否扫描了三个项目。

【讨论】:

    猜你喜欢
    • 2015-06-17
    • 1970-01-01
    • 2013-07-11
    • 1970-01-01
    • 1970-01-01
    • 2014-08-12
    • 2013-10-04
    • 2015-06-05
    • 2019-06-28
    相关资源
    最近更新 更多