ncurses輸出函式:字元+字串的輸出
- Copyright(C)
NCURSES Programming HOWTO
輸出函式
在curses 函式中有三類輸出函式,它們分別是:
addch()
系列:將單一的字元列印到螢幕上,可以附加加字元修飾引數的一類函式。printw()
系列:和printf()一樣的具有格式化輸出的一類函式。addstr()
系列:列印字串的一類函式。
這幾類函式可以交替使用。關鍵是要了解各類函式的具體應用環境。讓我們來看看這些函式。
addch()
系列函式
addch()
函式用於在當前游標位置輸入單個字元,並將游標右移一位。你可以使用這個函式輸出一個字元,並給其新增修飾。在後面的章節中我們將會對其做出詳細的介紹。如果一個字元關聯有修飾效果(比如:粗體、反色等等),那麼當curses 輸出這個字元的同時就會應用相關的修飾。
給單個字元關聯屬性有兩種方法:使用修飾巨集
(通過“或”
運算子)修飾。這些修飾巨集可以在標頭檔案ncurses.h
中找到。比如,你想輸出一個具有加粗(BOLD)
和加下劃線(UNDERLINE)
效果的字元變數ch,可以使用下面這種方法:
addch(ch | A_BOLD | A_UNDERLINE);
使用attrset()
、attron()
、attroff()
修飾函式。簡而言之,它們將當前的修飾關聯於給定的視窗。一旦設定完成,則在相應視窗中輸出的字元都會被修飾,直到關閉視窗。這些函式將在文字修飾一章介紹。另外,curses 提供了一些可以在字元模式下作簡單圖形的特殊字元。你可以用它們繪製表格、水平、垂直線條等等,這些特殊字元都是以ACS_
作為開頭宣告的巨集並儲存在標頭檔案ncurses.h 裡。
mvaddch()
, waddch()
和mvwaddch()
函式
mvaddch()
用於將游標移動到指定位置輸出字元。因而,下面的函式呼叫:
move(row,col); /*將游標移動到row 所指定的行和col 所指定的列。*/
addch(ch);
可以用以下的等價函式取代:
mvaddch(row,col,ch);
waddch()
函式和addch()
函式類似。不同的是,waddch()
函式是將字元輸出到指定視窗的指定座標處。(注:addch()
將字元輸出到標準輸出stdscr 上。) 同樣的mvwaddch()
函式是把游標移動到指定視窗中的指定位置處輸出字元。 現在,我們熟悉了一些基本的輸出函式。但是,如果我們要輸出字串,像這樣一個一個的輸出字元是很煩人的。幸好,ncurses 為我們提供了像printf()
和puts()
一樣方便的函式。
printw()
系列函式
這些函式的用法和我們熟悉的printf()
函式相似,但增加了可以在螢幕任意位置輸出的功能。
printw()
函式和mvprintw()
函式
這兩個函式的絕大部分用法和printf()
函式相同。mvprintw()
函式將游標移動到指定的位置,然後列印內容。如果你想先移動游標,再呼叫printw()
函式,也就是說先呼叫move()
函式,然後呼叫printw()
函式。我不知道為什麼有些人非要使用這兩個函式代替一個函式,當然決定權在你手裡。
wprintw()
函式和mvwprintw
函式
這兩個函式和以上兩個函式類似。區別在於這兩個函式將在指定的視窗輸出內容,而以上兩個函式將內容輸出到標準輸出stdscr 上。
vwprintw()
函式
這個函式和vprintf()
相似,用於列印變數表中所對應的變數。
一個簡單的printw()
函式的使用例子
- 例:一個簡單的
printw()
函式的使用例子:
/*
Compile: gcc main.c -lncurses
*/
#include <ncurses.h> /* ncurses.h 已經包含了stdio.h */
#include <string.h>
int main()
{
char mesg[]="Just a string"; /* 將要被列印的字串*/
int row,col; /* 儲存行號和列號的變數,用於指定游標位置*/
initscr(); /* 進入curses 模式*/
getmaxyx(stdscr,row,col); /* 取得stdscr(標準輸出裝置)的行數和列數*/
mvprintw(row/2,(col-strlen(mesg))/2,"%s",mesg);
/*在螢幕的正中列印字串mesg*/
mvprintw(row/2,0,"This screen has %d rows and %d columns\n",row,col);
printw("Try resizing your window(if possible)and then run this program again");
refresh();
getch();
endwin();
return 0;
}
上面這個程式展示了使用printw()
系列函式輸出字元是多麼簡單。你只需要修改要輸出的行列座標和要列印的資訊,它就會按你的需要輸出。這個程式引入了一個新函式getmaxyx()
,這是一個定義在ncurses.h
中的巨集,可以給出指定視窗的行列數目。getmaxyx()
是通過修改所給變數實現這一功能的。getmaxyx()
不是一個函式,因此不能以指標作為引數,只能通過兩個整型變數來實現。
addstr()
系列函式
addstr()
函式用於在指定視窗輸出字串,如同連續使用addch()
函式來輸出指定字串中的每個字元。實際上,也就是所有addstr()
系列輸出函式的事實。addstr()
系列函式還包括mvaddstr()
、mvwaddstr()
和waddstr()
,它們有著相同的curses 命名規則和呼叫方法(如mvaddstr()
函式就是分別呼叫了move()
和addstr()
函式)。這個函式集中,還有一個特殊函式addnstr()
,它需要一個整型引數n
,用來列印字串中的前n
個字元。如果這個引數是負數,addnstr()
將會列印整個字串。
提醒
所有這些函式中使用座標時,先給定y
座標,再給定x
座標,也就是先行後列。因為計算機字元模式是逐行顯示的。很多初學者因為數學上的使用習慣,而錯誤的先x
後y
。如果你進行了過多行列座標的操作,想想看將螢幕分割成幾個不同的視窗,然後獨立處理每一個單獨視窗的情形。
相關文章
- ncurses輸入函式:字元+字串的輸入函式字元字串
- 常用輸入輸出函式函式
- 輸入一段字串,去除字串中重複的字元,並輸出字串字元
- 輸出輸入函式彙總函式
- 新手學python之Python的輸入輸出函式Python函式
- C++逐字輸出函式C++函式
- 輸出儲存在記憶體中的字串(迴圈輸出每一個的字元和一次性全部輸出)記憶體字串字元
- 字串指標的輸出字串指標
- 字串倒序輸出字串
- C語言_輸入輸出函式_PAGE5C語言函式
- Go 最直接的debug 方式 輸出函式Go函式
- 輸入一個ASCII碼,輸出對應的字元ASCII字元
- 將輸入的字元轉化為int格式輸出字元
- 字元輸出流_Writer類&FileWriter類介紹和字元輸出流的基本使用_寫出單個字元到檔案字元
- 寫一個函式,輸入一個4位數字,要求輸出這4個數字字元函式字元
- thinkphp 輸出變數使用函式處理PHP變數函式
- 【MATLAB】利用size()函式輸出陣列大小Matlab函式陣列
- python字串格式化輸出Python字串格式化
- 字串拼接格式化輸出字串
- 字串、整數倒序輸出字串
- C語言——常用標準輸入輸出函式 scanf(), printf(), gets(), puts(), getchar(), putchar(); 字串拷貝函式 strcpy(), strncpy(), strchr(), strstr()函式用法特點C語言函式字串
- 一、輸入一個數(這裡用函式實現) 1.輸出它是幾位數 2.逆序輸出 3.正序輸出函式
- Python 字串格式化輸出方式Python字串格式化
- 字串中大小寫轉換輸出字串
- 輸入輸出
- 用指標編寫程式將輸入的字串倒序輸出指標字串
- linux中的輸入與輸出管理(重定向輸入,輸出,管道符)Linux
- 轉載:字元輸出流Writer簡要概括字元
- 資料的輸入輸出
- Oracle:SYS_REFCURSOR作為函式中的輸出引數Oracle函式
- 輸入輸出流
- 輸出
- 第四章 字串和格式化輸入/輸出字串
- 7-1 jmu-python-輸入輸出-計算字串中的數Python字串
- flink的print()函式輸出的都是物件地址而非物件內容函式物件
- 呼叫函式:如把ssha的值在SSHA的框中輸出函式
- 【char* 字元指標的用法】及【輸出NULL的問題】字元指標Null
- ACM的Python版輸入輸出ACMPython