日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

C指针原理(31)-Ncurses-文本终端的图形

發(fā)布時間:2025/3/12 编程问答 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C指针原理(31)-Ncurses-文本终端的图形 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

9、Ncurses的初始化相關(guān)工作

(1)raw()和cbreak()

禁止行緩沖,在raw()函數(shù)模式下,處理掛起(CTRLZ)、中斷或退出(CTRLC)等控制字符時,將直接傳送給程序去處理而不產(chǎn)生終端信號,而cbreak()將產(chǎn)生終端信號。

(2)cho()函數(shù)和noecho()函數(shù)

控制是否將從鍵盤輸入的字符回顯在終端上。

(3)keypad()函數(shù)

允許使用功能鍵。

(4)initscr()函數(shù)

屏幕初始化并進入curses 模式

(5)printw()與refresh()函數(shù)

printw()函數(shù)的作用是不斷將一些顯示標記和相關(guān)的數(shù)據(jù)結(jié)構(gòu)寫在虛擬顯示器上,并將這些數(shù)據(jù)寫入stdscr 的緩沖區(qū)內(nèi)。須使用refresh()函數(shù)告訴curses系統(tǒng)將緩沖區(qū)的內(nèi)容輸出到屏幕上。

下面例子演示了相關(guān)用法

(6)endwin()

函數(shù)釋放了curses 子系統(tǒng)和相關(guān)數(shù)據(jù)結(jié)構(gòu)占用的內(nèi)存,使你能夠正常返回控制臺模式。

(7)addch()、printw()、addstr()

在curses 函數(shù)中有三類輸出函數(shù),它們分別是:

addch():將單一的字符打印到屏幕上,可以附加加字符修飾參數(shù)的一類函數(shù)。

printw():和printf()一樣的具有格式化輸出的一類函數(shù)。

addstr():打印字符串的一類函數(shù),用于在指定窗口輸出字符串

(8)mvprintw()

函數(shù)將光標移動到指定的位置,然后打印內(nèi)容。

代碼如下:

dp@dp:~/cursestest % cat 1.c

#include <ncurses.h>

#include <locale.h>

int main()

{

int ch;

setlocale(LC_ALL,"");

initscr(); / 開始curses 模式/

raw(); / 禁用行緩沖/

keypad(stdscr, TRUE); / 開啟功能鍵響應(yīng)模式/

noecho(); / 當(dāng)執(zhí)行g(shù)etch()函數(shù)的時候關(guān)閉鍵盤回顯/

printw(“請按鍵!”);

ch = getch(); /* 如果沒有調(diào)用raw()函數(shù),

我們必須按下enter 鍵才可以將字符傳遞給程序*/

if(ch == KEY_F(2)) / 如果沒有調(diào)用keypad()初始化,將不會執(zhí)行這條語句/

printw(“F2鍵按下!”);

/ 如果沒有使用noecho() 函數(shù),一些控制字符將會被打印到屏幕上/

else

{

printw(“按鍵是:”);

attron(A_BOLD);

printw("%c", ch);

attroff(A_BOLD);

}

refresh(); / 將緩沖區(qū)的內(nèi)容打印到顯示器上/

getch(); / 等待用戶輸入/

endwin(); / 結(jié)束curses 模式/

return 0;

}

編譯并執(zhí)行程序:

dp@dp:~/cursestest % gcc -lncursesw 1.c -o mytest

dp@dp:~/cursestest % ./mytest

(10)scanw()函數(shù)

能夠在屏幕的任意位置讀入格式化字符串。

(11)wscanw()函數(shù)和mvwscanw()函數(shù)

從一個窗口中讀取數(shù)據(jù)

getstr()系列函數(shù)

這些函數(shù)用于從終端讀取字符串。本質(zhì)上,這個函數(shù)執(zhí)行的任務(wù)和連續(xù)用getch()函數(shù)讀取

字符的功能相同:在遇到回車符、新行符和文末符時將用戶指針指向該字符串。

示例如下:

dp@dp:~/cursestest % cat 1.c

#include <locale.h>

#include <ncurses.h>

#include <string.h>

int main()

