ncurses輸入函式:字元+字串的輸入

Koma_Wong發表於2018-06-20
  • Copyright(C) NCURSES Programming HOWTO

輸入函式

如果你的程式只有輸出而沒有輸入,那是非常單調的。讓我們來看看處理使用者輸入的函式。輸入函式也被分為三種:

  • getch ()系列:讀取一個字元的一類函式。
  • scanw()系列:按照格式化讀取輸入的一類函式。
  • getstr()系列:讀取字串的一類函式。

getch()系列函式

這個函式用於從鍵盤讀入一個字元。但是在使用它的時候需要考慮一些微妙的情況:例如你沒有事先呼叫cbreak()函式的話,curses 不會連續讀取你輸入的字元,除非在輸入這些字元之前遇到了換行符或者文末符EOF)。為了避免這種情況的出現,在需要即時顯示輸入字元的程式中,必須先呼叫cbreak()函式。另外一個比較廣泛的做法是使用noecho()函式。這個函式被呼叫時,使用者輸入的字元不會立即顯示在螢幕上。cbreak()noecho()是兩個用來管理鍵盤輸入的典型函式。鍵盤管理的具體內容將在鍵盤管理一章中介紹。

scanw()系列函式

這些函式用法大體上和scanf()函式相似。只不過加入了能夠在螢幕的任意位置讀入格式化字串的功能。

scanw()函式和mvscanw()函式

scanw()函式的用法和sscanf()函式的用法基本相同。實際上,在呼叫scanw()函式時,是呼叫了wgetstr()函式,並將wgetstr()函式處理的資料結果傳送到一個scanw()呼叫中。(wgetstr()函式將在本章後半部分介紹,寫到這裡是為了結構整齊。)

wscanw()函式和mvwscanw()函式

這兩個函式的用法和以上兩個函式相似。區別在於它們從一個視窗中讀取資料。所以,它們需要指定視窗的指標作為第一個引數。

vwscanw()函式(vwscanw()

這個函式和vprintf()相似。它用於輸入變數表中所對應的變數。

getstr()系列函式

這些函式用於從終端讀取字串。本質上,這個函式執行的任務和連續用getch()函式讀取字元的功能相同:在遇到回車符、新行符和文末符時將使用者指標指向該字串。

例子

例:一個簡單的使用scanw()函式的例子。

/*
Compile: gcc main.c -lncurses
*/
#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);           /* 取得stdscr 的行數和列數*/
    mvprintw(row/2,(col-strlen(mesg))/2,"%s",mesg);
                                        /* 在螢幕的正中列印字串mesg */
    getstr(str);                        /* 將指標str 指向讀取的字串*/
    mvprintw(LINES-2, 0, "You Entered: %s", str);
    getch();
    endwin();
    return 0;
}

相關文章