如何将参数传递给C程序,该程序从某些输入流获取输入 (如 scanf())来自已保存的文本文件,我在 java中使用 Runtime.getRuntime()。exec()运行.exe
答案 0 :(得分: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程序的数据已经存储在一个文件中,你应该直接传递文件作为参数(当然,这取决于程序的确切性质和所需的任何预处理 - 你'我需要向我们提供更好答案的详细信息。)
答案 1 :(得分: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
。
为了更好地理解重定向,请阅读this和this。
注意:由于您提到要运行exe
个文件,我假设您运行的是Windows。您可能需要将a.out
更改为a.exe
或您的ide将其编入的名称。希望如果我没有清楚地解释清楚,请随时告诉我。