[英]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.