永发信息网

C语言读取文本文件中的科学数据

答案:5  悬赏:80  手机版
解决时间 2021-03-20 12:06
#include <stdio.h>
# include <math.h>
void main()
{
int i;
double keys[5];
{
FILE *fp;
fp = fopen("e:\\datainput.txt", "rt");
if (!fp){
printf("Can not open input file.\n");
exit(-1);
}
while ( !feof(fp) )
{
fscanf(fp, "%lf ", &keys[i++]);
printf("%lf",keys[i]);
}
close(fp);
}
我文本文档datainput.txt中的数据是这样的:n行*1列科学数据,
0.0000000e+00
9.9998333e-03
1.9998667e-02
2.9995500e-02
3.9989334e-02
可是总是输出不了任何东西。我是用CCs3.3编译的,但是都是C语言应该没有问题。是我的科学数据不应当以double形式输出吗?求大神!我试过用整数形式的数据,是可以输出结果的(把形式都改成int和%d)
最佳答案
可以使用两种方法很方便的读取科学计数法文本并转化为浮点数,分别是sscanf和atof。
  参考代码是用VC2008实现的,因此分别变形为它们各自的宽字符版本:swscanf和_wtof。  
  必须要注意的是,使用sscanf读取科学计数法时,必须使用%lf,而不是%f。
CString str = _T("1.9626E+004 2.6789E+004");

{
double f1, f2;
swscanf(str, _T("%lf %lf"), &f1, &f2);
TRACE(_T("%f %f\r\n"), f1, f2);
}

{
TCHAR str1[1024], str2[1024];
swscanf(str, _T("%s %s"), str1, str2);

double f1 = _wtof(str1);
double f2 = _wtof(str2);
TRACE(_T("%f %f\r\n"), f1, f2);
}
全部回答
#include <stdio.h> # include <math.h> void main() { int i=0; double keys[5]; FILE *fp; fp = fopen("e:\\datainput.txt", "rt"); if (!fp){     printf("Can not open input file.\n");     return ; } while ( !feof(fp) ) {      fscanf(fp, "%lf  ", &keys[i]); printf("%e\n",keys[i]); // i++; } fclose(fp); }
1、c语言标准库提供了一系列文件操作函数。文件操作函数一般以f+单词的形式来命名(f是file的简写),其声明位于stdio.h头文件当中。例如:fopen、fclose函数用于文件打开与关闭;fscanf、fgets函数用于文件读取;fprintf、fputs函数用于文件写入;ftell、fseek函数用于文件操作位置的获取与设置。 2、例程: #include int a; char b,c[100]; int main(){     file * fp1 = fopen("input.txt", "r");//打开输入文件     file * fp2 = fopen("output.txt", "w");//打开输出文件     if (fp1==null || fp2==null) {//若打开文件失败则退出         puts("不能打开文件!");         rturn 0;     }     fscanf(fp1,"%d",&a);//从输入文件读取一个整数     b=fgetc(fp1);//从输入文件读取一个字符     fgets(c,100,fp1);//从输入文件读取一行字符串     printf("%ld",ftell(fp1));//输出fp1指针当前位置相对于文件首的偏移字节数     fputs(c,fp2);//向输出文件写入一行字符串     fputc(b,fp2);//向输出文件写入一个字符     fprintf(fp2,"%d",a);//向输出文件写入一个整数     fclose(fp1);//关闭输入文件     fclose(fp2);//关闭输出文件,相当于保存     return 0; }
首先,i的初始值要赋值成0,i++的位置不对,会影响到后面的printf语句,然后请记住ccs的printf遇到\n才能完成输出,while循环修改一下: i=0; while ( !feof(fp) ) { fscanf(fp, "%lf", &keys[i]); printf("%lf\n",keys[i]); i++; }
#include <stdio.h> #include <stdlib.h> int main() { int i; double keys[5]; FILE *fp; fp = fopen("e:\\datainput.txt", "rt"); if (!fp){ printf("Can not open input file.\n"); exit(-1); } while ( !feof(fp) ) { fscanf(fp,"%lf",&keys[i]);//先读数据 fscanf(fp," ");//再读数据后的空格 printf("%e\n",keys[i]);//显示科学基数用%e,双精度浮点小数改为%lf就可以了 i++; } close(fp); system("pause"); return 0; }
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
清真兰州牛肉拉面地址有知道的么?有点事想过
找一首很燃的英文歌,男的唱的,高潮部分好像
昆明到丽江大概要多少钱?怎么去最好?
《无限恐怖》中正体楚轩厉害还是复制体楚轩厉
周公解梦大全查询淘米
在oracle11数据库中登陆数据库时一直报监听程
三国演义是历史吗 诸葛亮真有其人吗?
我读书不是很好,就中专学历,现在出来工作了
龟蛇粉多吃会有负作用吗?
叶家澥怎么去啊,有知道地址的么
行空在天外是什么意思
捂黄豆面粉是豆子热的时候撒还是放凉了撒
平均每斤多少钱
择业期外应聘高校教师
知道老公有两个微信号不知道密码怎么能查到密
推荐资讯
对话伙伴国是什么意思?
平安保险的佣金分别是多少?
竖式计算567除以21等拿多少
电脑网络连接有个感叹号又能上网
诸暨方言 否歇个 是什么意思
企业仓储是什么意思
什么是euroclear interbank blue screen
淘宝垃圾2016很垃圾吗,开店经常要求复核,特
WPS 卸载后,像word,excel,无法正常显示,怎
持澳门身份证能去香港吗
什么什么问题填空
青岛飞西班牙多长时间
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?