调用curses.h前先要确认是否已经成功安装这个库,方法为:
ls -l /usr/include/*curses.h
ls -l /usr/lib/lib*curses*
如果没有安装,则输入下面的命令进行安装:
yum -install *curses*
建立文件a.c,这段代码可以完成如下功能:输入用户名和密码,如果用户名和密码与tsybius和123456吻合,则弹出一个小对话框
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <curses.h>
#include <string.h>
void main()
{
//初始化 curses.h
initscr();
//检查终端是否能正确显示颜色
if (!has_colors())
{
endwin();
fprintf(stderr, "终端不支持颜色显示\n");
exit(1);
}
if (start_color() != OK)
{
endwin();
fprintf(stderr, "无法初始化颜色\n");
exit(2);
}
//绘制颜色
move(0, 0);
init_pair(1, COLOR_GREEN, COLOR_BLACK);
attron(A_BOLD | COLOR_PAIR(1));
printw("LINES:%d, COLUMNS:%d", LINES, COLS);
attroff(A_BOLD | COLOR_PAIR(1));
char username[100];
char password[100];
const char* pswd = "123456";
int i;
move(4, 5);
printw("LOGIN FIRST!");
move(5, 5);
printw("USERNAME: ");
refresh();
cbreak(); //字符一经输入立刻通知程序
noecho(); //取消回显
memset(username, '\0', sizeof(username));
i = 0;
while (i < 100)
{
username[i] = getch();
if (username[i] == '\n')
{
break;
}
else if (username[i] != '\b')
{
move(5, 15 + i);
addch(username[i]);
refresh();
i++;
continue;
}
else
{
//全部删除完,不继续删除
if(i == 0)
{
continue;
}
move(5, 14 + i);
addch(' ');
move(5, 14 + i);
refresh();
i--;
}
}
move(6, 5);
printw("PASSWORD: ");
refresh();
memset(password, '\0', sizeof(password));
//输入用户名
i = 0;
while (i < 100)
{
password[i] = getch();
if (password[i] == '\n')
{
break;
}
else if (password[i] != '\b') //接到'\b'则删除前面的字符
{
move(6, 15 + i);
addch('*');
refresh();
i++;
continue;
}
else
{
//全部删除完,不继续删除
if(i == 0)
{
continue;
}
move(6, 14 + i);
addch(' ');
move(6, 14 + i);
refresh();
i--;
}
}
char temp[100];
int a = 0;
int b = 0;
//检查输入:处理掉输入内容中的'\b'
while(username[b] != '\0')
{
if(username[b] != '\b')
{
temp[a] = username[b];
a++;
b++;
}
else
{
a--;
b++;
}
if (b >= strlen(username))
{
temp[a] = '\0';
break;
}
}
//比较输入的用户名与实际的用户名
if (strncmp("tsybius", temp, 7) != 0 && temp[7] == '\0')
{
endwin();
fprintf(stderr, "USER NOT FOUND: %s\n", username);
exit(3);
}
//检查输入:处理掉输入内容中的'\b'
a = 0;
b = 0;
while(password[b] != '\0')
{
if(password[b] != '\b')
{
temp[a] = password[b];
a++;
b++;
}
else
{
a--;
b++;
}
if (b >= strlen(password))
{
temp[a] = '\0';
break;
}
}
//比较输入的密码与实际的密码
if (strncmp(pswd, temp, strlen(pswd)) != 0 && temp[strlen(pswd)] == '\0')
{
endwin();
fprintf(stderr, "INCORRECT PASSWORD\n");
exit(4);
}
echo(); //打开回显
nocbreak(); //模式切换
//背景填充字符 'X'
/*
int x_loop;
int y_loop;
char a_letter = 'X';
for (y_loop = 1; y_loop < LINES - 1; y_loop++)
{
for (x_loop = 0; x_loop < COLS - 1; x_loop++)
{
mvwaddch(stdscr, y_loop, x_loop, a_letter);
}
}
*/
refresh();
//绘制窗口
WINDOW *new_window_ptr;
new_window_ptr = newwin(20, 40, 8, 10);
box(new_window_ptr, '|', '-');
mvwprintw(new_window_ptr, 2, 13, "%s", "BUSINESS CARD");
mvwprintw(new_window_ptr, 6, 8, "%s", "NAME: TSYBIUS");
mvwprintw(new_window_ptr, 10, 8, "%s", "GENDER: MALE");
mvwprintw(new_window_ptr, 14, 8, "%s", "AGE: 23");
wrefresh(new_window_ptr);
sleep(10);
endwin(); //结束使用 curses.h
exit(EXIT_SUCCESS);
}
输入下面的命令进行编译
gcc a.c -o a -lcurses
运行效果图
END