0

このようにLinuxでCプログラムに入力できることは知っています

me $ printf "some input" | ./someProgram

このように、ファイルからの入力を使用して同じことをしたい

me $ myProgram < myFile.txt

myProgram には、printfs を入力として入力したい 2 つの get ステートメントがあります。

  printf("...."); fflush(stdout);
  gets(var1);
  printf("...."); fflush(stdout);
  gets(var2);

このように入力ファイルから変数を入力すると、プログラムは期待どおりに動作します

"12345"  //expect to fill var1 w/ 12345 and it does
"12345"  //expect to fill var2 w/ 12345 and it does

しかし、入力ファイルが次のようになっていると、プログラムは期待どおりに動作しません

printf "12345"  //expect to fill var1 w/ 12345 but it does not
printf "12345"  //expect to fill var2 w/ 12345 but it does not

明らかに、C は、コマンドを入力として与え、それをプログラムにパイプした場合と同じように、印刷コマンドを解釈していません。

どうしたの?何を修正すればよいですか?ファイルからprintf入力を与えるにはどうすればよいですか?

4

2 に答える 2

2

C はコマンドをまったく解釈していません。を使用... < fileしてリダイレクトするstdinと、そのファイルの内容がプログラムへの入力になります。したがって、ファイルに含まれている場合

"12345"  
"abc"

、その後、 (ではない)になり、var1(ではない)になります。同様に、ファイルに"12345"12345var2"abc"abc

printf "12345"
printf "12345"

、その後、にvar1なります。printf "12345"var2printf "12345"

私が見ているように、あなたには 2 つの選択肢があります。

12345
12345

ファイル内で を使用する./someProgram < myFile.txtか、

printf "12345\n"
printf "12345\n"

ファイル内で使用しますsh myFile.txt | ./someProgram(myFile.txt の内容をシェル スクリプトとして実行します)。

于 2013-03-04T13:02:23.780 に答える
0

末尾の改行がありません。

printf "12345\n"うまくいくはずです。

于 2013-03-04T12:55:51.177 に答える