アプリ版:「スタンプのみでお礼する」機能のリリースについて

getcharを使用してコマンドラインからの文字を取得し
strncatで文字列を生成するプログラミングを作成したのですが、コマンドラインから文字列を入力する時にバックスペースで入力している文字の消去ができません。(当然ですが・・・)

どうすれば実装方法は上記のままで入力中にバックスペースで文字の消去ができますでしょうか。

教えてください。

A 回答 (4件)

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

    • good
    • 0

環境依存な話ですね。


残念ですが、ほとんどすべての言語で入出力まわりは環境依存になってしまうため、一概に「こうすればいいです」と言いきることはできません。OS に依存するのは当然ですし、コンパイラなどの言語システムで異なることもあるので、とてもやっかいなのです。
そもそもの話として、質問のような動作をすればなんでもあり、ということなのか、言語側で解決しないといけないなんらかの理由があるのかはっきりしていませんから、どういう解決策が所望であるのかも判断できません。

一般論として、「バックスペースで修正したい」ということは、一行入力を仮定しているわけですから、この場合、キー入力をしただけでは getchar 関数からリターンしてきません。「それは困る」ということであれば、一文字入力にデバイスを変更したうえで getchar をする必要がありますが、この場合、バックスペースに関してはシステム側でなにもしてくれないのは当たり前ですから、ご質問のような実装で動作しません。

このあたりの環境依存の部分については、複数のシステムでの経験がないとなかなか正しく理解できないところなので、どんな環境でも動作するようにプログラムを作りたい、ということであれば、かなりの上級者でなければ無理だと思います。
    • good
    • 0

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

この回答への補足

簡単に抜粋すると以下のようなプログラムです。
環境は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;
}

補足日時:2008/12/11 16:21
    • good
    • 0

環境に依存する内容だと思いますがお使いの環境は何でしょう


Windowsのコマンドプロンプトならバックスペース使えると思います

この回答への補足

環境は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;
}

補足日時:2008/12/11 16:40
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!