2014-03-05 38 views
1

我想從一個文件(.txt)的C.閱讀兩列下面是代碼:當我從C文件中讀取數字時,爲什麼會忽略忽略'fscanf'返回值的警告?

#include<stdio.h> 

int main(int argc, char *argv[]){ 

FILE *f; 
int t[160], i, k=0; 
double omega[160]; 

f = fopen("data.txt", "r"); 

while(!feof(f)){ 
       fscanf(f, "%d %lf", t, omega); 
       k++; 
       } 

for (i = 0; i < k; i++) printf("%d %lf\n", t[i], omega[i]); 

return 0; 
} 

當我編譯程序,我得到了以下錯誤消息:

average.c: In function ‘main’: 
average.c:14:10: warning: ignoring return value of ‘fscanf’, declared with attribute warn_unused_result [-Wunused-result] 
    fscanf(f, "%d %lf", t, omega); 
     ^

我該如何處理這個問題?任何幫助,將不勝感激 ! 謝謝!

a

回答

6

那麼,通過不忽略返回值,我猜。

請注意,fscanf()(如scanf()sscanf())會返回它所做的成功轉換次數。這非常有用,所以你可以知道你的變量真的包含了讀入數據。

如果你真的忽略的價值,鑄就調用(void)

(void) fscanf(f, "%d%lf", t, omega); 

然而你的代碼是奇怪的組織;內部fscanf()調用不需要,應該刪除,第一個有錯誤的參數。

循環應該是:

while(fscanf(f, "%d %lf", t + k, omega + k) == 2) 
{ 
    k++; 
} 

這裏我用t + k作爲寫作&t[k]短的方式(與omega相同)。

你應該不是使用feof()就像你在你編輯的問題:這是錯的。 feof()的使用是之後一個讀取失敗,找出它是否可能因爲輸入文件結束而失敗。沒有必要像你一樣使用它,fscanf()將會失敗,並因此在文件結束時返回其他內容而不是2

+0

我認爲OP想要做'while(fscanf(f,「%d%lf」,t,&omega [k])== 2)' –

+0

謝謝你放鬆你的答案。從C中的文件中讀取最好的方式是什麼?我沒有其他方法!你能告訴我嗎?謝謝! –

+0

展開@GrijeshChauhan我用feof編輯過程序,但總是得到相同的結果。而且,當我在文件讀取循環中將k添加到t和omega時,什麼都不會改變!請幫忙嗎?謝謝! –