С Новым годом! Форум программистов, компьютерный форум, киберфорум
C для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.90/48: Рейтинг темы: голосов - 48, средняя оценка - 4.90
0 / 0 / 0
Регистрация: 22.05.2011
Сообщений: 12

Электронные часы - избежать мигания чисел

22.05.2011, 02:29. Показов 9369. Ответов 16
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
У меня вот возник небольшой вопросик:

Есть программа:
C
1
2
3
4
5
6
7
8
9
10
#include <stdio.h>
#include <windows.h>
int main(int argc, char *argv[])
{
   while(true){
    SYSTEMTIME time;
    GetLocalTime(&time);
    printf("%d : %d: %d\n",time.wHour,time.wMinute,time.wSecond);
    system("cls");
} }
1. Можно ли как-то избежать мигания чисел?
2.Как сделать так,чтобы числа были больше, либо числа заменить символами вроде такого?:
__
8 - |__|
|__|

Если нужно использовать другую библиотеку, то подскажите какую.
Буду очень-очень благодарен.
Заранее спасибо!
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
22.05.2011, 02:29
Ответы с готовыми решениями:

Электронные часы - перевести код с Pascal
я ваще си не знаю (((помогите пожалуйста перевести код из паскаля в си.. uses graph,dos,crt; var device,mode,Ny,Mx:integer;...

Рисование на виртуальной канве или как избежать мигания при рисовании
Суть проблемы в следующем: На канве рисуется очень большой и сложный чертеж, потому все изображение моргает, что крайне нежелательно....

Электронные часы
Электронные часы показывают время в формате h:mm:ss, то есть сначала записывается количество часов, потом обязательно двузначное количество...

16
Каратель
Эксперт С++
6610 / 4029 / 401
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
22.05.2011, 02:38
Цитата Сообщение от Shevko Посмотреть сообщение
while(true){
SYSTEMTIME time;
очень эффективно
0
0 / 0 / 0
Регистрация: 22.05.2011
Сообщений: 12
22.05.2011, 02:40  [ТС]
Цитата Сообщение от Maxwe11 Посмотреть сообщение
очень эффективно
Подскажите,пожалуйста, как будет эффективнее...
Я только начинающий программист и поэтому не знаю всех прелестей С++.
0
 Аватар для jonson
240 / 213 / 84
Регистрация: 18.03.2010
Сообщений: 750
22.05.2011, 02:45
ну самый простой и не совсем правильный способ вот:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <stdio.h>
#include <windows.h>
int main(int argc, char *argv[])
{
    while(true){
        SYSTEMTIME time;
        GetLocalTime(&time);
        printf("%d : %d: %d\n",time.wHour,time.wMinute,time.wSecond);
        Sleep(1000);
        system("cls");
        
 
    } }
0
Каратель
Эксперт С++
6610 / 4029 / 401
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
22.05.2011, 03:59
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <Windows.h>
#include <cstdio>
#include <ctime>
 
int main()
{
    HANDLE hAndle = GetStdHandle(STD_OUTPUT_HANDLE);
    COORD coord = { 0 };
    time_t t;
    clock_t w;
    while(true)
    {
    time(&t);
    SetConsoleCursorPosition(hAndle, coord);
    printf("%s", ctime(&t));
    w = clock () + CLOCKS_PER_SEC ;
    while (clock() < w);
    }
}
0
 Аватар для jonson
240 / 213 / 84
Регистрация: 18.03.2010
Сообщений: 750
22.05.2011, 04:27
Maxwe11, а что, Вас совсем не смущает что такой код будет ВОВСЮ грузить ЦП?
0
 Аватар для Kastaneda
5232 / 3205 / 362
Регистрация: 12.12.2009
Сообщений: 8,143
Записей в блоге: 2
22.05.2011, 08:10
Цитата Сообщение от jonson Посмотреть сообщение
ну самый простой и не совсем правильный способ вот:
Нет, system("cls") вызывает мигание (+ это много работы по очистке экрана)

Пожалуй вот действительно самый простой:
C++
1
2
3
4
5
6
7
8
9
10
#include <stdio.h>
#include <windows.h>
int main(){
    SYSTEMTIME time;
    while(true) {
        GetLocalTime(&time);
        printf("%d : %d: %d\r",time.wHour,time.wMinute,time.wSecond);//тупо возвращаем каретку
        Sleep(1000);
    }
}
1
0 / 0 / 0
Регистрация: 22.05.2011
Сообщений: 12
22.05.2011, 10:32  [ТС]
Спасибо, теперь не мигает )
А как сделать числа бОльшими по размеру?
0
 Аватар для Kastaneda
5232 / 3205 / 362
Регистрация: 12.12.2009
Сообщений: 8,143
Записей в блоге: 2
22.05.2011, 12:41
Вот смотри что нашел SetCurrentConsoleFontEx(), но, как писал в ЛС, эта функция поддерживается с Windows Vista и младше (т.е. еще на семерке). Можешь попробовать ее (если платформа позволяет).

P.S. я не пробовал, сижу под Linux'ом.

Добавлено через 12 минут

Не по теме:

ладно, полез я под винду, есть одна идея, должно получиться красиво))

0
0 / 0 / 0
Регистрация: 22.05.2011
Сообщений: 12
22.05.2011, 13:55  [ТС]
Цитата Сообщение от Kastaneda Посмотреть сообщение
Вот смотри что нашел SetCurrentConsoleFontEx(), но, как писал в ЛС, эта функция поддерживается с Windows Vista и младше (т.е. еще на семерке). Можешь попробовать ее (если платформа позволяет).

P.S. я не пробовал, сижу под Linux'ом.

Добавлено через 12 минут

Не по теме:

ладно, полез я под винду, есть одна идея, должно получиться красиво))

