传递参数给AC代码与Java
如何传递参数给一个C程序,它需要从一个文本文件中的一些inputstreams (如scanf()的),这是已经保存,我运行的输入。使用Runtime.getRuntime().exe() in java。传递参数给AC代码与Java
Runtime.exe
允许您指定要执行的程序以及程序的参数。看看Java API documentation for exec
。
String[] command = new String[2];
command[0] = "c:\\bin\\someProgram.exe";
command[1] = "c:\\data\\arguments.txt";
Runtime.getRuntime().exec(command);
如果C程序中的数据已经被存储在一个文件中,应该将文件直接传递作为参数(这取决于,当然,在该方案的确切性质和所需要的任何前处理 - 你需要给我们一个更好的答案的细节)。
这个答案对实质...有点轻...另外,它似乎OP已经尽可能地运行程序。 – millimoose 2013-05-08 11:30:00
这种问题并不多,但我想OP可能会对如何传递参数感到困惑 - exec的文档并不十分清楚。 – 2013-05-08 11:32:32
的确如此,但在这种情况下,我倾向于要求澄清并掩盖这个问题,如果没有人愿意将代码片段扔到墙上来查看哪一个会粘住。 – millimoose 2013-05-08 11:36:46
它看起来像你想从文件传递数据到你的程序,而不是交互式地进行。您可以为此使用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编译成的任何名称。如果我没有清楚地解释某件事情,希望它能帮助我随时告诉我。
感谢nikhil的答案,但这并不完全是我想 仍然我得到了答案使用输入/输出重定向 谢谢你,以及 – 2013-05-09 05:16:25
创建一个文本文件并传递数据不是很简单吗?这是一个奇怪的问题... – Fabiotocchi 2013-05-08 11:28:17
@Fabiotocchi可能是功课。 – millimoose 2013-05-08 11:29:05
你的问题不清楚。 C程序是从它自己打开的文本文件中读取输入,还是从'stdin'读取输入,并且希望Java程序将文本文件的内容传递给它?如果前者是在C文件中硬编码的文本文件的名称,还是它期望它作为参数? – millimoose 2013-05-08 11:31:22