ユーザーが「バックスペース」文字を入力したかどうかを確認する方法を教えてください。
Cプログラムでgetch() function i.e. "key = getch()"
を使用しています。バックスペースが押されたときに確認したいと思います。この線:
if(key = '\b') { ....
動作しません。
読書の問題 Backspace ほとんどの端末は、バックスペースなどのキーが端末ドライバによって処理されるという点で「調理」されています。ただし、curses関数getch()
は、ターミナルに関連付けられていないため、バックスペースを読み取ることができます。
入力にgetch()
を使用しているコードがであることに気づきました。小さなテストプログラムを実行したところ、バックスペースを押すとgetch()
が127を返します。したがって、試してください:
if (key == 127 || key == 8) { ... /* Checks for both Delete or Backspace */
また、サンプルコードではequality演算子=
を使用する必要がある場合にassignment演算子==
を使用することに注意してください。
getch()
関数がどのライブラリからのものであるかは言いませんでした(これはC標準の一部ではありません)。ncursesからのものである場合は、key
の値をチェックできますKEY_BACKSPACE
。
I/Oストリームのタイプが役立つ場合があります。標準入力ストリームは一種のラインバッファストリームであり、 '\ n'文字を書き込むまでフラッシュされません。完全にバッファリングされたストリームは、バッファがいっぱいになるまでフラッシュされません。フルバフストリームでバックスペースを書き込むと、「\ b」がキャプチャされる場合があります。
UNIX環境アドバンテージプログラムを参照してください。
これを試して:
#include <stdio.h> /* printf */
#include <ctype.h> /* isalpha isdigit isspace etc */
#define FALSE 0
#define TRUE 1
/* function declarations */
int char_type(char);
main()
{
char ch;
ch = 127;
char_type(ch);
ch = '\b';
char_type(ch);
return 0;
}
int char_type(char ch)
{
if ( iscntrl(ch) != FALSE)
printf("%c is a control character\n", ch);
}
これは完全なプログラムですが、制御文字のみをテストします。あなたはそれの原則、あなたの選択を使うことができます。ただ学ぶだけ!
参照: http://www.tutorialspoint.com/c_standard_library/ctype_h.htm またはC標準ライブラリのctype.hヘッダーファイルの関数を検索します。
入力を受け取っているのは良いことです。情報をありがとう。私はただバックスペースコードを調べていて、この質問を見つけました。
ところで、任意の文字の前に '\ 0'を試してください。それが何をするかわからないが、それはその後のすべてのコードを停止します。それは戻り値0のようなものですか。ライン?