• 締切済み

getchar使用時の入力文字消去方法

getcharを使用してコマンドラインからの文字を取得し strncatで文字列を生成するプログラミングを作成したのですが、コマンドラインから文字列を入力する時にバックスペースで入力している文字の消去ができません。(当然ですが・・・) どうすれば実装方法は上記のままで入力中にバックスペースで文字の消去ができますでしょうか。 教えてください。

みんなの回答

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.4

バックスペースキーじゃなくてデリートキーだったらどうなるんだろう.

  • GOOD-Fr
  • ベストアンサー率32% (83/256)
回答No.3

環境依存な話ですね。 残念ですが、ほとんどすべての言語で入出力まわりは環境依存になってしまうため、一概に「こうすればいいです」と言いきることはできません。OS に依存するのは当然ですし、コンパイラなどの言語システムで異なることもあるので、とてもやっかいなのです。 そもそもの話として、質問のような動作をすればなんでもあり、ということなのか、言語側で解決しないといけないなんらかの理由があるのかはっきりしていませんから、どういう解決策が所望であるのかも判断できません。 一般論として、「バックスペースで修正したい」ということは、一行入力を仮定しているわけですから、この場合、キー入力をしただけでは getchar 関数からリターンしてきません。「それは困る」ということであれば、一文字入力にデバイスを変更したうえで getchar をする必要がありますが、この場合、バックスペースに関してはシステム側でなにもしてくれないのは当たり前ですから、ご質問のような実装で動作しません。 このあたりの環境依存の部分については、複数のシステムでの経験がないとなかなか正しく理解できないところなので、どんな環境でも動作するようにプログラムを作りたい、ということであれば、かなりの上級者でなければ無理だと思います。

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.2

どういうプログラムでそうなるのか, 簡単な例は出せますでしょうか?

shimizuyut
質問者

補足

簡単に抜粋すると以下のようなプログラムです。 環境はUNIXです。 ユーザーから入力された文字は入力された瞬間、結合されていくので バックスペースを押しても一旦入力した文字は消えません。 とゆーかバックスペースを押すと ^H^H とでてきます。 char str[20]; int second(); int main() { second(); printf("%s\n",str);/*結合した文字列を表示*/ } int second(void) { char s;/*ユーザーからの入力値を取得する変数*/ printf( "入力してください\n"); while( s = 1 ) { s = getchar();/*文字取得します*/ if( s == '\n')/*Enterきたら終わり*/ { break; } strncat(str,&s,1);/*取得した文字を結合します。*/ } return 0; }

  • php504
  • ベストアンサー率42% (926/2160)
回答No.1

環境に依存する内容だと思いますがお使いの環境は何でしょう Windowsのコマンドプロンプトならバックスペース使えると思います

shimizuyut
質問者

補足

環境はUNIXです。 簡単に抜粋すると以下のようなプログラムです。 ユーザーから入力された文字は入力された瞬間、結合されていくので バックスペースを押しても一旦入力した文字は消えません。 とゆーかバックスペースを押すと ^H^H とでてきます。 char str[20]; int second(); int main() {   second();   printf("%s\n",str);/*結合した文字列を表示*/ } int second(void) {   char s;/*ユーザーからの入力値を取得する変数*/   printf( "入力してください\n");    while( s = 1 )    {     s = getchar();/*文字取得します*/      if( s == '\n')/*Enterきたら終わり*/      {       break;      }     strncat(str,&s,1);/*取得した文字を結合します。*/    }   return 0; }

