-
Notifications
You must be signed in to change notification settings - Fork 1
7. Входные функции
Печатать, не получая ввода, скучно. Давайте рассмотрим функции, которые позволяют нам получить ввод от пользователя. Эти функции также можно разделить на три категории.
- Класс getch(): Получить символ
- Класс scanw(): Получение форматированного ввода
- Класс getstr(): Получение строк
Эти функции считывают один символ с терминала. Но есть несколько тонких моментов,
которые необходимо учитывать. Например, если вы не используете функцию cbreak()
,
curses
не будет считывать вводимые символы последовательно, а начнет считывать их
только после появления новой строки или EOF
. Чтобы избежать этого, необходимо
использовать функцию cbreak()
, чтобы символы были сразу доступны вашей программе.
Еще одна широко используемая функция - noecho()
. Как следует из названия, когда эта
функция установлена (используется), символы, вводимые пользователем, не будут
отображаться на экране. Две функции cbreak()
и noecho()
являются типичными
примерами управления ключами. Функции этого жанра объясняются в разделе
"Управление ключами" .
(Комментарий lomaster) «EOF
» это макрос значения -1.
Эти функции похожи на scanf()
с дополнительной возможностью получения входных
данных из любого места на экране.
Использование этих функций аналогично использованию sscanf()
, где строка для
сканирования предоставляется функцией getstr()
То есть, эти функции вызывают
функцию wgetstr()
(объяснение ниже) и используют полученную строку для
сканирования.
Эти функции аналогичны двум вышеуказанным, за исключением того, что они читают из окна, которое предоставляется в качестве одного из аргументов этих функций.
Эта функция аналогична vscanf()
. Она может быть использована, когда необходимо
просканировать переменное количество аргументов.
Эти функции используются для получения строк из терминала. По сути, эта функция
выполняет ту же задачу, что и серия вызовов getch()
, пока не будет получена новая
строка, возврат каретки или конец файла. На полученную строку символов указывает
str
, который является указателем символов, предоставленным пользователем.
#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;
}
Перевод lomaster & oldteam