回 目 录
上 一 章 下 一 章

# 第七章：关于类似scanw()的输入函数

  如果在屏幕上只是打印而没有输入的话，那样的程序是索然无味的。所以让我们来看看那些处理用户输入的函数。这些函数也被分为三类：
  getch()类函数集：读取一个字符的一类函数。
  scanw()类函数集：按照格式化读取输入的一类函数
  getstr()类函数集：读取字符串的一类函数。

### 7.1. getch()函数集

  这些函数将从终端读入一个字符。但是在使用它的时候需要考虑有些微妙的情况：比如你没有事先调用cbreak()函数的话，CURSES将不会连续读取你输入的字符，除非你输入了换行符或者文末符。为了避免这种情况的出现，在需要即时显示输入字符的程序中，必须先调用cbreak()函数。另外一个被广泛使用的函数是noecho()。这个函数被调用时，用户输入的字符不会将显示在屏幕上。cbeak()和noecho()是两个典型的用于键盘管理的函数。这类的函数将在键盘管理一章中说明。

### 7.2. scanw()函数集

  这些函数用法大体上和scanf()函数相似。只不过加入了能够在屏幕的任意位置格式化输入字符串的功能。

#### 7.2.1. scanw()函数和mvscanw()函数

  scanw()函数的用法和sscanf()函数的用法基本相同。实际上，在调用scanw()函数时，是调用了wgetstr()函数，并将wgetstr()函数处理的数据结果传送到一个scanw()调用中。（wgetstr()函数将在下面详细介绍，写到这里是为了结构整齐。）

#### 7.2.2. wscanw()函数和mvwscanw()函数

这两个函数的用法和以上两个函数相似。区别在于它们从一个窗口中读取数据。所以，它们需要提供指定窗口的指针。

#### 7.2.3. vwscanw()函数

  这个函数和vprintf()相似。它用于输入变量表中所对应的变量。

###
7.3. getstr()函数集

  这些函数用于从终端取得字符串。本质上，连续使用getch()函数直到读到一个换行符（或文末符）和这个函数使用的结果是一样的。当健入后它会创建一个指向这个字符串的指针

### 7.4. 例子

例4：一个简单的使用scanw()函数的例子。

    #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;
    }

回 目 录
上 一 章 下 一 章