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

smart_boy 2006-10-22 05:54:25
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就够我目前用的了,谢谢!!!
...全文
162 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
smart_boy 2006-10-23
  • 打赏
  • 举报
回复
雪中送炭啊~
昨天自己勉强写出来了,不过,我觉得还是你的获取每行的个数这个函数解决了关键问题~
谢谢 :) 鲜花送英雄.
Aaron_Jerry 2006-10-22
  • 打赏
  • 举报
回复
我刚写了个从文件中读数据的程序。希望对楼主有所帮助把。呵呵

#include <stdio.h>
#include <stdlib.h>

#define R 4 //行数
#define C 6 //列数


int GetOneLineLength(FILE* fp);


double data[R][C];

void main()
{

int*lpl=NULL;
int i,j,k,m=0;
int ch,tag;
char buff[10*C],temp[10];

FILE* fp;
if(fp=fopen("data.txt","r+"))
{
//linecount=GetLineCount(fp);
fseek(fp,0L,SEEK_SET);
lpl=(int*)malloc(R*sizeof(int));
for(i=0;i<R;i++)
lpl[i]=GetOneLineLength(fp);
fseek(fp,0L,SEEK_SET);
for(i=0;i<R;i++)
{
tag=0;
int numread=fread(buff,sizeof(char),lpl[i],fp);
ch=fgetc(fp);
for(j=0;j<numread && buff[j];j++)
{
if(buff[j]==' ' && tag <C-1)
{
for(k=m;k<j;k++)temp[k-m]=buff[k];
temp[k]='\0';
data[i][tag]=atof(temp);
printf("data[%d][%d]=%.1f ",i,tag,data[i][tag]);
tag++;
m=j+1;
}
}
//读取每行的最后一个数据
for(k=m;k<j;k++)temp[k-m]=buff[k];
temp[k]='\0';
data[i][tag]=atof(temp);
printf("data[%d][%d]=%.1f ",i,tag,data[i][tag]);
m=0;
}
}
free(lpl);
fclose(fp);
}
int GetOneLineLength(FILE* fp)
{
int count=0;
int ch=fgetc(fp);
while(ch!=EOF)
{
if(ch != '\r' && ch != '\n')
{
count++;
ch=fgetc(fp);
}
else
break;
}
return count;
}
文件数据如下:
1.0 -1.2 4.0 2.9 1.3 23.5
2.5 -2.0 23.6 -30.0 -34.1 -234.5
3.3 21.8 -12.12 11.9 12.1 21.3
5.6 2.2 -9.0 21.0 23.6 1.1
其中数据间以空格分隔的。
数据的输出格式自己控制下把。呵呵
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
  • 打赏
  • 举报
回复
谢谢 应 的帮忙先。不过,我不太理解,fscanf(fp,"%le",&data[i][j]);不是一个一个读入的么? 我读的时候好像有问题呢,提示"Runtime error"。
你能自己用一个非常简单的txt文件(2行2列):
1.0 1.0
1.0 1.0

帮我写出读入文件的程序么?
感激不尽!
再晚大家休息了我就惨了~

wenbo_ying 2006-10-22
  • 打赏
  • 举报
回复
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);

fscanf是要送地址的
fprintf的时候,也要一个一个的来,直接给一个数据,当然处理不了
smart_boy 2006-10-22
  • 打赏
  • 举报
回复
没有回复啊~ 真是晕。对我是难了些,可是我的水平菜啊~
高手开金口噢~

主要是如何读 既有行也有列的double数据的txt文件???? (写文件比较容易的。)
smart_boy 2006-10-22
  • 打赏
  • 举报
回复
麻烦具体说好吗?我真的对VC++很陌生 :(
#include <fstream.h>
下面能够给出能够顺利运行的代码么? 谢谢!
lhj 2006-10-22
  • 打赏
  • 举报
回复
用<fstream>

16,473

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

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