#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)
C语言读取文本文件中的科学数据
答案:5 悬赏:80 手机版
解决时间 2021-03-20 12:06
- 提问者网友:活着好累
- 2021-03-20 07:51
最佳答案
- 五星知识达人网友:轮獄道
- 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);
}
参考代码是用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;
}
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