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

Автоматический вывод сообщения (по текущей дате). Структура

02.03.2017, 03:12. Показов 1487. Ответов 16

Author24 — интернет-сервис помощи студентам
Дана структура, задача — сверить введенные в структуру день и месяц с системными, и, если они совпадают, вывести сообщение. Моя прога запускается, но функция bday не выполняется. В интернете ничего для решения задачи не нашел...
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
59
60
61
62
63
64
65
66
67
68
69
70
71
#include <iostream>
#include <time.h>
#define str_len 100  
#define size 30
using namespace std;
int choice;
struct notebook
{
    char Name[str_len];
    int birthday;
    int birthmonth;
    int birthyear;
};
struct notebook notes[size];
int current_size = 0;
void enter()
{
    cout << "Ввод информации" << endl;
    if (current_size < size)
    { 
        cout << "Строка номер ";
        cout << current_size + 1;
        cout << "Введите имя " << endl;
        cin >> notes[current_size].Name;       
        cout << endl << "День рождения: ";    
        cin >> notes[current_size].birthday;
        cout << endl << "Месяц рождения: ";    
        cin >> notes[current_size].birthmonth;
        cout << endl << "Год рождения: ";    
        cin >> notes[current_size].birthyear;
    cout << "Что дальше?" << endl; 
    cin >> choice;
        }
}
void bday() {
    time_t t;
    tm *tk;
    
    time(&t);
    tk=localtime(&t);
 
    int x, y; 
    x = tk-> tm_mday; y = tk-> tm_mon;
 
    for (int i = 0; i < current_size; i++)
    {
        if (x == notes[i].birthday && y == notes[i].birthmonth)
        cout << "С днем рождения, " << notes[i].Name << "!" << endl;
        else cout << "Сегодня никто не отмечает день рождения." << endl;
    }
    cout << "Что дальше?" << endl; 
    cin >> choice;
}
int main()
{
    setlocale(LC_CTYPE, "Russian");
    cout << "Данных нет" << endl;
    cout << "Введите:" << endl;
    cout << "1-для ввода новой записи" << endl;
    cout << "2-проверить день рождения" << endl;
    cout << "3-для выхода" << endl;
    cin >> choice;
    do
    {
        switch (choice)
        {
        case 1:  enter();  break;
        case 2:  bday();    break;
        }
    } while (choice != 3);
}
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
02.03.2017, 03:12
Ответы с готовыми решениями:

Определить возраст пользователя по дате рождения и текущей дате
Составить программу, которая запрашивает у пользователя год его рождения и текущий год и выводит...

ссылка на ячейку по вводимой дате (текущей дате)
привет! Есть два столбца: дата , сумма как сделать автоматический расчёт сумма + любое другое...

Вычисление стажа в формате "X г. Y мес. Z дн." по дате приема на работу и текущей дате
Помогите пожалуйста в Firebird IB EXPERT вычислить стаж в формате &quot;X г. Y мес. Z дн.&quot; по дате...

Автоматический ввод текущей даты в Excel
Всем доброго времени суток. Такая вот задача: при выборе значения из списка в одной ячейке...