{

char mess[]=“您的性別:”; / 將要被打印的字符串信息/

char mesg[]=“您的名字:”; / 將要被打印的字符串信息/

char name[80];

char sex[10];

int row,col; / 存儲行號和列號的變量,用于指定光標位置/

setlocale(LC_ALL,"");

initscr(); / 進入curses 模式/

getmaxyx(stdscr,row,col); / 取得stdscr 的行數(shù)和列數(shù)/

mvprintw(row/2,col/2-strlen(mesg),"%s",mesg); / 在屏幕的正中打印字符串mesg /

getstr(name); / 將指針name 指向讀取的字符串/

mvprintw(row/3,col/2-strlen(mess),"%s",mess); / 在屏幕的正中打印字符串mesg /

getstr(sex); / 將指針sex向讀取的字符串/

char man[]=“man”;

if (strcmp(sex,man)==0) {

mvprintw(LINES-2,0, “%s先生好,很高興認識您”, name);//LINES為當(dāng)前行數(shù)

}

else

{

mvprintw(LINES-2,0, “%s女士好,很高興認識您”, name);//LINES為當(dāng)前行數(shù)

}

refresh();

getch();

endwin();

return 0;

}

編譯并執(zhí)行程序:

dp@dp:~/cursestest % gcc -lncursesw 1.c -o mytest

dp@dp:~/cursestest % ./mytest

(11)窗口輸入與輸出

wprintw() 函數(shù)和mvwprintw 函數(shù)為輸出函數(shù),將在指定的窗口輸出。

wscanw()函數(shù)和mvwscanw()函數(shù)從一個窗口中讀取數(shù)據(jù)。

#include <ncurses.h>

#include <locale.h>

int main(){

//init_pair(short index,short foreground,short background)初始化顏色索引

//attron(COLOR_PAIR(索引號)|屬性)

//newwin建立窗口,derwin建立窗口的子窗口(相對于父窗口相對位置),subwin建立窗口的子窗口(相對于根窗口絕對位置)

setlocale(LC_ALL,"");char mesg[]="您的名字:"; / 將要被打印的字符串信息/char name[80];WINDOW *win1;initscr();//初始化win1=newwin(15,50,1,1);//新窗口(行,列,begin_y,begin_x)box(win1,ACS_VLINE,ACS_HLINE);mvwprintw(win1,1,1,"WIN1");mvwprintw(win1,2,1,"您好");mvwprintw(win1,3,1,"%s",mesg);wscanw(win1,"%s",name);mvwprintw(win1,5,1,"%s好,很高興認識您", name);wrefresh(win1);endwin();//結(jié)束return 0;

}

dp@dp:~/cursestest % gcc -lncursesw 2.c -o mytest

dp@dp:~/cursestest % ./mytest

(11)窗口輸入與輸出

wprintw() 函數(shù)和mvwprintw 函數(shù)為輸出函數(shù),將在指定的窗口輸出。

wscanw()函數(shù)和mvwscanw()函數(shù)從一個窗口中讀取數(shù)據(jù)。

#include <ncurses.h>

#include <locale.h>

int main(){

//init_pair(short index,short foreground,short background)初始化顏色索引

//attron(COLOR_PAIR(索引號)|屬性)

//newwin建立窗口,derwin建立窗口的子窗口(相對于父窗口相對位置),subwin建立窗口的子窗口(相對于根窗口絕對位置)

setlocale(LC_ALL,"");char mesg[]="您的名字:"; / 將要被打印的字符串信息/char name[80];WINDOW *win1;initscr();//初始化win1=newwin(15,50,1,1);//新窗口(行,列,begin_y,begin_x)box(win1,ACS_VLINE,ACS_HLINE);mvwprintw(win1,1,1,"WIN1");mvwprintw(win1,2,1,"您好");mvwprintw(win1,3,1,"%s",mesg);wscanw(win1,"%s",name);mvwprintw(win1,5,1,"%s好,很高興認識您", name);wrefresh(win1);endwin();//結(jié)束return 0;

}

dp@dp:~/cursestest % gcc -lncursesw 2.c -o mytest

dp@dp:~/cursestest % ./mytest

總結(jié)

以上是生活随笔為你收集整理的C指针原理(31)-Ncurses-文本终端的图形的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。