0

如何将参数传递给 C 程序,该程序从已保存的文本文件中的某些输入流(如 scanf() )获取输入,并且正在使用Java中的Runtime.getRuntime().exec()运行 .exe。

4

2 回答 2

1

在我看来,您想将数据从文件传递到您的程序,而不是以交互方式进行。您可以为此使用 I/O 重定向。在 unix 哲学中everything is a file,这很有帮助,因为您的输入流stdin也是一个文件。

让我用一个例子来说明这一点。我会发一个

int main(){
  int a, b;
  std::cin >> a >> b;
  std::cout << a+b << std::endl;
  return 0;
}

你用类似的东西编译它并像这样g++ sum.cpp运行它

./a.out 
3 4

7这会按您的预期打印。但是您必须手动输入这些数据,如果这些数据保持不变,那么一遍又一遍地输入是没有意义的。这里是 I/O 重定向。我们要做的是告诉程序stdin,它应该从另一个文件中读取,而不是从 .

要对此进行测试,请创建一个简单的文本文件input.text3 4并将其作为其内容。现在运行这个程序,如果您更改文件中的数字并再次运行程序,./a.out < input.txt这将再次打印7,您将获得适当的结果。

因此,您尝试做的事情与 Java 或 C 或 scanf 或其他获取输入的方式无关。作为旁注而不是使用Runtime,您应该考虑使用commons exec. 为了更好地理解重定向,请阅读thisthis

注意:既然您提到要运行exe文件,我假设您运行 Windows。您可能需要更改a.outa.exe或您的 ide 将其编译成的任何名称。希望如果我没有清楚地解释某些事情,请随时让我知道。

于 2013-05-08T12:43:34.030 回答
1

Runtime.exe允许您指定要执行的程序以及程序的参数。查看. _exec


   String[] command = new String[2];
   command[0] = "c:\\bin\\someProgram.exe";
   command[1] = "c:\\data\\arguments.txt";
   Runtime.getRuntime().exec(command);

如果 C 程序的数据已经存储在文件中,您应该直接将文件作为参数传递(当然,这取决于程序的确切性质和所需的任何预处理 - 您需要给我们详细信息以获得更好的答案)。

于 2013-05-08T11:27:47.047 回答