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