1

ユーザー入力を探して、ストリームとしてfgets()呼び出す関数があります。stdinただし、ユーザー入力を求めるのではなく、入力内容をプログラムに決定させたい場合があります。stdinで関数を呼び出す前に値をバッファにロードする方法を見つけることができれば、プログラムの入力を取りながらfgets()、含まれている関数を変更することはできませんか? fgets()もしそうなら、どのようにstdinバッファをロードしますか?

4

2 に答える 2

2

私はあなたが試すのを楽しむかもしれないクールなトリックを持っています:

#include <stdio.h>
#include <string.h>

int main(void) {
  char myString[100];
  char *hello = "hello world\n";
  int ii;
  for(ii=strlen(hello); ii>=0; ii--) ungetc(hello[ii], stdin);
  fgets(myString, 99, stdin);
  printf("I just read '%s'\n", myString);
  return 0;
}

コンパイルして実行すると、次のようになります。

I just read 'hello world
'

newlineが文字列に残っていることに注意してください(fgetsすぐに返す必要がありました)。そのため、個別に処理する必要があります。キャリッジ リターンを個別に押す必要はありませんでした。プログラムを実行するだけです。

これをニーズに合わせて調整できると確信しています。

于 2013-10-16T03:22:25.147 に答える
0

答えはありますが、std バッファーは関係ありません。私が書いたいくつかのプログラムでは、オプションのコマンド ライン パラメーターがありました。コマンド ライン フラグを追加し、オプションの入力をコマンド ラインまたは入力テキスト ファイルとして含めることができます。このオプションがあなたに合っている場合は、この回答を拡張できます。

于 2013-10-16T03:09:13.027 に答える