永发信息网

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

答案:5  悬赏:80  手机版
解决时间 2021-03-20 12:06
  • 提问者网友:活着好累
  • 2021-03-20 07:51
#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)
最佳答案
  • 五星知识达人网友:轮獄道
  • 2021-03-20 08:21
可以使用两种方法很方便的读取科学计数法文本并转化为浮点数,分别是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);
}
全部回答
  • 1楼网友:山君与见山
  • 2021-03-20 11:49
#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); }
  • 2楼网友:老鼠爱大米
  • 2021-03-20 11:00
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; }
  • 3楼网友:野味小生
  • 2021-03-20 09:56
首先,i的初始值要赋值成0,i++的位置不对,会影响到后面的printf语句,然后请记住ccs的printf遇到\n才能完成输出,while循环修改一下: i=0; while ( !feof(fp) ) { fscanf(fp, "%lf", &keys[i]); printf("%lf\n",keys[i]); i++; }
  • 4楼网友:山君与见山
  • 2021-03-20 08:50
#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; }
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