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

Узнай цену своей работы

Формулировка задачи:

У меня вот возник небольшой вопросик: Есть программа:
#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 - |__| |__| Если нужно использовать другую библиотеку, то подскажите какую. Буду очень-очень благодарен. Заранее спасибо!

Решение задачи: «Электронные часы - избежать мигания чисел»

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 Гц. Список действий:

  1. Включаем заголовочный файл для использования функций Windows API.
  2. Включаем заголовочный файл для использования функций вывода на экран.
  3. Включаем заголовочный файл для работы со временем.
  4. Включаем заголовочный файл для использования функций вывода на экран.
  5. *Создаем функцию draw_time(char)**, которая будет выводить время на экран.
  6. Создаем функцию drawfigure(int, COORD&), которая будет выводить фигуры на экран.
  7. Инициализируем переменную hndl значением GetStdHandle(STD_OUTPUT_HANDLE), чтобы получить дескриптор стандартного вывода.
  8. Создаем основную функцию main().
  9. Инициализируем переменную mas[80] как массив символов для хранения времени.
  10. Создаем объект time типа SYSTEMTIME и заполняем его текущим временем с помощью функции GetLocalTime().
  11. Сохраняем текущее время в переменной mas с помощью функции sprintf().
  12. Вызываем функцию draw_time(mas) для вывода времени на экран.
  13. Переменная hndl используется в функции SetConsoleCursorPosition(hndl, coord) для установки позиции курсора.
  14. *Внутри цикла while(strtime)** перебираем каждый символ времени.
  15. Выбираем соответствующую фигуру для текущего символа времени с помощью оператора switch.
  16. Для каждой фигуры используем набор массивов, чтобы определить, какие символы следует отобразить в зависимости от текущего времени.
  17. Внутри цикла for выводим символы на экран с помощью оператора cout.
  18. Устанавливаем новую позицию курсора с помощью функции SetConsoleCursorPosition(hndl, coord).
  19. **Перемещаем курсор вверх на 5 позиций с помощью координат (coord.Y-=5; coord.X+=5;).
  20. Возвращаем 0 в конце программы, чтобы указать, что программа успешно завершилась.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

9   голосов , оценка 4.222 из 5
Похожие ответы