VC++菜鸟请教:.txt文件中double数据的读、写问题!!!急急急!!!!

smart_boy 2006-10-22 05:51:31
VC++菜鸟非常着急请教:读、写.txt文件中double数据的代码!!!

f:\data.txt包含数据为100行10列:
1.21 0.55 ...
2.11 -1.25 ...
. .
. .
. .

我编写的是:

读:

double data[100][10];

FILE *fp;
fp=fopen("F:\\data.txt","r+t");
i=0;
while(i<100)
{
for (j=0;j<10;j++)
{
fscanf(fp,"%le",data[i][j]);

}
i=i+1;

}

fclose(fp);

写:
FILE *fp2 = fopen( "F:\\writedata.txt", "w" );
i=0;
while(i<100)
{
fprintf(fp2,"%f\n",data[i]);
i++;
}
fclose(fp2);

--------------------------------------------------------
2个都不能通过,提示内存存取错误! 请高手帮个忙,给出正确的程序~
p.s. 文件读取的命令我查了,太多了,就这个简单的fscanf和fprintf就够我目前用的了,谢谢!!!
...全文
1318 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
smart_boy 2006-10-23
  • 打赏
  • 举报
回复
谢谢你~
CQZE 2006-10-22
  • 打赏
  • 举报
回复
int main(int argc, char **argv)
{
std::vector<double> vec;
std::ifstream ifs("F:\\data.txt");
std::copy(std::istream_iterator<double>(ifs), std::istream_iterator<double>(), std::back_inserter(vec));
std::copy(vec.begin(), vec.end(), std::ostream_iterator<double>(std::cout, "\t"));
system("pause");
}
smart_boy 2006-10-22
  • 打赏
  • 举报
回复
谢谢 雁南飞 提出的思路,---用一维数组读入,之后再进行分割就可以了。
VC++ 6 调试通过:
----------------------------------------------------
#include <iostream>
#include <cstdio>
using namespace std;

int main()
{
double data[4];
FILE *fp2 = fopen( "f:\\writedata.txt", "r" );
int i=0;
int j=0;
while(i<4)
{
fscanf(fp2,"%lfe",&data[i]);
cout<<data[i]<<"\t";
i++;
}
fclose(fp2);

return 0;

} //main
----------------------------------------------------------------

谢谢大家!!!
smart_boy 2006-10-22
  • 打赏
  • 举报
回复
注: writedata.txt文件里面就是2行2列:
-----
| 1.0 1.0 |
| 1.0 1.0 |
-----
smart_boy 2006-10-22
  • 打赏
  • 举报
回复
回 雁南飞:
非常感谢你的热心,可是我按照你的方法没有成功。考虑到我的编程水平,贴出来请过目:

#include <iostream>
#include <cstdio>
#include <sstream>
using namespace std;

int main()
{
double data[2][2];
int i,j;
char buffer[1024];
FILE *fp=fopen("f:\\writedata.txt","r");

fgets( buffer, 4, fp );
istringstream is(buffer);
for(i=0;i++;i<2)
for(j=0;j++;j<2)
{
data[i][j]=buffer[i*2+j];
cout<<data[i][j]<<"\t";
}
fclose(fp);
return 0;
}
飞哥 2006-10-22
  • 打赏
  • 举报
回复
楼主可以通过字符流来实现
istringstream

-----------
#include <sstream>
using namespace std;

char buffer[maxsize];
fopen()..
fgets(fp,buffer);
istringstream is(buffer);
然后放到数组里面去

smart_boy 2006-10-22
  • 打赏
  • 举报
回复
p.s. 一刀的写文件程序段我已经通过了,谢谢!!!

读文件,要命的读~~~~读读读
smart_boy 2006-10-22
  • 打赏
  • 举报
回复
回 瞌睡虫: 是科学计数法。 :)
提示是“Runtime error”。
大虾能否给出能debug的程序啊,---我这时候情愿自己依葫芦画瓢~~~
这么小的问题,折腾我2天了!!! 救火如救人啊~
smart_boy 2006-10-22
  • 打赏
  • 举报
回复
回 瞌睡虫: 是科学计数法。 :)
回 斑点狗: 你给出的我不能调试成功!报错:( 为什么?
回 一刀 : 我正在写。

jixingzhong 2006-10-22
  • 打赏
  • 举报
回复
写的时候,
data 还是原来的 2维数组?

那么还是用多层循环!
逐个元素写入文件 ~
jixingzhong 2006-10-22
  • 打赏
  • 举报
回复
while(i<100)
{
for (j=0;j<10;j++)
{
fscanf(fp,"%lf",&data[i][j]);

}
i=i+1;
}

//你的数据释放用的 e 科学计数法表示的么?
lw1a2 2006-10-22
  • 打赏
  • 举报
回复
FILE *fp2 = fopen( "writedata.txt", "w" );
i=0;
while(i<100)
{
for (j=0;j<10;j++)
fprintf(fp2,"%f\n",data[i][j]);
i++;
}
fclose(fp2);
dogdotnet 2006-10-22
  • 打赏
  • 举报
回复
ifstream f(path);
char line[1024];

if(f.fail())
{
return -1;
}
float x[10];
while(!f.eof())
{
f.getline(line,1024);
stringbuf buffer(line);
istream mem(&buffer);
for(int i=0;i<10;i++) mem>>x[i];
//在这里处理x[0]....x[9]

}
f.close();
smart_boy 2006-10-22
  • 打赏
  • 举报
回复
报错的是"Runtime Error!"
smart_boy 2006-10-22
  • 打赏
  • 举报
回复
嗯,我少了&。 但是,这样子读二维数组好像不行啊~ 结果很是莫名其妙的 :(
lw1a2 2006-10-22
  • 打赏
  • 举报
回复
fscanf(fp,"%le",&data[i][j]);
smart_boy 2006-10-22
  • 打赏
  • 举报
回复
int fscanf ( FILE * stream , const char * format [ , argument , ...] );
Ref: http://www.cplusplus.com/ref/cstdio/fscanf.html
但是,我只要能够解决我上面的问题的实例~ 急急急~

33,311

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