将多个数据加载到命令行c

时间:2013-02-07 21:41:43

标签: c command-line

您好我有一个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文件中并将其加载到命令行中,以便我的程序返回所有分数一个人去。

5 个答案:

答案 0 :(得分:4)

我建议使用fopen()打开文件,使用fgets()读取每一行,然后使用sscanf()解析数字。

答案 1 :(得分:2)

让你的程序使用stdinfgets读取整行,比如说在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)

我建议您编写简单的shell脚本来读取文件并在while循环中将参数传递给您的程序。例如Here描述了如何在bash中读取csv文件。同时检查this

答案 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
-

最后的-标志着输入结束。

编程的理念是尽可能保持简单和准确。