Электронные часы - избежать мигания чисел - C (СИ)
Формулировка задачи:
У меня вот возник небольшой вопросик:
Есть программа:
1. Можно ли как-то избежать мигания чисел?
2.Как сделать так,чтобы числа были больше, либо числа заменить символами вроде такого?:
__
8 - |__|
|__|
Если нужно использовать другую библиотеку, то подскажите какую.
Буду очень-очень благодарен.
Заранее спасибо!
#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"); } }
Решение задачи: «Электронные часы - избежать мигания чисел»
textual
Листинг программы
#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; }
Объяснение кода листинга программы
В данном коде реализована функция электронных часов, которая выводит время на экран с помощью символов, мигающих с частотой 1 Гц. Список действий:
- Включаем заголовочный файл
для использования функций Windows API. - Включаем заголовочный файл
для использования функций вывода на экран. - Включаем заголовочный файл
для работы со временем. - Включаем заголовочный файл
для использования функций вывода на экран. - *Создаем функцию draw_time(char)**, которая будет выводить время на экран.
- Создаем функцию drawfigure(int, COORD&), которая будет выводить фигуры на экран.
- Инициализируем переменную hndl значением GetStdHandle(STD_OUTPUT_HANDLE), чтобы получить дескриптор стандартного вывода.
- Создаем основную функцию main().
- Инициализируем переменную mas[80] как массив символов для хранения времени.
- Создаем объект time типа SYSTEMTIME и заполняем его текущим временем с помощью функции GetLocalTime().
- Сохраняем текущее время в переменной mas с помощью функции sprintf().
- Вызываем функцию draw_time(mas) для вывода времени на экран.
- Переменная hndl используется в функции SetConsoleCursorPosition(hndl, coord) для установки позиции курсора.
- *Внутри цикла while(strtime)** перебираем каждый символ времени.
- Выбираем соответствующую фигуру для текущего символа времени с помощью оператора switch.
- Для каждой фигуры используем набор массивов, чтобы определить, какие символы следует отобразить в зависимости от текущего времени.
- Внутри цикла for выводим символы на экран с помощью оператора cout.
- Устанавливаем новую позицию курсора с помощью функции SetConsoleCursorPosition(hndl, coord).
- **Перемещаем курсор вверх на 5 позиций с помощью координат (coord.Y-=5; coord.X+=5;).
- Возвращаем 0 в конце программы, чтобы указать, что программа успешно завершилась.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д