2013-05-08 99 views
1

如何传递参数给一个C程序,它需要从一个文本文件中的一些inputstreams (如scanf()的),这是已经保存,我运行的输入。使用Runtime.getRuntime().exe() in java。传递参数给AC代码与Java

+1

创建一个文本文件并传递数据不是很简单吗?这是一个奇怪的问题... – Fabiotocchi 2013-05-08 11:28:17

+1

@Fabiotocchi可能是功课。 – millimoose 2013-05-08 11:29:05

+1

你的问题不清楚。 C程序是从它自己打开的文本文件中读取输入,还是从'stdin'读取输入,并且希望Java程序将文本文件的内容传递给它?如果前者是在C文件中硬编码的文本文件的名称,还是它期望它作为参数? – millimoose 2013-05-08 11:31:22

回答

1

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程序中的数据已经被存储在一个文件中,应该将文件直接传递作为参数(这取决于,当然,在该方案的确切性质和所需要的任何前处理 - 你需要给我们一个更好的答案的细节)。

+0

这个答案对实质...有点轻...另外,它似乎OP已经尽可能地运行程序。 – millimoose 2013-05-08 11:30:00

+0

这种问题并不多,但我想OP可能会对如何传递参数感到困惑 - exec的文档并不十分清楚。 – 2013-05-08 11:32:32

+0

的确如此,但在这种情况下,我倾向于要求澄清并掩盖这个问题,如果没有人愿意将代码片段扔到墙上来查看哪一个会粘住。 – millimoose 2013-05-08 11:36:46

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.text并将3 4作为其内容。现在运行这个程序./a.out < input.txt,如果你改变文件中的数字并再次运行程序,这将再次打印7,你会得到相应的结果。

所以你试图做的事情与Java或C或者scanf或者其他输入方式无关。作为一个附注,而不是使用Runtime,你应该考虑使用commons exec。 为了更好地理解重定向,请阅读thisthis

注意:既然你提到你想运行exe文件,我假设你运行的是windows。您可能需要将a.out更改为a.exe或您的ide编译成的任何名称。如果我没有清楚地解释某件事情,希望它能帮助我随时告诉我。

+0

感谢nikhil的答案,但这并不完全是我想 仍然我得到了答案使用输入/输出重定向 谢谢你,以及 – 2013-05-09 05:16:25