Жду
0
 Аватар для morphling
19 / 19 / 2
Регистрация: 26.06.2010
Сообщений: 181
22.05.2011, 14:03
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <stdio.h>
#include <dos.h>
#include <windows.h>
#include <stdlib.h>
int main(int argc, char *argv[])
 {
 while(true){
 SYSTEMTIME time;
 GetLocalTime(&time);
 printf("%d : %d: %d\n",time.wHour,time.wMinute,time.wSecond);
 sleep(1); // или delay(1000); задержка на секунду
 system("cls");
 
 }
}
тока если ты в DevCPP работаешь может это не сработать
0
Каратель
Эксперт С++
6610 / 4029 / 401
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
22.05.2011, 14:30
Цитата Сообщение от jonson Посмотреть сообщение
Maxwe11, а что, Вас совсем не смущает что такой код будет ВОВСЮ грузить ЦП?
а Sleep внутри как работает?
0
 Аватар для Kastaneda
5232 / 3205 / 362
Регистрация: 12.12.2009
Сообщений: 8,143
Записей в блоге: 2
22.05.2011, 14:35
Лучший ответ Сообщение было отмечено как решение

Решение

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
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
#include <windows.h>
#include <iostream>
#include <ctime>
#include <cstdio>
void draw_time(char*);
void drawfigure(int,COORD&);
HANDLE hndl = GetStdHandle(STD_OUTPUT_HANDLE);
int main()
{
    char mas[80];
    SYSTEMTIME time;
    while(1) {
        GetLocalTime(&time);
        sprintf(mas,"%d : %d: %d",time.wHour,time.wMinute,time.wSecond);
        draw_time(mas);
        Sleep(1000);
    }
    return 0;
}
void draw_time(char* strtime)
{
    COORD coord= {20,9};//Это начальные координаты, на моей консоли по центру
    while(*strtime) {
        switch(*strtime++) {
        case '1':
            drawfigure(1,coord);
            break;
        case '2':
            drawfigure(2,coord);
            break;
        case '3':
            drawfigure(3,coord);
            break;
        case '4':
            drawfigure(4,coord);
            break;
        case '5':
            drawfigure(5,coord);
            break;
        case '6':
            drawfigure(6,coord);
            break;
        case '7':
            drawfigure(7,coord);
            break;
        case '8':
            drawfigure(8,coord);
            break;
        case '9':
            drawfigure(9,coord);
            break;
        case '0':
            drawfigure(0,coord);
            break;
        case ':':
            drawfigure(10,coord);
            break;
        default:
            break;
        }
    }
}
void drawfigure(int n, COORD &coord)
{
    int one[5][3]= {{0,0,1},
        {0,1,1},
        {0,0,1},
        {0,0,1},
        {0,0,1}
    };
    int two[5][3]= {{1,1,1},
        {0,0,1},
        {1,1,1},
        {1,0,0},
        {1,1,1}
    };
    int three[5][3]= {{1,1,1},
        {0,0,1},
        {1,1,1},
        {0,0,1},
        {1,1,1}
    };
    int four[5][3]= {{1,0,1},
        {1,0,1},
        {1,1,1},
        {0,0,1},
        {0,0,1}
    };
    int five[5][3]= {{1,1,1},
        {1,0,0},
        {1,1,1},
        {0,0,1},
        {1,1,1}
    };
    int six[5][3]= {{1,1,1},
        {1,0,0},
        {1,1,1},
        {1,0,1},
        {1,1,1}
    };
    int seven[5][3]= {{1,1,1},
        {0,0,1},
        {0,1,0},
        {1,0,0},
        {1,0,0}
    };
    int eight[5][3]= {{1,1,1},
        {1,0,1},
        {1,1,1},
        {1,0,1},
        {1,1,1}
    };
    int nine[5][3]= {{1,1,1},
        {1,0,1},
        {1,1,1},
        {0,0,1},
        {1,1,1}
    };
    int zero[5][3]= {{1,1,1},
        {1,0,1},
        {1,0,1},
        {1,0,1},
        {1,1,1}
    };
    int dblpt[5][3]= {{0,0,0},
        {0,1,0},
        {0,0,0},
        {0,1,0},
        {0,0,0}
    };
 
    int *arr[]= {(int*)zero,(int*)one,(int*)two,(int*)three,(int*)four,(int*)five,(int*)six,(int*)seven,(int*)eight,(int*)nine,(int*)dblpt};
    for(int i=0; i<5; i++) {
        SetConsoleCursorPosition(hndl,coord);
        for(int j=0; j<3; j++) {
            if(((int(*)[3])arr[n])[i][j])std::cout<<(char)0xDB;
            else std::cout<<" ";
        }
        coord.Y++;
    }
    coord.X+=5;
    coord.Y-=5;
}


)))
6
 Аватар для jonson
