当我从C中的文件中读取数字时,为什么会收到忽略'fscanf'返回值的警告?

时间:2014-03-05 14:59:58

标签: c file

我想从文件(.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);
          ^

我该如何处理这个问题?任何帮助,将不胜感激 ! 谢谢!

1 个答案:

答案 0 :(得分: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之外的其他内容。