Можно ли отобразить оператор printf () в течение ограниченного периода времени nc? - PullRequest
0 голосов
/ 12 декабря 2018

Я новичок в кодировании, и меня проинструктировали кодировать текстовую игру, поэтому Я пытаюсь выяснить, возможно ли распечатать утверждение за ограниченное время только в C и также можно разрешить им вводить ответ в течение ограниченного времени ?Проблема в том, что если я что-то распечатаю, они могут прокрутиться вверх, и это то, чего я пытаюсь избежать.Если это возможно, пожалуйста, введите код или ресурсы, которые я могу использовать для справки ниже.Спасибо.

Ответы [ 4 ]

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

используйте команды выхода ANSI, чтобы: 1) запомнить, где находится курсор в данный момент, 2) напечатать строку (и запомнить возвращенное значение из printf() 3) запустить таймер (например, используя alarm()), когда таймер /Сигнал истекает, сигнал будет повышен.Используйте сигнал, чтобы пометить событие, затем в основном коде: если установлен флаг сигнала, используйте escape-последовательность ANSI, чтобы переместить курсор в сохраненную / запомненную позицию, затем запишите данные пробела для длины, возвращенной из исходного printf().Затем восстановите курсор

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

вы можете использовать \r, чтобы перевести курсор на начало строки.так что вы можете заменить этот контент, чтобы достичь эффекта удаления контента через некоторое время

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

Вы можете распечатать пробелы, чтобы удалить текст, который вы только что отобразили.Например:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>

int main() {

    char * string = "Hello";

    printf("%s", string);

    fflush(stdout);

    sleep(1);

    char * backspaces = malloc(strlen(string) * sizeof(char));

    for (int i = 0 ; i < strlen(string) ; i++) backspaces[i] = '\b';

    printf("%s", backspaces);
}

И для ограниченного по времени действительного ввода вы можете использовать gettimeofday , чтобы проверить, введен ли ввод во времени или нет.

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

Терминалы по умолчанию предназначены для постепенного выделения в буфере все большего количества строк текста.Текст добавляется в конец, а предыдущие строки остаются видимыми (до предела сконфигурированного размера буфера терминала).

Можно получить больше ощущения "GUI", изменяя режимы терминала, и этообычно делается с использованием библиотеки, такой как curses или ncurses .Это позволит вам показывать текст в определенных частях окна и удалять указанный текст.После завершения программы curses «сбрасывает» терминал так, что весь «GUI» исчезает (хотя некоторые терминалы все равно будут показывать пользователю «конечное состояние» GUI, если они прокрутят страницу вверх).

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

Так как вы 'Если вы идете на курс для начинающих, вам, скорее всего, предложат сделать следующее, а именно:

  1. «Подделка» исчезающего текста путем потоковой передачи возврата каретки и перезаписи старой строки пробелами.или замену текста (поддержка этого эффекта может быть разной), или
  2. «Подделка» исчезающего текста при потоковой передаче символов возврата (поддержка этого эффекта варьируется), или
  3. Не делать это вообще, а простопереход к следующей строке

Во всех случаях, описанных выше, за исключением # 3, ответственность за реализацию «таймера» лежит на вас.

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