标题:C程序读取文件中带e指数的数据
只看楼主
zzmx
Rank: 1
等 级:新手上路
帖 子:48
专家分:0
注 册:2020-2-4
结帖率:75%
已结贴  问题点数:16 回复次数:9 
C程序读取文件中带e指数的数据
我的数据是这样的,两列,第一列是e指数很小,我想把第一列数写进一个数组里。但是我写的程序无法识别e指数,调试过程中发现碰见e这个字后面的数据就全变成0了。
请教大神指点!
-6.880903e-006 0.00325521
-6.876903e-006 0
-6.872903e-006 0.00325521
-6.868903e-006 -0.00325521
-6.864903e-006 0
-6.860903e-006 0
-6.856903e-006 0

#include <iostream>
#include<fstream>
#include<sstream>
int main(int argc, char** argv)
{
FILE *fp=fopen("G:\\uz\\uz\\C3energy00001.txt","r");   
FILE *fpp=fopen("G:\\CCC\\z.txt","w+");
double a[3000],b[3000];
int i,flag,line=3000;
char ch;
if(fp==NULL)
printf("error\n");
for(i=1,line=1;;i++)
{
    ch=fgetc(fp);
    if(ch=='\n')
    line+=1;
    if(ch==EOF)
    break;
}
printf("%d\n",line);

fseek(fp,0L,0);
while(fscanf(fp,"%lf%*c&lf",&a[i],&b[i])!=EOF)
{
   
a[i]=a[i]*1000000;
i++;
}
for(i=0;i<line;i++)
{
    printf("%lf   %lf\n",a[i],b[i]);
}
for(i=0;i<line;i++)
{
    fprintf(fpp,"%lf \n",a[i],b[i]);
}
fclose(fp);
fclose(fpp);
    return 0;
}
输出结果
搜索更多相关主题的帖子: include i++ 指数 line 数据 
2020-02-07 17:32
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:507
帖 子:8890
专家分:53117
注 册:2011-1-18
得分:8 
C程序读取文件中带e指数的数据
明明是C++;还有,你的很多错误,编译器已经给出警告了。

程序代码:
#include <iostream>
#include <fstream>
using namespace std;

int main( void )
{
    ifstream fin( "D:\\mingw_projects\\c\\c\\a.txt" );
    if( !fin )
    {
        cerr << "error\n";
        return 1;
    }

    ofstream fout( "D:\\mingw_projects\\c\\c\\b.txt" );
    if( !fout )
    {
        cerr << "error\n";
        return 2;
    }

    for( double a,b; fin>>a>>b; )
    {
        a *= 1000000;
        cout << a << ' ' << b << '\n';
        fout << a << ' ' << b << '\n';
    }
}



2020-02-07 20:10
zzmx
Rank: 1
等 级:新手上路
帖 子:48
专家分:0
注 册:2020-2-4
得分:0 
回复 2楼 rjsp
谢谢你的回复。额。。。但是我不明白你是怎么读取e指数的,还有我的程序还没有写完,不知道里面有什么错误啊?
2020-02-07 22:55
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:432
帖 子:10064
专家分:41463
注 册:2014-5-20
得分:8 

#include<stdio.h>
int main()
{
    FILE *fp=fopen("test.txt","r");
    double a,b;
    while (fscanf(fp,"%lf%lf",&a,&b)==2)
    {
        printf("%e %.8lf\n",a,b);
    }
    fclose(fp);
}

/* test.txt
-6.880903e-006 0.00325521
-6.876903e-006 0
-6.872903e-006 0.00325521
-6.868903e-006 -0.00325521
-6.864903e-006 0
-6.860903e-006 0
-6.856903e-006 0
*/
2020-02-08 11:00
zzmx
Rank: 1
等 级:新手上路
帖 子:48
专家分:0
注 册:2020-2-4
得分:0 
回复 4楼 吹水佬
谢谢!但是你可以说一下为什么程序要这么写吗?比如1)为什么while的判断条件是==2;2)输出的时候为什么是“%e %.8lf”;3)还有,这组数据之后要乘以100000,但是我加上试了一下,是这个样子
。谢谢指正!万分感激!
2020-02-08 13:06
zzmx
Rank: 1
等 级:新手上路
帖 子:48
专家分:0
注 册:2020-2-4
得分:0 
回复 4楼 吹水佬
谢谢!但是你可以说一下为什么程序要这么写吗?比如1)为什么while的判断条件是==2;2)输出的时候为什么是“%e %.8lf”;3)还有,这组数据之后要乘以100000,但是我加上试了一下,是这个样子
。谢谢指正!万分感激!
2020-02-08 13:06
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:432
帖 子:10064
专家分:41463
注 册:2014-5-20
得分:0 
回复 5楼 zzmx
不清楚你是怎么算的
是不是这意思:
#include<stdio.h>
int main()
{
    FILE *fp=fopen("test.txt","r");
    double a,b;
    while (fscanf(fp,"%lf%lf",&a,&b)==2)
    {
        printf("%e %.8lf\n",a*100000,b);
    }
    fclose(fp);
}
2020-02-08 17:05
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:432
帖 子:10064
专家分:41463
注 册:2014-5-20
得分:0 
以下是引用zzmx在2020-2-8 13:06:29的发言:

谢谢!但是你可以说一下为什么程序要这么写吗?比如1)为什么while的判断条件是==2;2)输出的时候为什么是“%e %.8lf”;

1)可以查一下scanf()的返回值说明
2)可以查一下printf()的%e格式说明
2020-02-08 17:08
zzmx
Rank: 1
等 级:新手上路
帖 子:48
专家分:0
注 册:2020-2-4
得分:0 
回复 8楼 吹水佬
谢谢!
2020-02-08 18:19
zzmx
Rank: 1
等 级:新手上路
帖 子:48
专家分:0
注 册:2020-2-4
得分:0 
回复 7楼 吹水佬
是的,感谢!
2020-02-08 18:19



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-499138-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.085733 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved