Подсчет прожитых дней - C (СИ)
Формулировка задачи:
Код будет о4ень банальный, без функций и циклов, ибо первый опыт. Взят из рандомной книжки в ка4естве упражнения. Программа должна расс4итать кол-во дней из числа введенного пользователем, ко в итоге выдает несусветную 4ушь. Вся проблема как выяснилось в scanf, но объясните пожалуйста в 4ем именно
Спасибо
#include <stdio.h>
#include <stdlib.h>
#include <locale.h>
#define LEAPDAYS = 366
#define DAYS = 365
int main()
{
setlocale(LC_ALL,"rus");
int age, years, leapYears, numberOfDays; // возраст, невисокосные годы, високосные годы, количество дней
/*printf("%d %d %d %d\n", age, years, leapYears, numberOfDays);*/ //это для проверки, как и последующие подобные строки
leapYears = age / 4; // считаем количество високосных лет
/*printf("%d\n", leapYears);*/
years = age - leapYears; // считаем невисокосные годы
/*printf("%d\n", years);*/
numberOfDays = (years * 365) + (leapYears * 366); //тут проблема - если вместо 365/366 вписывать объявленные выше константы
//компилятор ругается. Потому что гладиолус?
/*printf("%d\n", numberOfDays);*/
printf ("Введите ваш возраст.\n");
scanf ("%d", &age);
printf ("Вы прожили %d лет, что составляет %d дней", age, numberOfDays);
return 0;
}Решение задачи: «Подсчет прожитых дней»
textual
Листинг программы
#include <stdio.h>
#include <math.h>
#include <conio.h>
#include <stdbool.h>
//Программа которая считает количество дней между двумя датами
//Структура даты
struct date
{
int month;
int days;
int year;
};
//Вычисления введенних дат по формуле
int dateresult(struct date d)
{
int g, f, days, n, d1 = 0;
struct date k, c, k1, c1;
days = d.days;
k = { 3, 1, 1800 };
c = { 2, 28, 1900 };
k1 = { 3, 1, 1700 };
c1 = { 2, 28, 1800 };
if (k.days >= d.days && k.month >= d.month &&
k.year >= d.year && c.days <= d.days &&
c.month <= d.month &&
c.year <= d.year) d1 = 1;
if (k1.days >= d.days && k1.month >= d.month &&
k1.year >= d.year && c1.days <= d.days &&
c1.month <= d.month &&
c1.year <= d.year) d1 = 2;
if (d.month <= 2) f = d.year - 1;
else f = d.year;
if (d.month <= 2){ g = d.month + 13; }
else g = d.month + 1;
n = 1461 * f / 4 + 153 * g / 5 + d.days;
n += d1;
return n;
};
int main(void)
{
int s1, s2, result;
int dateresult(struct date d);
struct date firstdate, twodate;
//Ввод первой даты
printf(" Enter first date mm,dd,yyyy. :");
scanf_s("%i%i%i", &firstdate.month, &firstdate.days, &firstdate.year);
//Ввод второй дати
printf("\n Enter second date mm,dd,yyyy. :");
scanf_s(" %i%i%i", &twodate.month, &twodate.days, &twodate.year);
//Задаем параметры функций
s1 = dateresult(firstdate);
s2 = dateresult(twodate);
//Вычисление результатов и их вывод
result = s2 - s1;
printf("\n Difference days = %i", result);
_getch();
return 0;
}
Объяснение кода листинга программы
Код представляет собой программу, которая считает количество дней между двумя датами. Список элементов кода:
- #include
- подключает файл стандартного ввода/вывода - #include
- подключает математические функции - #include
- подключает функции для работы с консолью - #include
- подключает определения булевых значений - //Программа которая считает количество дней между двумя датами
- //Структура даты
- struct date - объявление структуры даты, содержащей поля для месяца, дней и года
- int dateresult(struct date d) - функция для вычисления результата по формуле
- int main(void) - главная функция программы
- //Ввод первой даты
- printf(
Enter first date mm,dd,yyyy. :); - приглашение для ввода первой даты - scanf_s(
%i%i%i, &firstdate.month, &firstdate.days, &firstdate.year); - считывание значений месяца, дней и года первой даты - //Ввод второй дати
- printf(
\n Enter second date mm,dd,yyyy. :); - приглашение для ввода второй даты - scanf_s(
%i%i%i, &twodate.month, &twodate.days, &twodate.year); - считывание значений месяца, дней и года второй даты - //Задаем параметры функций
- s1 = dateresult(firstdate); - вычисление первой даты и сохранение результата в переменной s1
- s2 = dateresult(twodate); - вычисление второй даты и сохранение результата в переменной s2
- //Вычисление результатов и их вывод
- result = s2 - s1; - вычисление разницы между двумя датами и сохранение результата в переменной result
- printf(
\n Difference days = %i, result); - вывод результата на экран - _getch(); - ожидание нажатия клавиши для завершения программы
- return 0; - завершение программы