| 函數原型 | 功能說明 | 關鍵特性 |
|---|---|---|
int addch(chtype ch) | 在光標位置輸出字符,不自動刷新 | 需配合 refresh() 顯示 |
int echochar(chtype ch) | 輸出字符並自動刷新窗口 | 等價 addch() + refresh() |
int addstr(char* str) | 輸出字符串,超出屏幕寬度截斷 | 不換行,光標移至字符串末尾 |
int printw(char* fmt, ...) | 格式化輸出(類 printf) | 支持 %d %s %c %f 等格式符 |
int insch(chtype ch) | 在光標位置插入字符,右側字符右移 | 最右字符超出屏幕則丟失 |
int delch() | 刪除光標處字符,右側字符左移 | |
int insertln() | 在光標行插入空行,當前行及以下下移 | 最後一行丟失 |
int deleteln() | 刪除光標行,下方所有行上移,最後一行填空格 |
窗口相關變體:所有函數均有 w 前綴(指定窗口)、mv 前綴(移動光標)、mvw 組合前綴版本,如 waddch(win, ch)、mvaddstr(y, x, str)、mvwprintw(win, y, x, fmt, ...)。
typedef unsigned long chtype;| 組合字符與屬性:addch('A' | A_BOLD | COLOR_PAIR(1))ACS_ULCORNER ┌ ACS_URCORNER ┐ ACS_LLCORNER └ ACS_LRCORNER ┘ ACS_HLINE ─ ACS_VLINE │ ACS_PLUS ┼ ACS_TTEE ┬ ACS_BTEE ┴ ACS_LTEE ├ ACS_RTEE ┤ ACS_DIAMOND ◆ ACS_CKBOARD : ACS_DEGREE ° ACS_PLMINUS ± ACS_BULLET ● ACS_LARROW ← ACS_RARROW → ACS_UARROW ↑ ACS_DARROW ↓ ACS_BLOCK █ ACS_LANTERN # ACS_BOARD #
| 函數原型 | 功能說明 | 返回值 |
|---|---|---|
int getch() | 讀取一個字符(無回顯),返回字符整數值 | 成功:字符碼;失敗:ERR |
int getstr(char* str) | 讀取字符串(以換行結束),存入 str,\n 轉為空格 | 成功:OK;失敗:ERR |
int scanw(char* fmt, ...) | 格式化輸入(類 scanf),從當前光標位置讀取 | 成功賦值的項目數 |
窗口變體:wgetch(win)、wgetstr(win, str)、wscanw(win, fmt, ...)、mvgetch(y, x) 等。
cbreak():字符緩衝模式,無需回車即可讀取,Ctrl+C 仍產生信號nocbreak():行緩衝模式(默認),需回車確認echo()/noecho():控制輸入字符是否回顯keypad(win, TRUE):啟用功能鍵(方向鍵、F1-F12 等返回 KEY_* 常量)nodelay(win, TRUE):非阻塞模式,無輸入時 getch() 立即返回 ERRhalfdelay(tenths):帶超時的阻塞,tenths 為十分之一秒#include <curses.h>
int main() {
initscr();
cbreak();
noecho();
keypad(stdscr, TRUE);
int y = 0, x = 0;
move(y, x);
int ch;
while ((ch = getch()) != 'q') { // 'q' 退出
switch (ch) {
case KEY_UP: if (y > 0) y--; break;
case KEY_DOWN: y++; break;
case KEY_LEFT: if (x > 0) x--; break;
case KEY_RIGHT: x++; break;
case KEY_BACKSPACE:
case 127: // Backspace
if (x > 0) { x--; delch(); }
break;
case '\n': // Enter
y++; x = 0; break;
default:
if (ch >= 32 && ch <= 126) { // 可打印字符
insch(ch);
x++;
}
}
move(y, x);
}
endwin();
return 0;
}
refresh() 或 wrefresh(win),或使用 echochar() 系列cbreak() + noecho() + keypad() 是遊戲/編輯器標準配置w/mv/mvw 前綴組合,精確控制位置與窗口nodelay()/halfdelay() 實現動畫、實時更新等場景