#include <math.h>
#include <string.h>
#define MAXLEN 20
int main () {
FILE *fp
int ch,i = 0,n = 0
char str[MAXLEN],filename[] = "indata.txt"
if((fp = fopen(filename,"rt")) == NULL) {
printf("不能打开文件:%s\n",filename)
return 1
}
while((ch = fgetc(fp)) != EOF) {
if(ch == '\t' || ch == '\n') {
if(i > 0) {
str[i++] = '\0'
printf("%g\n",atof(str))
i = 0
++n
}
}
else str[i++] = ch
}
printf("有效数据个数:%d\n",n)
fclose(fp)
return 0
}
问题很简单,只要将:fscanf(fp,"%.8f%.8f\n",&a[2*i],&a[2*i+1])
改为:fscanf(fp,"%lf%lf",&a[2*i],&a[2*i+1])
注意:double双精度型数值的输入必须用%lf,而它的输出则和float单精度型数值一样用%f,%e均可。同时注意fscanf()和scanf()类似在输入数据的时候不能指定数据的精度。fscanf()可以自动判断回车,所以%.8f最后的'\n'也是多余的。而且对本题,"%lf%lf"之间加不加空格都是一样的,fscanf()遇到空格会自动判断第一个数据读入完成,接下来的就是第二个数据。当然如果是数值加字符,那么空格就必不可少要和文件中严格对应了。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)