如何使用文件将printf作为C程序的输入提供?

时间:2013-03-04 12:52:05

标签: c linux

我知道你可以像这样给linux中的C程序输入

me $ printf "some input" | ./someProgram

我想使用文件中的输入做同样的事情,比如

me $ myProgram < myFile.txt

myProgram有两个获取语句,我想用w / printfs作为输入。

  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?

2 个答案:

答案 0 :(得分:2)

C根本不解释任何命令。当您使用... < file重定向stdin时,该文件的内容将成为您程序的输入 - 逐字逐句。所以如果文件包含

"12345"  
"abc"

,然后var1"12345"(不是12345)而var2将是"abc"(不是abc)。同样,如果文件包含

printf "12345"
printf "12345"

,然后var1将为printf "12345"var2将为printf "12345"

在我看来,你有两个选择:你要么放

12345
12345

在文件中并使用./someProgram < myFile.txt,或者您输入

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

在文件中并使用sh myFile.txt | ./someProgram(将myFile.txt的内容作为shell脚本执行)。

答案 1 :(得分:0)

您缺少尾随换行符。

printf "12345\n"应该运作良好。