Функції, призначені для вводу

Гаразд, вивід без можливості вводу - це нудно. Давайте розглянемо функції, що дозволяють нам отримати ввід користувача. Ці функції також можна поділити на три категорії.

  1. клас getch(): одержує один символ
  2. клас scanw(): одержує форматований ввід
  3. клас getstr(): одержує ланцюжок

Клас функцій getch()

Ці функції читають по одному символу з терміналу. Але існують певні тонкощі, які слід пам'ятати. Наприклад, якщо ви не використали функцію cbreak(), curses не читатиме введені знаки неперервно, а лише після того, як зустрінуто знак нового рядка або EOF (знак кінця файлу). Щоб запобігти цьому, потрібно використати функцію cbreak(), тож введені знаки одразу стануть доступними вашій програмі. Іншою поширеною функцією є noecho(). Як сама назва підказує, коли використано цю функцію, знаки, введені користувачем, не відображуватимуться на екрані. Функції cbreak() і noecho() типово застосовуються для обробки ключів. Ключі ми розглянемо пізніше у відповідному розділі.

Клас функцій scanw()

Ці функції схожі до стандартної scanf(3), але з доданою можливістю отримувати ввід з будь-якого місце екрану.

scanw() і mvscanw()

Використання цих функцій подібне до sscanf(3), де рядок, що буде скановано надається функцією wgetstr(). Тобто, ці функції приховано викликають wgetstr() (розглянуту нижче) і використовують отриманий рядок для обробки.

wscanw() and mvwscanw()

Ці функції тотожні вищевказаним, з тією різницею, що вони читають з вікна, вказаного як один з аргументів.

vwscanw()

Ця функція подібна до стандартної vscanf(3), і використовується, коли необхідно просканувати змінне число аргументів.

Клас функцій getstr()

Цей клас функцій вживається, коли необхідно одержати ланцюжки з терміналу. По суті, ці функції виконують те саме, що й ряд викликів getch() до тих пір, доки отримано знак нового рядка, повернення каретки або EOF (кінець файлу). Вказаний користувачем, покажчик str указуватиме не отриманий в результаті ланцюжок.

Декілька прикладів

7.4 Приклад вводу

Приклад 4. Простий виклик scanw()

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

int main()
{
    char mesg[] = "Enter a string: ";   /* повідомлення для виводу на екран  */
    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;

}