0

こんにちは、14 の異なるパラメーターに基づいて (1 人あたりの) スコアを計算する ac プログラムがあります。

$ ./ScorecommandLine 30 0 0 0 0 0 35 1 1 1 130 1 1 1
0.057748

ただし、現時点では一度に 1 つのスコアしか計算できません。私がやりたいことは、多くの異なる人々のためにパラメータを複数回ロードすることです。

$ ./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 ファイルに保存し、それをコマンド ラインにロードして、プログラムがすべてのスコアを一度に返すようにします。

4

5 に答える 5

4

でファイルを開き、 で各行をfopen()読み取りfgets()、 で数値を解析することをお勧めしますsscanf()

于 2013-02-07T21:45:45.043 に答える
2

あなたはすでに正しい考えを持っています!あなたのプログラムは完璧です。ジョブを完了するのに N 回呼び出すだけで済みます。.csv ファイルで言うように、それはすべて定義できます。

必要なのは、.csv ファイルを読み取り、プログラムを N 回呼び出してジョブを完了するプログラムだけです。これを行う良い方法は、別の c プログラムを使用して、元のプログラムを を使用して呼び出すことpopenです。小さな仕事なので、これを行うためのシェル スクリプトを作成するとさらに便利です。

次のようなものを使用するのpopenは非常に簡単で、刺激的でもあります。The Art of Linux Programmingを試して、開始方法を理解してください。

学習する時間がない場合はpopen、元のプログラムをいつでも編集できます。たとえば、最初のパラメーターが「-csv」であるかどうかを確認し、そうであれば、csv ファイルをロードする別の関数を呼び出し、必要に応じて while ループに入ります。

于 2013-02-07T21:52:08.310 に答える
2

while ループ内などで、プログラムにstdinusingから行全体を読み取らせます。fgets次にsscanf、コードで必要な変数に行全体を解析するために使用します。while ループ内で、スコアを生成するビットを実行します。

プログラムをコンパイルしたら、myprog のふりをします。

myprog < myfile.csv
于 2013-02-07T21:49:01.377 に答える
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 を使っているので、シェルを利用してください:

ターミナルで次のコマンドを発行します。

$ 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
-

末尾の-は、入力の終わりを示します。

プログラミングの哲学は、可能な限り単純かつ正確に保つことです。

于 2013-02-07T21:57:36.520 に答える
1

ファイルを読み取り、while ループでプログラムにパラメーターを渡す単純なシェル スクリプトを作成することをお勧めします。ここでは、例として csv ファイルを bash で読み取る方法について説明します。これもチェック。

于 2013-02-07T21:46:26.557 に答える