C 输入包含首字母0';s

C 输入包含首字母0';s,c,scanf,format-specifiers,C,Scanf,Format Specifiers,我一直在努力解决代码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”和“2”表示睡眠和醒来,等等 通

我一直在努力解决代码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”和“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 %i\n",year, month,day,hour,minute, action);
        }
        line++;
}
return 0;
我最终通过删除所有初始零(即,将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
,以实现同质化


阅读?

中的更多内容,尝试改用
%d
<代码>%i将前导零的数字解释为八进制。因为9不是八进制数字,所以会发生不好的事情。谢谢!成功了。我知道这是件愚蠢的事,但在其他地方找不到它。
linha++
?这不是您正在使用的代码,因为该代码甚至不会编译。这是一个旧的时间戳。我将“linha++”修改为“line++”。我只是翻译了代码以便更好地理解。关于旧的时间戳,它是正确的。谜题是指旧的时间戳,这是一个虚构的问题。然而,这个问题已经解决了。评论中说,这是件愚蠢的事。谢谢你的帮助。
scanf("%d %d %d %d %d %d", &year, &month, &day, &hour, &minute, &action);