関連するQ&A

  • 入力文字の消去スピードが遅い

    PCを買い換えたばかりです。 ワードでもWEBサイトでも、入力した文字を1文字ずつ消去するためにBack SpaceキーやDeleteキーを使うのですが、カーソルの動きがとても遅いのです。 前のPCではこんなことはありませんでした。

  • iphoneでの文字消去について

    iphoneで入力文字を消去するとき、消去ボタン(バックスペース)以外に、パソコンでいうところの「Delete」(カーソルよりも先にある文字を消去する)操作はできますか?

  • ハガキスタジオの文字入力

    初心者です。マイクロソフトのハガキスタジオについてお尋ねします。 まず文面作成しようと、「文字を入れる」をクリックしますと枠のなかに「文字を入力してください」というのが現れます。これをバックスペースで消去してから入力しますが、「印刷準備」をクリックしますと 消したはずが、又重なって現れます。 消すにはどうしたらよいでしょうか、お尋ねいたします。

  • オフィスソフトで文字入力が変になるのですが

    メールや、エクセルで文字を入力していると、突然バックスペースキーを押すと右隣の文字の消去になってしまうのですが、また、消去する文字がないと前回入力した文字が打ち込まれるのですがなぞでしょうか? パソコンはメビウスpc-cv50を使用しています。ソフトが悪いのでしょうか?パソコンとの相性でしょうか?急ぎの資料を作成したいのですが。。教えてください。

  • 秀丸エディタで【 】内の文字列の消去法

    秀丸エディタ初心者です。宜しくお願いします。 タイトルの通り、作成している文書中の【 】の中の文字列を一括で消去したいのですが、簡単にできる方法はありますか。 できれば【 】自体も一度に消去してしまえれば有り難いのですが、もし【 】が残ったとしても、これはこれで“置換”を使えば消せるので……。 過去の質問を検索してみましたが、該当するものはなさそうでした。パソコンの知識が乏しいので、分からなかっただけかもしれませんが……。 私のパソコンに関する知識は、ワープロ文書を作成できる程度(文字列の入力ができて、置換なら分かるけど、マクロって何?コマンドって何?という程度の知識)です。 そんな私でもできる方法がありましたら、ご教示、宜しくお願いします。

  • エディットボックスに入力されている文字列が、スペースだけで構成されているかどうか。

    VC++6.0・Win32APIを用いて、ウィンドウズアプリケーションを作成しています。 エディットボックスに入力されている文字列が、スペース(全角スペース又は半角スペース)のみ (それらの組み合わせでも構わない)で構成されているかどうかを判別するアルゴリズムを教えてください。 ヒントでも構いません。 エディットボックスの作成や、そこからの文字列の取得については理解しています。 あっ、でもよく考えてみたらエディットボックスかどうかは関係ないですね(^_^;) 『ある文字列が・・・』で十分ですね。 お手数をお掛けしますが、よろしくお願いいたします。

  • キーボードから入力された全角文字列(変換中、確定後)の取得方法

    JTextFieldの機能を自作しようとしています。 入力された半角文字は、getKeyChar()で取得できたのですが、このままgetKeyChar()を使うと、一文字の全角文字なら取得できますが、確定後の全角文字列は最後の1文字しか取得できません。 そこでいろいろ調べていると、変換中や確定後の文字列を取得するには、InputMethod関連を使うと良いようなのですが、実装の仕方がよく分かりません。 どのように記述すれば文字列を取得できるのでしょうか。

    • ベストアンサー
    • Java
  • コンソールアプリの入力時に改行させたくない

    プログラミング初心者です。 Visal Studio 2010を使用してC++の勉強をしています。 コンソールアプリケーションにてstd::cinを使ってstring型かchar型変数への入力を受けさせます。 cinによる入力待ちの状態になったとき、何も入力しないでエンターキーを押すと、コンソールの画面上でカーソルが次の行へ移動し、まだ入力を待ち受けてくれます。 これを、「何も入力されてない状態でエンターキーが押されたら、変数へ何も代入しない or ヌルなどを代入して、終わり」という動作にすることはできないでしょうか? 例えるなら、getcharです。getcharならエンターを押すと改行コードを受け取ってそのまま終わってくれます。しかし、入力には複数の文字列を想定しているため、getcharは使いたくありません。 cin以外の入力でも構いませんので、何か良いアイディアがありましたらご教示ください。 以上になります。説明が下手で申し訳ありません。お読みいただきありがとうございました。 よろしくお願いいたします。

  • Word2010の文字入力方法

    Wordで入力しているんですが、キーボードのようにBackspaceの文字を上にBack下にspaceと二段に入力したいのですがどうやったらいいのでしょうか?二段組みにしたいわけじゃないです。組文字にしても6文字しか入力できないので駄目でした。困っているので、よろしくお願いします。

  • 文字の入力ミスした時.....

    言葉では伝え辛いのですが、文字を入力しスペースキーを押すと変換表が一覧になって表示され、変換したい漢字でエンターーキーを押すと漢字に変換されますよね。本題に入りますが、Windows XPのパソコンを使っていた時は、ひらがなで入力しようとして、あわててスペースキーを押してしまってもバックスペースキーでひらがなに戻ったのですが、Windows Vistaのパソコンではスペースキーを押した後にバックスペースキーを押すとひらがなに戻らず文字が消えてしまいます。なので文書などを打ってて間違えてしまった時に、いちいち消してからまたひらがなで再度打ち直さないといけないので、とてもそれが厄介で困ってます。何か設定する方法はありませんか?この説明では、わかりにくかったかもしれませんが...もしあれば是非教えて下さい!お願いします!(^^)!

専門家に質問してみよう