2017-09-23 54 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編譯器,
  • 較新的Windows筆記本電腦
+3

您的文件中有可忽略的錯誤。您的程序中沒有任何內容可以解決它你不能假裝他們不在那裏。 –

+1

'n ++' - 嗯。在循環之前輸入了什麼?如果你的答案是「我不知道」,你就與你的計劃保持一致,因爲它也不知道。你從來沒有設置它的初始值。你的程序調用*未定義的行爲*。 – WhozCraig

回答

1

當你從文件中讀取,你沒有跳過逗號在文件中。

fscanf的第一個呼叫通過%f格式說明符讀取float。在隨後的讀取中,文件指針位於第一個逗號處,並且不會越過這個位置,因爲您仍然在嘗試讀取浮點數。

你需要一個單獨的調用添加到fscanf在循環中消耗逗號:

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

而且,你不初始化n

int n,i = 0; 

當您然後嘗試增加它,從而讀取未初始化的值,您調用undefined behavior。像這樣初始化它:

int n = 0, i = 0;