Почему моя программа считает, что два совершенно разных, если утверждения одинаковы? - PullRequest
0 голосов
/ 29 сентября 2019

Я пытаюсь создать программу, которая вычисляет разницу между двумя датами (это включает даты с разными годами).Таким образом, я должен учитывать високосные годы.Если обе даты являются високосными, или если первая дата - високосный, программа работает нормально.Тем не менее, два приведенных ниже утверждения, похоже, не работают.Первый оператор if предназначен для определения разницы, если начальная дата не является високосным, а конечная дата является високосным.Второе утверждение if предназначено для определения разницы, если обе даты не являются високосными.Несмотря на очевидную разницу, моя программа, похоже, считает, что эти утверждения логически эквивалентны.

Чтобы решить эту проблему, я пробовал много вещей.Во-первых, в моем коде я разместил операторы printf, чтобы сообщить мне, какая опция работает для каждого ввода.Например, первое утверждение печатает «командир», а второе печатает «обычный год 2», если оно правильное.Кроме того, я попытался изменить обозначение скобок в затронутых операторах if.Вот мои строки кода:

else if ((yyyy1 % 4 != 0) || ( yyyy1 % 100 == 0 ) && ( yyyy1 % 400 != 0 ) && (yyyy2 % 4 == 0) && ( yyyy2 % 100 != 0 ) && ( yyyy2 % 400 == 0 ) && (argc == 3)) 
startingDate = dd1 + startdayofYear[mm1-1];
endDate = dd2 + leapenddayofYear[mm2-1];
dateDifference = endDate - startingDate;
yearDifference = yyyy2 - yyyy1;
leapBetween = (yyyy2-yyyy1) / 4;
difference = 365 * yearDifference + dateDifference + leapBetween;
printf("%d", difference);
printf("the commanding officer");
}`


`else if ((yyyy1 % 4 != 0) || ( yyyy1 % 100 == 0 ) && ( yyyy1 % 400 != 0 ) && (yyyy2 % 4 != 0) && ( yyyy2 % 100 == 0 ) && ( yyyy2 % 400 == 0 ) && (argc == 3)) {
startingDate = dd1 + startdayofYear[mm1-1];
endDate = dd2 + enddayofYear[mm2-1];
dateDifference = endDate - startingDate;
yearDifference = yyyy2 - yyyy1;
difference = 365 * yearDifference + dateDifference;
printf("%d", difference);
printf("regular year 2");
}`

Вот выходные данные для параметра без високосного года:

./daysCalculatorE 14-09-1998 09-12-1999
452the commanding officer451regular year 2

Вот выходные данные, если конечной датой является високосный год:

./daysCalculatorE 14-09-1998 09-12-2000
817the commanding officer816regular year 2
...