web-dev-qa-db-ja.com

Cで「バックスペース」文字を確認する方法

ユーザーが「バックスペース」文字を入力したかどうかを確認する方法を教えてください。

Cプログラムでgetch() function i.e. "key = getch()"を使用しています。バックスペースが押されたときに確認したいと思います。この線:

 if(key = '\b') { ....

動作しません。

21
joel

読書の問題 Backspace ほとんどの端末は、バックスペースなどのキーが端末ドライバによって処理されるという点で「調理」されています。ただし、curses関数getch()は、ターミナルに関連付けられていないため、バックスペースを読み取ることができます。

編集する

入力にgetch()を使用しているコードであることに気づきました。小さなテストプログラムを実行したところ、バックスペースを押すとgetch()が127を返します。したがって、試してください:

if (key == 127 || key == 8) { ... /* Checks for both Delete or Backspace */

また、サンプルコードではequality演算子=を使用する必要がある場合にassignment演算子==を使用することに注意してください。

27
SiegeX

getch()関数がどのライブラリからのものであるかは言いませんでした(これはC標準の一部ではありません)。ncursesからのものである場合は、keyの値をチェックできますKEY_BACKSPACE

1
Adrian Lopez

I/Oストリームのタイプが役立つ場合があります。標準入力ストリームは一種のラインバッファストリームであり、 '\ n'文字を書き込むまでフラッシュされません。完全にバッファリングされたストリームは、バッファがいっぱいになるまでフラッシュされません。フルバフストリームでバックスペースを書き込むと、「\ b」がキャプチャされる場合があります。

UNIX環境アドバンテージプログラムを参照してください。

1
user531771

これを試して:

#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のようなものですか。ライン?

0