2017-09-23 3 views
-1

私はこのようにフォーマット.csvファイルがあります:CSVファイルからフロート配列に値を移動する方法は?

24.74,2.1944,26.025,7.534,9.317,0.55169 [etc] 

を私は浮動小数点数の配列に浮動小数点値を移動したいです。

配列は次のようになります。

fValues[0] = 24.74 
fValues[1] = 2.1944 
fValues[2] = 26.025 
fValues[3] = 7.534 
fValues[4] = 9.317 
[etc] 

私が処理するために、1000個の数字を持っています。

このタスクを達成するためのコードは何ですか?

これは私が私のコードを得ている最も近いです。また

int main() 
{ 
    FILE *myFile; 

    float fValues[10000]; 
    int n,i = 0; 

    myFile = fopen("es2.csv", "r"); 
    if (myFile == NULL) { 
    printf("failed to open file\n"); 
    return 1; 
    } 

    while (fscanf(myFile, "%f", &fValues[n++]) != EOF); 

    printf("fValues[%d]=%f\n", i, fValues[5]); //index 5 to test a number is there. 

    fclose(myFile); 
    return 0; 
} 

、私はこのコードを実行すると、私は終了コード3221224725を受けます。

メモリアクセス関連の問題/スタックオーバーフローですか?

私の環境:

  • 崇高なテキスト3、
  • GCCコンパイラ、
  • 新しい窓のラップトップ
+3

あなたのファイルには昏睡状態があります。あなたのプログラムの誰もそれを説明していません。彼らはそこにいないふりをすることはできません。 –

+1

'n ++' - うーん。ループが始まる前に何があったのですか?あなたの答えが「私は知っていません」なら、あなたはあなたのプログラムに同意しています。あなたは初期値を設定しません。あなたのプログラムは*未定義の動作*を呼び出します。 – WhozCraig

答えて

1

ファイルから読み込むには、カンマを飛ばしていませんファイル内にあります。

fscanfの最初の呼び出しでは、フォーマット指定子を使用してfloatが読み込まれます。その後の読み込みでは、ファイルポインタは最初のカンマにあり、まだ浮動小数点数を読み込もうとしているので、それを過ぎません。あなたはコンマを消費するループ内fscanfに別々の呼び出しを追加する必要があります

while (fscanf(myFile, "%f", &fValues[n++]) == 1) { 
    fscanf(myFile, ","); 
} 

また、あなたはnを初期化していない:

int n,i = 0; 

あなたがインクリメントしようとすると初期化されていない値を読み取ると、undefined behaviorが呼び出されます。

int n = 0, i = 0; 
関連する問題