Я пытался решить головоломку Advent of Code 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;
Дляпочему-то, после 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, но оба альтернативных способа имели одинаковый результат.
Я посмотрелдля этого вопроса много в Интернете, но не мог найти хорошее объяснение.
Может кто-нибудь помочь мне понять, в чем была проблема?