我想从文件(.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);
^
我该如何处理这个问题?任何帮助,将不胜感激 ! 谢谢!
一
答案 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
之外的其他内容。