240 / 213 / 84
Регистрация: 18.03.2010
Сообщений: 750
22.05.2011, 14:41
Цитата Сообщение от Maxwe11 Посмотреть сообщение
а Sleep внутри как работает?
Sleep
0
Каратель
Эксперт С++
6610 / 4029 / 401
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
22.05.2011, 14:51
Цитата Сообщение от jonson Посмотреть сообщение
это лишь описание, а что внутри мы не знаем, и я не удивлюсь если внутри будет что-то похожее, только на асме
C
1
2
clock_t w = clock () + CLOCKS_PER_SEC ;
while (clock() < w);
0
 Аватар для Kastaneda
5232 / 3205 / 362
Регистрация: 12.12.2009
Сообщений: 8,143
Записей в блоге: 2
22.05.2011, 14:55
Нашел баг, строку:
C++
1
sprintf(mas,"%d : %d: %d",time.wHour,time.wMinute,time.wSecond);
Заменить на:
C++
1
sprintf(mas,"%d%d:%d%d:%d%d",time.wHour/10,time.wHour%10,time.wMinute/10,time.wMinute%10,time.wSecond/10,time.wSecond%10);
иначе, когда кол-во секунд - это одна цифра, то крайняя правая цифра не перерисовывается.
0
2022 / 1621 / 489
Регистрация: 31.05.2009
Сообщений: 3,005
22.05.2011, 15:15
Maxwe11,
http://av239.wordpress.com/201... и-в-win32/
2
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
22.05.2011, 15:15
Помогаю со студенческими работами здесь

Электронные часы С++
Электронные часы показывают время в формате h:mm:ss (от 0:00:00 до 23:59:59), то есть сначала записывается количество часов, потом...

Электронные часы
Помогите пожалуйста, кто в этом шарит, решил сделать часы на семисегментном индикаторе с помощью обычных фигур(Shape)цифрами обозначил...

Электронные часы - 2
Разбор Число часов в сутки будет равен количество секунд разделенных на 3600. Теперь остаток у нас имеет в себе число минут и секунд....

Электронные часы
В общем, над задачей я мучаюсь больше недели уже, новичок, вроде и понимаю все, но на этой - ступор. В прикрепленном пике сама задача и...

Электронные часы
дравствуйте. У никого случайно нету исходника електронныых часов на Ассемблере?


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

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
Новые блоги и статьи
Изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru