Подсчет прожитых дней - 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; - завершение программы
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д