如何将参数传递给 C 程序,该程序从已保存的文本文件中的某些输入流(如 scanf() )获取输入,并且 我正在使用Java中的Runtime.getRuntime().exec()运行 .exe。
2 回答
在我看来,您想将数据从文件传递到您的程序,而不是以交互方式进行。您可以为此使用 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.text
,3 4
并将其作为其内容。现在运行这个程序,如果您更改文件中的数字并再次运行程序,./a.out < input.txt
这将再次打印7
,您将获得适当的结果。
因此,您尝试做的事情与 Java 或 C 或 scanf 或其他获取输入的方式无关。作为旁注而不是使用Runtime
,您应该考虑使用commons exec
. 为了更好地理解重定向,请阅读this和this。
注意:既然您提到要运行exe
文件,我假设您运行 Windows。您可能需要更改a.out
为a.exe
或您的 ide 将其编译成的任何名称。希望如果我没有清楚地解释某些事情,请随时让我知道。
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 程序的数据已经存储在文件中,您应该直接将文件作为参数传递(当然,这取决于程序的确切性质和所需的任何预处理 - 您需要给我们详细信息以获得更好的答案)。