curs_scanw(3x) curs_scanw(3x)
scanw, wscanw, mvscanw, mvwscanw, vwscanw, vw_scanw - curses ウインドウからの書式つき入力の変換
#include <curses.h> int scanw(char *fmt, ...); int wscanw(WINDOW *win, char *fmt, ...); int mvscanw(int y, int x, char *fmt, ...); int mvwscanw(WINDOW *win, int y, int x, char *fmt, ...); int vw_scanw(WINDOW *win, char *fmt, va_list varglist); int vwscanw(WINDOW *win, char *fmt, va_list varglist);
scanw, wscanw, mvscanw ルーチンは scanf に類似した ルーチンです。[scanf(3) 参照] 実際には、これらのルーチンは、そのウインドウで wgetstr が 呼び出され、結果の行を sscanf(3) の入力に用いたように なります。 fmt フィールドで変数に対応付けられていないフィールドは 失われます。 vwscanw, vw_scanw ルーチンは vscanf に類似したルーチンです。 これらは可変引数リストを使って wscanw を実行します。 第 3 引数は引数リストへのポインタで、<stdarg.h> で 定義されている va_list 型です。
vwscanw は失敗のとき ERR を、成功のとき読み取った フィールドの数に等しい整数を返します。 アプリケーションは呼び出しで代入されたフィールドの数を 判定するために scanw, wscanw, mvscanw, mvwscanw ルーチンの 戻り値を使うことができます。 mv で始まる関数は、最初に wmove を使用してカーソルを移動し、 位置がウインドウの外だった場合、またはウインドウ・ポインタが ヌルの場合にエラーを返します。
これらの関数は XSI Curses standard, Issue 4 に記載されて います。 vwscanw 関数は廃止項目と注記されており、 <stdarg.h> インターフェイスを使った vw_scanw 関数によって 置き換えられるでしょう。 Single Unix Specification, Version 2 は、<stdarg.h> と 同じファイルで使うことができない <varargs.h> を取り込む必要が ある vwscanw よりも vw_scanw が適していると明記しています。 この実装では両方に <stdarg.h> を使っています。 このヘッダファイルが <curses.h> で取り込まれるためです。 XSI と Single Unix Specification, Version 2 はともに、 これらの関数は ERR または OK を返すと明記しています。 元となった scanf は代入した項目の数を返せますし、 SVr4 のコードはこの機能を使うと説明されているので、 これはおそらく XSI に導入された編集上の誤りであって、 意図的なものではないでしょう。 ポータブル・アプリケーションは戻り値が ERR かどうかだけを 調べるべきです。OK 値 (ゼロ) は誤解を招きそうだからです。 意味のある結果を得るためにできる 1 つの手段は、 書式文字列の最後に "%n" 変換を使って、何かが処理されたことを 確かめることでしょう。
curses(3x), curs_getstr(3x), curs_printw(3x), scanf(3) curs_scanw(3x)