c语言 - 扫描未正确读取,输入包含初始 0



我一直在努力解决《代码的降临》2018第4天的谜题。

我在阅读问题输入时遇到了很多困难,尽管我已经设法解决了这个问题,但我仍然想了解问题的原因。

输入的每一行都有一个时间戳和一个事件,如以下示例:

[1518-11-01 00:00] Guard #10 begins shift
[1518-11-01 00:05] falls asleep
[1518-11-01 00:25] wakes up

实际输入有1000多行。

为了让事情变得更容易,我操纵了这个输入,只包含数字,"1"one_answers"2"代表睡眠和醒来,等等。

使用上面的相同示例,我得到:

1518 11 01 00 00 10
1518 11 01 00 05 1
1518 11 01 00 25 2

我以前检查过,没有1号或2号警卫。我的阅读代码如下,用C:编写

#include <stdio.h>
#include <string.h>
int main () {
int line=0;
int year, month, day, hour,minute, action=0;
while (line<1110){
scanf("%i %i %i %i %i %i",&year, &month,&day,&hour,&minute, &action);
printf("%i %i %i %i %i %in",year, month,day,hour,minute, action);
}
line++;
}
return 0;

出于某种原因,在27行正确读取后,变量开始无法正确存储:

1518 2 17 23 56 1297 //last correct line read
1518 2 18 0 0 9 //First incorrect line read
1518 2 18 00 09 -1 //What the first incorrect line should be.

我最终删除了所有的初始零(即将00替换为0,将01替换为1,依此类推…(,但这没有任何意义,因为第一行中有一些值的初始零是正确读取的。

我曾尝试将fscanf和fgets与sscanf一起使用,但这两种替代方法都有相同的结果。

我在网上找了很多这个问题,但找不到一个好的解释。

有人能帮我理解出了什么问题吗?

更改此项:

scanf("%i %i %i %i %i %i",&year, &month,&day,&hour,&minute, &action);

到此:

scanf("%d %d %d %d %d %d", &year, &month, &day, &hour, &minute, &action);

格式说明符i将以零开头的数字解释为八进制。正如@user3386109所说,由于9不是八进制数字,它将无法处理它。

对于打印,你选择哪一个并不重要,但为了均匀,我会选择%d

阅读格式化IO函数(*printf/*scanf(中转换说明符%i和%d之间的区别是什么?

最新更新