rendered paste body#include <stdio.h>
int main()
{
int day1, month1, year1, day2, month2, year2, result;
int evaluate = 0;
char var1, var2, c;
/* Define Functions */
int verify_date(int day, int month, int year, char var1, char var2); /* Verifys if date input is correct */
int february(int year); /* identifys how many days are on February */
int difference(int day1, int month1, int year1, int day2, int month2, int year2); /* Calculates the difference between two dates */
/* Main Program */
do
{
fprintf(stderr, "Insert first Date: (e.g. <day>/<month>/<year> or <day>-<month>-<year>)\n");
scanf("%i%c%i%c%i", &day1, &var1, &month1, &var2, &year1);
for (c = getchar(); c!= '\n'; c = getchar() );
evaluate = verify_date(day1, month1, year1, var1, var2);
} while (!evaluate);
do
{
fprintf(stderr, "Insert second Date: (e.g. <day>/<month>/<year> or <day>-<month>-<year>)\n");
scanf("%i%c%i%c%i", &day2, &var1, &month2, &var2, &year2);
for (c = getchar(); c!= '\n'; c = getchar() );
evaluate = verify_date(day2, month2, year2, var1, var2);
} while (!evaluate);
result = difference(day1, month1, year1, day2, month2, year2);
printf("%i\n", result);
return 0;
/* End of Main Program */
}
/* VERIFICAR MES DE FEVEREIRO */
/* Functions */
int verify_date(int day, int month, int year, char var1, char var2) /* Verify if an illegal date is entered */
{
int evaluate1, evaluate2, y;
if ((var1 == '/' || var1 == '-') && (var2 == '/' || var2 == '-'))
{
if (month > 0 && month < 13) /* 1 <= month <= 12 */
{
if (month == 4 || month == 6 || month == 9 || month == 11) /* Months with 30 days */
{
if (day < 1 || day > 30) /* 1 <= day <= 30 */
{
fprintf(stderr, "NOT standard output");
evaluate1 = 0;
}
else
evaluate1 = 1;
}
if (month == 2) /* February, month with 28 days */
{
if (year % 4 == 0)
y = 29;
else
y = 28;
if (day < 1 || day > y)
{
fprintf(stderr, "NOT standard output");
evaluate1 = 0;
}
else
evaluate1 = 1;
}
else /* Months with 31 days */
{
if (day < 1 || day > 31) /* 1 <= day <= 31 */
{
fprintf(stderr, "NOT standard output");
evaluate1 = 0;
}
else
evaluate1 = 1;
}
}
else
{
fprintf(stderr, "NOT standard output");
evaluate1 = 0;
}
if (year > 0 && year < 10000) /* 1 <= year <= 9999 */
evaluate2 = 1;
else
{
fprintf(stderr, "NOT standard output");
evaluate2 = 0;
}
if (evaluate1 == 1 && evaluate2 == 1)
return 1;
else
return 0;
}
else
return 0;
}
int difference(int day1, int month1, int year1, int day2, int month2, int year2)
{
int dif_years, ys, ye, dif_months, ms, me, dif_days, ds, de;
/* ys = year_start, ye = year_end, ms = month_start, me = month_end, ds = day_start, de = day_end */
int months[12] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
int days = 0;
int m, y;
dif_years = year1 - year2;
if (dif_years > 0) {
ys = year2;
ms = month2;
ds = day2;
ye = year1;
me = month1;
de = day1;
}
if (dif_years < 0) {
ys = year1;
ms = month1;
ds = day1;
ye = year2;
me = month2;
de = day2;
}
else {
dif_months = month1 - month2;
if (dif_months > 0) {
ys = year2;
ms = month2;
ds = day2;
ye = year1;
me = month1;
de = day1;
}
if (dif_months < 0) {
ys = year1;
ms = month1;
ds = day1;
ye = year2;
me = month2;
de = day2;
}
else { /* dif_months = 0 */
dif_days = day1 - day2;
if (dif_days > 0) {
ys = year2;
ms = month2;
ds = day2;
ye = year1;
me = month1;
de = day1;
}
if (dif_days < 0) {
ys = year1;
ms = month1;
ds = day1;
ye = year2;
me = month2;
de = day2;
}
else
return 0;
}
}
if (dif_years > 0 || dif_years < 0) {
months[1] = february(ys);
days += months[ms-1] - ds;
m = ms;
while (m < 12) {
days += months[m];
++m;
}
y = ys + 1;
while (y < ye) {
months[1] = february(y);
m = 0;
while (m < 12) {
days += months[m];
++m;
}
}
months[1] = february(ye);
m = 0;
while (m < me) {
days += months[m];
++m;
}
days += de;
}
else {
months[1] = february(ys);
days += months[ms-1] - ds;
m = ms;
while (m < me) {
days += months[m];
++m;
}
days += de;
}
if (dif_years > 0 || (dif_years == 0 && dif_months > 0) || (dif_years == 0 && dif_months == 0 && dif_days > 0))
return -days;
else
return days;
}
int february(int year)
{
int root;
root = year % 4;
if (root == 0)
return 29;
else
return 28;
}