Печать текущего времени в C ++, обновление каждого кадра вместе с получением ввода - PullRequest
0 голосов
/ 01 декабря 2018

Я делал проект для своего задания на C ++, и я подумал, что было бы неплохо напечатать текущее время в углу экрана.Я искал это, я немного изучил заголовок ctime и смог напечатать текущее время и обновлять его каждую 1 секунду, используя loop и sleep ().

Но я также хочу получить данные одновременновремя.Я попытался и придумал следующий код -

#include <iostream>
#include<cstdlib>
#include<windows.h>
#include<conio.h>
#include <ctime>
int main(int argc, char const *argv[]) {
    time_t curr ;
    char a;
    tm *currTime;
    while (true) {
         curr = time(NULL);
         currTime = localtime(&curr);
         std::cout<<"Current time: "<<asctime(currTime);
         std::cout<<"Choose a number: ";
         if(kbhit()) {
             a = getch();
             std::cout<<a;
             break;
         }
         Sleep(100);
         system("cls");
    }
    system("pause");
    return 0;
}

Но этот ввод вступает в силу, как только я нажимаю свою клавишу.Есть ли способ получить ввод, нажав клавишу, а затем нажав клавишу ввода?Я новичок.

1 Ответ

0 голосов
/ 01 декабря 2018

Важно понимать, что при нажатии enter клавиатура будет отправлять так называемые управляющие символы.В системах Windows перевод строки (ввод) представлен двумя такими символами, а именно переводом каретки и переводом строки.Для получения дополнительной информации https://en.wikipedia.org/wiki/Control_character#In_ASCII

Для ваших целей достаточно обнаружить возврат каретки и сохранить предыдущий символ в переменной, чтобы узнать, какой символ был нажат до ввода.

Здеськод, который будет делать именно это.Возможно, вы захотите проверить переменную prevChar с помощью isdigit().

#include <iostream>
#include<cstdlib>
#include<windows.h>
#include<conio.h>
#include <ctime>

int main(int argc, char const *argv[])
{
    time_t curr;
    char prevChar = '\0';
    char currChar = '\0';
    tm *currTime;

    while (true)
    {
        curr = time(NULL);
        currTime = localtime(&curr);
        std::cout << "Current time: " << asctime(currTime);
        std::cout << "Choose a number: ";
        if (kbhit())
        {
            currChar = getch();
            if (currChar == '\r')
            {
                // carriage return ('\r') is always followed by line feed ('\n') on Windows systems
                // do something with the previous char
                std::cout << "the character you entered before pressing enter: " << prevChar << std::endl;
                break;
            }
            prevChar = currChar;
        }
        Sleep(100);
        system("cls");
    }
    system("pause");
    return 0;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...