簡體   English   中英

當我從C語言的文件中讀取數字時,為什么會收到忽略“ fscanf”返回值的警告?

[英]Why do I get a warning of ignoring return value of ‘fscanf’ when I read numbers from a file in C?

我想從文件(.txt)中讀取C中的兩列。以下是代碼:

#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);
          ^

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

一種

好吧,我猜想通過不忽略返回值。

請注意, 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以外的值。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM