0

我知道你可以像这样在 linux 中为 C 程序提供输入

me $ printf "some input" | ./someProgram

我想使用来自文件的输入做同样的事情,像这样

me $ myProgram < myFile.txt

myProgram 有两个获取语句,我想用 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 输入?

4

2 回答 2

2

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

"12345"  
"abc"

, 然后var1将是"12345"(not 12345) 并且var2将是"abc"(not 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 脚本执行)。

于 2013-03-04T13:02:23.780 回答
0

您缺少尾随换行符。

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

于 2013-03-04T12:55:51.177 回答