2011-11-05 51 views
2

下面的代碼的目的是從文件中讀取雙精度數據並將它們放入數組中。非常簡單。fscanf讀入雙數組奇怪值

double arr[100]; 
int i = 0; 

while(fscanf(fin, "%lf", &arr[i]) != EOF) 
    i++; 

但是,當我打印數組我得到奇怪的值。如果我用常規雙變量替換數組變量,並在前面提到的while循環內打印此變量的值,它會正確打印。上述代碼有什麼問題?我試着預先初始化數組中的所有值,但當然,這也沒有幫助。

+0

所有你需要添加一個條件首先所以'i'沒有得到高,外覆蓋內存的陣列。其次,你是否在循環內打印了'i'和'arr [i]'? –

+0

你發佈的內容應該可以工作。我認爲你沒有向我們展示真正的代碼,而是一個「簡化」版本。 – cnicutar

+0

他發佈的內容不應該有效;如果文件中有非雙值,則將是無限循環 – user411313

回答

1

您可能想圍繞數組進行括號。例如,在代碼中,您有「& arr [i]」。這與(& arr)[i]相同,意思是獲得數組指針的地址(指向指針的指針),偏移量爲i。這可以抵消幾個比特的寫作,這使得輸出看起來很時髦。

添加括號,使這樣的:「&(ARR [1])」

double arr[100]; 
int i = 0; 

while(fscanf(fin, "%lf", &(arr[i])) != EOF) 
    i++; 
+0

這是不正確的,數組下標具有比address-of更高的優先級。 –