2017-10-19 45 views
0

我有一個包含字符串,int和double的文本文件。像這樣:如何從文件中讀取不同類型的數據

灰粉10 14.5

朱14 15.5

我需要該數據讀至3個獨立的陣列。 C沒有字符串數組,所以我需要char數組,int數組和double數組。我的代碼:

const int num = 18; //number of data.txt lines 
char col_one[15]; 
int col_two; 
double col_three; 
int c; 
int numberArray[num]; 
char *nameArray[num]; 
double doubleArray[num]; 
int size = 0; 
FILE *file; 
file = fopen("data.txt", "r"); 
if (file) { 
    while ((c = getc(file)) != EOF) 
    { 
     fscanf(file, "%s %d %lf", &col_one, &col_two, &col_three); 
     nameArray[size] = col_one; 
     numberArray[size] = col_two; 
     doubleArray[size] = col_three; 
     size++; 
    } 
    fclose(file); 
} 


for (int i = 0; i < num; i++) 
{ 
    printf("%s \n" ,nameArray[i]); 
} 

但我的代碼只讀取第一個單詞並打印它18次。我怎樣才能讀取字符串變量並將其放入char數組?

+0

嘗試檢查返回值'fscanf' – izlin

+0

'而((C = GETC(文件))!= EOF) { 的fscanf(文件 「%s%d%LF」,與col_one,與col_two,與col_three ); nameArray [size] = col_one;' - >'while(fscanf(file,「%14s%d%lf」,col_one,&col_two,&col_three)== 3 && size BLUEPIXY

+0

和'我< num;' -->'我 BLUEPIXY

回答

2

隨着

nameArray[size] = col_one; 

你讓nameArray點到同樣的位置所有元素。這意味着它看起來似乎是所有字符串都是相同的(並且等於您讀取的最後一個字符串)。

對此有幾種不同的解決方案,但我建議使用結構作爲數據,然後使用該結構的單個數組。然後直接讀入結構本身,而不使用臨時變量或指針數組。

也許是這樣的:

struct data 
{ 
    char name[15]; 
    int int_value; 
    double float_value; 
}; 

struct data data_array[num]; 

... 

while (fscanf(file, "%14s, %d %lf", data_array[size].name, 
            &data_array[size].int_value, 
            &data_array[size].float_value) == 3) 
{ 
    ++size; 
} 

與上面的代碼,你也解決了另一個問題,那你閱讀和丟棄的文件的第一個字符。

相關問題