16
nd2
3437 / 2816 / 1249
Регистрация: 29.01.2016
Сообщений: 9,426
02.03.2017, 03:28 2
Цитата Сообщение от etevleh Посмотреть сообщение
но функция bday не выполняется
Смотрел, какие значения система выдаёт в коде?
http://ru.cppreference.com/w/cpp/chrono/c/tm
0
0 / 0 / 0
Регистрация: 01.03.2017
Сообщений: 8
02.03.2017, 04:20  [ТС] 3
Цитата Сообщение от nd2 Посмотреть сообщение
Смотрел, какие значения система выдаёт в коде?
http://ru.cppreference.com/w/cpp/chrono/c/tm
C++
1
2
3
4
5
6
7
8
9
10
void time()
{
    time_t t;
    tm *tk;
    
    time(&t);
    tk=localtime(&t);
 
    cout << tk->tm_mday << "." << 1+tk->tm_mon << "." << 1900+tk->tm_year << endl;
}
когда нужно просто вывести время, все работает нормально, показывает сегодняшнюю дату.
0
7794 / 6560 / 2985
Регистрация: 14.04.2014
Сообщений: 28,681
02.03.2017, 09:54 4
Ты в цикл эти поправки добавил?
0
nd2
3437 / 2816 / 1249
Регистрация: 29.01.2016
Сообщений: 9,426
02.03.2017, 16:11 5
Цитата Сообщение от etevleh Посмотреть сообщение
все работает нормально,
Работает нормально, потому что у тебя здесь так:
Цитата Сообщение от etevleh Посмотреть сообщение
C++
1
1+tk->tm_mon
А здесь так:
Цитата Сообщение от etevleh Посмотреть сообщение
C++
1
y = tk-> tm_mon;
На что я тебе и намекал, предлагая посмотреть, что система выводит.
0
0 / 0 / 0
Регистрация: 01.03.2017
Сообщений: 8
02.03.2017, 21:24  [ТС] 6
Система ничего не выводит. Я не могу понять, что не так с переменными.
Миниатюры
Автоматический вывод сообщения (по текущей дате). Структура  
0
nd2
3437 / 2816 / 1249
Регистрация: 29.01.2016
Сообщений: 9,426
02.03.2017, 21:48 7
Цитата Сообщение от etevleh Посмотреть сообщение
Система ничего не выводит.
Здрасьте, вам... А это кто писал?
Цитата Сообщение от etevleh Посмотреть сообщение
когда нужно просто вывести время, все работает нормально, показывает сегодняшнюю дату.
C++
1
cout << tk->tm_mday << "." << 1+tk->tm_mon << "." << 1900+tk->tm_year << endl;
0
0 / 0 / 0
Регистрация: 01.03.2017
Сообщений: 8
02.03.2017, 21:59  [ТС] 8
void time() сам по себе (из сообщения #3) работает, void bday() из первого — нет. Мне же нужно не просто вывести время на консоль, а еще сравнить с введенными данными, а здесь уже напряг.
0
nd2
3437 / 2816 / 1249
Регистрация: 29.01.2016
Сообщений: 9,426
02.03.2017, 22:02 9
Цитата Сообщение от etevleh Посмотреть сообщение
void time() сам по себе (из сообщения #3) работает, void bday() из первого — нет.
Тебе ещё раз указать на разницу между ними? 5 пост.
0
0 / 0 / 0
Регистрация: 01.03.2017
Сообщений: 8
02.03.2017, 22:09  [ТС] 10
Пропущенную единицу в у я добавил, ничего не изменилось. Ошибки как были, так и остались.
0
nd2
3437 / 2816 / 1249
Регистрация: 29.01.2016
Сообщений: 9,426
02.03.2017, 23:00 11
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
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
#include <iostream>
#include <time.h>
#define str_len 100  
#define size 30
using namespace std;
int choice;
struct notebook
{
    char Name[str_len];
    int birthday;
    int birthmonth;
    int birthyear;
};
 
struct notebook notes[size];
int current_size = 0;
 
void enter()
{
    cout << "Ввод информации" << endl;
    
    if (current_size < size)
    { 
        cout << "Строка номер ";
        cout << current_size + 1;
        cout << "Введите имя " << endl;
        cin >> notes[current_size].Name;       
        cout << endl << "День рождения: ";    
        cin >> notes[current_size].birthday;
        cout << endl << "Месяц рождения: ";    
        cin >> notes[current_size].birthmonth;
        cout << endl << "Год рождения: ";    
        cin >> notes[current_size].birthyear;
        ++current_size;
        cout << "Что дальше?" << endl; 
        cin >> choice;
    }
 
}
 
void bday() 
{
    time_t t;
    tm *tk;
    
    time(&t);
    tk=localtime(&t);
 
    int x, y; 
    x = tk-> tm_mday; y = tk-> tm_mon;
    ++y;
    bool flag = false;
    for (int i = 0; i < current_size; i++)
    {
        if (x == notes[i].birthday && y == notes[i].birthmonth)
        {
            cout << "С днем рождения, " << notes[i].Name << "!" << endl;
            flag = true;
        }
    }
    if (!flag)
        cout << "Сегодня никто не отмечает день рождения." << endl;
    
    cout << "Что дальше?" << endl; 
    cin >> choice;
}
int main()
{
    setlocale(LC_CTYPE, "Russian");
    cout << "Данных нет" << endl;
    cout << "Введите:" << endl;
    cout << "1-для ввода новой записи" << endl;
    cout << "2-проверить день рождения" << endl;
    cout << "3-для выхода" << endl;
    cin >> choice;
    do
    {
        switch (choice)
        {
        case 1:  enter();  break;
        case 2:  bday();    break;
        }
    } while (choice != 3);
 
    system("pause");
}
Добавлено через 39 минут
etevleh, заснул?
0
0 / 0 / 0
Регистрация: 01.03.2017
Сообщений: 8
02.03.2017, 23:45  [ТС] 12
Да. И еще пытаюсь разобраться, почему мне прога выводит неправду; жду еще, пока один товарищ проверит и подскажет что дельное. В любом случае, огромное спасибо! Я бы сам не додумался

Внизу видно, что по идее челу должно выводиться поздравление, но что-то как-то не вышло.
Миниатюры
Автоматический вывод сообщения (по текущей дате). Структура  
0
nd2
3437 / 2816 / 1249
Регистрация: 29.01.2016
Сообщений: 9,426
03.03.2017, 00:07 13
А откуда у тебя там такое:
2.3.2017
Это какой код выводит такое?
0
0 / 0 / 0
Регистрация: 01.03.2017
Сообщений: 8
03.03.2017, 00:56  [ТС] 14
C++
1
cout << tk->tm_mday << "." << 1+tk->tm_mon << "." << 1900+tk->tm_year << endl;
Просто добавил еще и вывод сегодняшней даты.
Скорее всего все дело в том, что системная дата берется в виде char, и ее нужно перевести в инт, или наоборот ввести х и у как чар. Сейчас попробую сделать.
0
nd2
3437 / 2816 / 1249
Регистрация: 29.01.2016
Сообщений: 9,426
03.03.2017, 01:06 15
Цитата Сообщение от etevleh Посмотреть сообщение
Просто добавил еще и вывод сегодняшней даты.
В какой код добавил?

Добавлено через 2 минуты
Цитата Сообщение от etevleh Посмотреть сообщение
Скорее всего все дело в том, что системная дата берется в виде char
tm_mday, tm_mon, tm_year возвращают int:
http://ru.cppreference.com/w/cpp/chrono/c/tm
0
nd2
3437 / 2816 / 1249
Регистрация: 29.01.2016
Сообщений: 9,426
03.03.2017, 01:10 16
Лучший ответ Сообщение было отмечено etevleh как решение

Решение

Вот с датой:
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
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
#include <iostream>
#include <Windows.h>
#include <time.h>
#define str_len 100  
#define size 30
using namespace std;
int choice;
struct notebook
{
    char Name[str_len];
    int birthday;
    int birthmonth;
    int birthyear;
};
 
struct notebook notes[size];
int current_size = 0;
 
void enter()
{
    cout << "Ввод информации" << endl;
    
    if (current_size < size)
    { 
        cout << "Строка номер ";
        cout << current_size + 1;
        cout << "Введите имя " << endl;
        cin >> notes[current_size].Name;       
        cout << endl << "День рождения: ";    
        cin >> notes[current_size].birthday;
        cout << endl << "Месяц рождения: ";    
        cin >> notes[current_size].birthmonth;
        cout << endl << "Год рождения: ";    
        cin >> notes[current_size].birthyear;
        ++current_size;
        cout << "Что дальше?" << endl; 
        cin >> choice;
    }
 
}
 
void bday() 
{
    time_t t;
    tm *tk;
    
    time(&t);
    tk=localtime(&t);
 
    int x, y; 
    x = tk-> tm_mday; y = tk-> tm_mon;
    ++y;
    bool flag = false;
    for (int i = 0; i < current_size; i++)
    {
        if (x == notes[i].birthday && y == notes[i].birthmonth)
        {
            cout << "С днем рождения, " << notes[i].Name << "!" << endl;
            flag = true;
        }
    }
    cout << tk->tm_mday << "." << tk->tm_mon + 1 << "." << tk->tm_year + 1900 << endl;
    if (!flag)
        cout << "Сегодня никто не отмечает день рождения." << endl;
    
    cout << "Что дальше?" << endl; 
    cin >> choice;
}
int main()
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
 
    cout << "Данных нет" << endl;
    cout << "Введите:" << endl;
    cout << "1-для ввода новой записи" << endl;
    cout << "2-проверить день рождения" << endl;
    cout << "3-для выхода" << endl;
    cin >> choice;
    do
    {
        switch (choice)
        {
        case 1:  enter();  break;
        case 2:  bday();    break;
        }
    } while (choice != 3);
 
    system("pause");
}
Миниатюры
Автоматический вывод сообщения (по текущей дате). Структура  
1
0 / 0 / 0
Регистрация: 01.03.2017
Сообщений: 8
03.03.2017, 01:40  [ТС] 17
Все работает, спасибо!
0
03.03.2017, 01:40
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
03.03.2017, 01:40
Помогаю со студенческими работами здесь

Автоматический ввод текущей даты в Excel
Здравствуйте! Конкретного ответа на свой вопрос не нашел на форуме. Мне нужно, чтобы при...

Фильтрация по текущей дате
Доброго времени суток! У меня к вам большая просьба. Вот пишу курсовую работу по БД &quot;Учет...

Макрос сравнения по дате с текущей
Подскажите пожалуйста макрос с возможнастю: есть документ Excel с тремя листами на первом листе...

Добавить 7 дней к текущей дате
надо Выведите на экран дату, которая будет через неделю после текущей. вот я сделал , но...


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

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