2011-02-14 80 views
0

我需要從文件中讀取三個變量的值,然後用它們來執行計算。 這些值以特定格式列出。例如,這些是一個這樣的文件中的內容:從文件中讀取值 - 有些是正確的,有些是不正確的

2 //number of items per variable 
0 0 0 //values for center locations (stored as struct) 
0 0 .5 
10 //values for some variable v1 (type double) 
5 
-10 //values for some variable v2 (type double) 
10 

這是我的代碼對這些數值閱讀:

... 
fscanf(file, "%d\n", &nItems); 
for (unsigned int i = 0; i < nItems; i++) 
{ 
    float cx, cy, cz; 
    fscanf(file, "%f %f %f\n", &cx, &cy, &cz); 

    center[i].cx = cx; 
    center[i].cy = cy; 
    center[i].cz = cz; 
} 
for (unsigned int i = 0; i < nItems; i++) 
{  
    fscanf(file, "%f\n", &v1[i]); 
} 
for (unsigned int i = 0; i < nItems; i++) 
{ 
    fscanf(file, "%f\n", &v2[i]); 
} 

我現在面臨的問題是,當我在讀這種方式輸出它們的值,nItems的值和中心位置是正確的,但其餘的都是不正確的。但是,這些值的符號和相對大小是正確的。例如,上面顯示的值列表,這些都是輸出值:

Correct    Outputted values 
2     2 
0 0 0    0.000000 0.000000 0.000000 
0 0 .5    0.000000 0.000000 0.500000 
10     524288.000000 
5     2048.000000 
-10     -524288.000000 
10     524288.000000 

我不知道爲什麼在錯誤被讀取的最後兩個變量的值。我會很感激你的建議。

謝謝。

+1

v1和v2的聲明是什麼?它們是%f的正確類型嗎? – 2011-02-14 04:12:18

回答

0

我不確定這是否是這樣,但從您的示例文件看起來像第二組數據是整數而不是浮點值。在你的代碼,但是,你正在寫

for (unsigned int i = 0; i < nItems; i++) 
{  
    fscanf(file, "%f\n", &v1[i]); 
} 

也就是說,您使用的%f符,這是浮動閱讀。如果v1v2陣列是int的陣列,則這將無法正常工作;它會覆蓋整個與位模式,這意味着被解釋爲浮動。

要解決這個問題,而不是嘗試寫這個:

for (unsigned int i = 0; i < nItems; i++) 
{  
    fscanf(file, "%d\n", &v1[i]); 
} 

也就是說,使用%d符。

同樣,這可能是完全關閉的,因爲我看不到更多的代碼,但如果我不得不猜測這是我把錢放在哪裏。讓我知道如果這是不正確的,我可以刪除這篇文章。

+0

v1和v2是double類型的。但是,在這個示例文件中,這些變量的值恰好是整數。我很抱歉沒有在開始時說明。 – dpryor 2011-02-14 04:11:37