2016-05-03 10 views
1

ユーザが指定した文字列をシミュレートする自動入力ボットを作成しました。私が使用して入力を取ってい' n'を含む文字列の入力方法

printf("Enter speed (wpm) (1 to 11750):"); 
    scanf("%d", &speed); 
    if(speed < 1 || speed > 11750) 
    { 
     printf("\nPlease provide CORRECT DATA\n"); 
     return -1; 
    } 

    printf("Paste the String : \n"); 
    gets(exaArray); 
    exaArrayLength = strlen(exaArray); 
    relation = (int)11750/speed; 
    printf("typing will start in 2 sec-\n"); 
    Sleep(2000); 
    i=pos=0; 

    while(i<=exaArrayLength) 
    { 
     Sleep(relation); 
     if((exaArray[pos]>96) && (exaArray[pos]<123)) //small letters 
     { 
      keycode=0x41 + (exaArray[pos]%97); 
      smallLetter(keycode); //function for key simulation 
     }  
     ..... 

機能を取得します。

私のコードはこれです。このプログラムは、Enterを含まないテキストを貼り付けるとうまく動作します。したがって、このプログラムは1つの段落でうまく動作します。 しかし、ユーザーが複数の段落を提供している場合は、最初の段落だけをシミュレートします。

getsは '\ n'で終了するためです。どの関数が複数の段落の入力を受け取り、それを文字列に割り当てることができるか。

+1

これまでに読み込まれたものを連結して、読み取り機能をループします。 – alk

+3

OT:Aaand do *** ***は 'gets()'を使いますが、代わりに 'fgets()'を使います。 – alk

+0

@alk sir、もし私がこのような入力を使うなら - fgets(s、20000、stdin); ユーザー入力にEnterまたは\ nがある場合、このステートメントは終了しませんか? –

答えて

2

まあ、ユーザーがEnterキーを押しても、改行を含む「貼り付けた」文字列との間に違いはありません。

1つの段落の後に問題を終了させずに続行したい場合は、コメント欄に示唆されているようにすることができます(読み取り機能の周りをループする) - プログラムを終了するにはCtrl + Cキーが必要ですが、技術的には一度に1つの段落になります。あなたはさらにプログラムで何をしたいのかによって異なります。

一方、ユーザーがすべてのテキストを一度に入力して処理するには、「改行」以外のものを「入力の終了」マーカーとして定義する必要がありますESCのようなもの。

あなたはgetchar代わりのgetsを使用して、手動で文字列バッファにこのように入力され、文字がインスタンスの値27を(キーをエスケープ)を持っていれば、あなたが入力ループを終了することになる各文字を連結することによってこれを行うだろう出力を開始します。

3

これは実際には非常に難しく複雑な問題であり、自動化された方法で解決するのは容易ではありません。

ループで読むのは良い解決策に見えますが、それ以上の入力がなく、読み込み機能がより多くの入力を待っているときに来るようになります。これを行う最も簡単な方法は、ユーザにファイルの最後のキーの組み合わせ()(LinuxまたはOSXなどのPOSIXシステムではCTRL-D、WindowsではCTRL-Z)を入力させることですが、それをする。

この問題は、あなたのプログラムがどれくらいのデータを読むことが予想されているか分かりませんし、基本的にユーザーが「それはもうそれ以上データ"。

ユーザに「ファイルの終わり」を与えてもらうために、他のシーケンスや特殊キー、入力のフレーズを使用して終わりをマークすることもできますが、すべてこれになります。ユーザーが「入力しない」と言うまでループします。

関連する問題