您好我有一个c程序,根据14个不同的参数计算得分(每人):
$ ./ScorecommandLine 30 0 0 0 0 0 35 1 1 1 130 1 1 1
0.057748
但是目前我只能一次计算一个分数。我想做的是为很多不同的人多次加载参数,而不是:
$ ./ScorecommandLine 150 0 0 0 0 0 35 1 1 1 130 1 1 1
0.0577487
$ ./ScorecommandLine 30 1 0 10 4 0 31 1 15 1 90 1 4 1
0.0897333
$ ./ScorecommandLine 50 0 0 9 0 0 25 1 3 1 123 1 0 0
0.4567748
$ ./ScorecommandLine 30 0 1 0 0 8 35 1 1 1 130 1 1 1
0.0838395
$ ./ScorecommandLine 30 1 1 0 1 0 65 4 4 1 32 1 3 1
0.0495855
我必须运行命令5次并且必须每次为每个人键入新数据,我宁愿将数据放在csv文件中并将其加载到命令行中,以便我的程序返回所有分数一个人去。
答案 0 :(得分:4)
我建议使用fopen()
打开文件,使用fgets()
读取每一行,然后使用sscanf()
解析数字。
答案 1 :(得分:2)
让你的程序使用stdin
从fgets
读取整行,比如说在while循环中。然后使用sscanf
将整行解析为代码所需的变量。仍然在while循环中,运行生成分数的位。
编译程序后 - 假装它是myprog:
myprog < myfile.csv
答案 2 :(得分:2)
你已经有了正确的想法!你的程序是完美的,它只需要被调用N次就可以完成一项工作,并且可以像在.csv文件中那样对它们进行定义。
现在您只需要一个程序来读取.csv文件并调用您的程序N次以完成作业。一个很好的方法是使用单独的c程序并使用popen
调用原始程序。更好的是,因为这是一个小工作,就是编写一个shell脚本来为你做这个。
使用类似popen
的内容非常简单,也很令人兴奋;尝试The Art of Linux Programming了解如何开始。
如果您没有时间学习popen
,那么您可以随时编辑原始程序。例如,检查第一个参数是否为“-csv”,如果是,则调用加载csv文件的单独函数,并根据需要进入while循环。
答案 3 :(得分:1)
答案 4 :(得分:1)
更简单的方法是做这样的事情:
#include <stdio.h>
void doYourCalculation(int *iArray) {
/*do whatever you do*/
}
int main(int argc, char *argv[])
{
int iArray[14];
int i = 0;
while(1){
if(scanf("%d",&iArray[i]) != 1){
break;
}
i++;
if(i == 14) {
i = 0;
doYourCalculation(iArray);
}
}
return 0;
}
由于您使用的是unix / linux,请充分利用shell:
在终端发出此命令:
$ cat your_data_file.dat | ScorecommandLine
your_data_file.dat的位置如下:
150 0 0 0 0 0 35 1 1 1 130 1 1 1
130 0 0 0 0 0 25 1 1 1 150 2 4 3
50 0 0 9 0 0 25 1 3 1 123 1 0 0
-
最后的-
标志着输入结束。
编程的理念是尽可能保持简单和准确。