今、Ubuntuからcursesの勉強をしてまして、私が思っていた結果
と違う動きをし悩んだ末、投稿させていただきました。
以下のようなプログラムで
値を12345..と入力しエンターキーを押すとこの行の先頭に行ってしまうのです。youtube参照
[youtube][/youtube]
#include<ncurses.h>
#include<locale.h>
main()
{
int c;
setlocale(LC_ALL,"");
initscr();
echo();
//noecho();
//cooked();
//nonl();
//nonl();
//nocbreak();
//cbreak();
//raw();
//noecho();
//beep();
addstr("関数addch()のテストです\n");
addstr("プログラムを終了するには'e'を入力してください\n");
refresh();
while((c = getchar()) != 'e')
{
addch(c);
refresh();
}
endwin();
return 0;
}
理想だと
12345 enter
12345
になるはず。。
これはデフォルトでcookedモードになっているのかわからないし
getchar( )でバッファリングされているかもわからないなど、、、
Ubutuの端末が問題なのか、cursesのバージョンが問題なのか、
先に進みにくい状態になってしまってます。
どうかよろしくお願いします。
curses動作不良
Re: curses動作不良
mikkoさんありがとうございます。
if (c == '\r') c = '\n';
加えたら改行は解決しました。しかし
getchar( )がバッファリングしてないようで、以下のようにならないです
<理想>
12345 Enter
12345
<現実>
12345 Enter
_
なおnoecho( )モードで入力すると表示してしまうなど、
機能しているのか、していないのか、なんだかおかしいのです。
ご教授お願いいたします。
if (c == '\r') c = '\n';
加えたら改行は解決しました。しかし
getchar( )がバッファリングしてないようで、以下のようにならないです
<理想>
12345 Enter
12345
<現実>
12345 Enter
_
なおnoecho( )モードで入力すると表示してしまうなど、
機能しているのか、していないのか、なんだかおかしいのです。
ご教授お願いいたします。
Re: curses動作不良
まずはgetcharの替わりにgetchを使うべきかと。えいえい さんが書きました:これはデフォルトでcookedモードになっているのかわからないし
getchar( )でバッファリングされているかもわからないなど、、、
Ubutuの端末が問題なのか、cursesのバージョンが問題なのか、
先に進みにくい状態になってしまってます。
Re: curses動作不良
ISLeさんありがとうございます。
getch( )に変えて、さらにecoho()でnobreak( )にしたら理想通りなりました。
しかし、何でgetch( )じゃないとできないのか? getchar( )は何で駄目なのか?
ネットで調べても違いがわかる内容ででてこないです。
ご教授おねがいします
getch( )に変えて、さらにecoho()でnobreak( )にしたら理想通りなりました。
しかし、何でgetch( )じゃないとできないのか? getchar( )は何で駄目なのか?
ネットで調べても違いがわかる内容ででてこないです。
ご教授おねがいします
Re: curses動作不良
getcharは標準ライブラリ関数(あるいはマクロ)なので、cursesライブラリを使ったモード変更が影響するかどうか保証がないですが、
getch関数はcursesライブラリの関数なので、cursesライブラリを使ったモード変更は適用されると期待できます。
getch関数はcursesライブラリの関数なので、cursesライブラリを使ったモード変更は適用されると期待できます。