Форум программистов, компьютерный форум, киберфорум
C для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/4: Рейтинг темы: голосов - 4, средняя оценка - 5.00
0 / 0 / 1
Регистрация: 05.11.2015
Сообщений: 21
1

Подсчет дней в году(структура) - выход из цикла while

27.08.2017, 10:32. Показов 726. Ответов 5
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Добрый день!Спустя небольшое время решил возобновить изучение СИ,остановился на структурах.
Задание такое:задать дату,и программа должна подсчитать количество дней(учитывая високосность).все работает,программа считает,но для задание даты я воспользовался таким форматом для scanf,но не получается грамотно выйти из цикла while при неверном наборе(если введу букву по ошибке или намеренно).Подскажите,как можно это исправить?заодно,посоветуйте,что можно изменить.Спасибо
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
#include <stdio.h>
#include <ctype.h>
#include <string.h>
int check(int,int,int);
struct month{
int num_Mon;
char name_MNTH[10];
char ABR[4];
int days;
};
    struct month MONTHS[12] = {
    {1,"January","JAN",31},
    {2,"February","FEB",28},
    {3,"March","MAR",31},
    {4,"April","APR",30},
    {5,"May","MAY",31},
    {6,"June","JUN",30},
    {7,"July","JUL",31},
    {8,"August","AUG",31},
    {9,"September","SEP",30},
    {10,"October","OCT",31},
    {11,"November","NOV",30},
    {12,"December","DEC",31},
};
int main(void)
{
    int input_day;
    int input_mon;
    int input_yar;
    int index;
    int total;
    int days_amount;
    printf("enter date for calculate(for example 01/12/1999):\n");
    while (scanf("%2d%*c%2d%*c%4d",&input_day,&input_mon,&input_yar) != 1)
    {
        if (input_yar % 4 == 0 )
            MONTHS[1].days = 29;
        else
            MONTHS[1].days = 28;
        days_amount = check(input_day,input_mon,input_yar);
                 printf("sum until %s - %d\n",MONTHS[input_mon - 1].name_MNTH,days_amount);
    }
return 0;
}
 
int check(int D,int M,int Y)
{
    int index;
    int total_mid = 0;
    int total;
    for (index =1;index < M;index++)
        total_mid+=MONTHS[index-1].days;
 
        total= total_mid+D;
 
 
            return total;
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
27.08.2017, 10:32
Ответы с готовыми решениями:

Подсчет дней между датами, преждевременный выход из цикла
Здравствуйте! Делаю программу на С++ для подсчета дней между двумя датами, цикл завершается после...

Вывести число дней в заданном году, учитывая, что обычный год насчитывает 365 дней, а високосный — 366 дней
11 Дан номер некоторого года (положительное целое число). Вывести число дней в этом году, учитывая,...

Вывести число дней в этом году, учитывая, что обычный год насчитывает 365 дней, а високосный — 366 дней
Дан номер некоторого года (положительное целое число). Вывести число дней в этом году, учитывая,...

Определить сколько дней в году (всего 12 месяцев, в каждом есть определенное количество дней)
Помогите решить задачу пожалуйста

5
Модератор
Эксперт Pascal/DelphiЭксперт NIX
7769 / 4598 / 2823
Регистрация: 22.11.2013
Сообщений: 13,077
Записей в блоге: 1
27.08.2017, 12:38 2
Цитата Сообщение от siinthd Посмотреть сообщение
учитывая високосность
условие високосности неправильное.
C
1
    days = 28+(!(y%4) && ((y%100) || !(y%400)));
0
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
12458 / 7482 / 1753
Регистрация: 25.07.2009
Сообщений: 13,762
27.08.2017, 13:28 3
Цитата Сообщение от siinthd Посмотреть сообщение
while (scanf("%2d%*c%2d%*c%4d",&input_day,&input_mon,&input_yar) != 1)
C
1
while (scanf("%2d%*c%2d%*c%4d",&input_day,&input_mon,&input_yar) == 3)
при вводе буквы выход из цикла.

Добавлено через 8 минут
Цитата Сообщение от siinthd Посмотреть сообщение
должна подсчитать количество дней(учитывая високосность)
вообще задание странное. Количество дней, прошедших с начала года / от Рождества Христова, или просто количество дней в заданном году?
В "решении" странностей ещё больше. К примеру, структуру по идеологическим соображениям нужно использовать? Там в принципе двух массивов за глаза хватило бы - первый с названиями месяцев, второй с количеством дней в каждом месяце...
0
0 / 0 / 1
Регистрация: 05.11.2015
Сообщений: 21
27.08.2017, 14:05  [ТС] 4
насчет високосности тут понятно,что есть исключения.нужно просто чтобы при вводе года,если он високосный то дней становится больше и все.
а само задание оно на отработку знаний по структурам.т.е предыдущее задание было чтобы создать шаблон структуры,потом заполнить его массивом структур,потом поиск месяца по аббривиатуре и т.д.
Спасибо за помощь,только вот момент,объясните,почему использовалась тройка в условии while чем подразумевается такое использование?
я уже пытался через ctype условия на наличие букв сделать,но так лаконичней намного.
0
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
12458 / 7482 / 1753
Регистрация: 25.07.2009
Сообщений: 13,762
27.08.2017, 14:35 5
Цитата Сообщение от siinthd Посмотреть сообщение
почему использовалась тройка в условии while чем подразумевается такое использование?
Функция scanf возвращает количество удачно прочитанных и присвоенных значений. То есть, цикл будет работать до тех пор, пока удалось с консоли три числа прочитать. Другой вопрос - ещё бы убедиться, что числа правильные...
0
0 / 0 / 1
Регистрация: 05.11.2015
Сообщений: 21
27.08.2017, 14:49  [ТС] 6
я думаю что тут достаточно условий на месяц и день,кроме февраля.
0
27.08.2017, 14:49
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
27.08.2017, 14:49
Помогаю со студенческими работами здесь

Дан номер года (положительное целое число). Определить количество дней в этом году, учитывая, что обычный год насчитывает 365 дней, а високосный
Дан номер года (положительное целое число). Определить количество дней в этом году, учитывая, что...

Подсчет количества дней без учета нерабочих праздничных дней в периоде
Нужна программа, которая бы вычисляла дату, на 20 дней больше исходной, но без учета нерабочих...

Число дней в году
Снова здравствуйте! Помогите с задачкой, условие таково: Дан номер года. Найти число дней в этом...

Определить количество дней в году.
Дан номер года (положительное целое число). Определить количество дней в этом году, учитывая, что...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru