Skip to content

7. Входные функции

lomaster edited this page Apr 13, 2023 · 1 revision

Печатать, не получая ввода, скучно. Давайте рассмотрим функции, которые позволяют нам получить ввод от пользователя. Эти функции также можно разделить на три категории.

  • Класс getch(): Получить символ
  • Класс scanw(): Получение форматированного ввода
  • Класс getstr(): Получение строк

7.1. Класс функций getch()

Эти функции считывают один символ с терминала. Но есть несколько тонких моментов, которые необходимо учитывать. Например, если вы не используете функцию cbreak(), curses не будет считывать вводимые символы последовательно, а начнет считывать их только после появления новой строки или EOF. Чтобы избежать этого, необходимо использовать функцию cbreak(), чтобы символы были сразу доступны вашей программе. Еще одна широко используемая функция - noecho(). Как следует из названия, когда эта функция установлена (используется), символы, вводимые пользователем, не будут отображаться на экране. Две функции cbreak() и noecho() являются типичными примерами управления ключами. Функции этого жанра объясняются в разделе "Управление ключами" .

(Комментарий lomaster) «EOF» это макрос значения -1.

7.2. Класс функций scanw()

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

7.2.1. scanw() и mvscanw

Использование этих функций аналогично использованию sscanf(), где строка для сканирования предоставляется функцией getstr() То есть, эти функции вызывают функцию wgetstr()(объяснение ниже) и используют полученную строку для сканирования.

7.2.2. wscanw() и mvwscanw()

Эти функции аналогичны двум вышеуказанным, за исключением того, что они читают из окна, которое предоставляется в качестве одного из аргументов этих функций.

7.2.3. vwscanw()

Эта функция аналогична vscanf(). Она может быть использована, когда необходимо просканировать переменное количество аргументов.

7.3. Класс функций getstr()

Эти функции используются для получения строк из терминала. По сути, эта функция выполняет ту же задачу, что и серия вызовов getch(), пока не будет получена новая строка, возврат каретки или конец файла. На полученную строку символов указывает str, который является указателем символов, предоставленным пользователем.

7.4. Некоторые примеры

#include <ncurses.h> /* ncurses.h включает stdio.h */
#include <string.h>

int main()
{
  char mesg[]="Введите строку: ";         /* сообщение, которое будет выведено на экран */
  char str[80];
  int row,col;                            /* для хранения количества строк и *
                                          * количество столбцов экрана */
  initscr();                              /* запуск режима curses */
  getmaxyx(stdscr,row,col);               /* получить количество строк и столбцов */
  mvprintw(row/2,(col-strlen(mesg))/2,"%s",mesg);
                                          /* ^ выведите сообщение в центр экрана */
  getstr(str);
  mvprintw(LINES - 2, 0, "You Entered: %s", str);
  getch();
  endwin();
  
  return 0;
}
Clone this wiki locally