以下代码用于解析时间,如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
是什么原因?
答案 0 :(得分:4)
在这种情况下,最好使用%d而不是%i。对于%i,如果值具有前导零,则该值将被读取为八进制值(基数为8)。 08和09不是有效的八进制值 scanf将返回成功扫描的项目数。使用
if ( scanf("%d:%d:%d", &hh, &mm, &ss) == 3)
验证是否扫描了三件物品。