2014-03-05 37 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时,什么都不会改变!请帮忙吗?谢谢! –