VC++中数据读取和存储的问题(急)
我想从一个文件中读取数据,并将数据保存起来,文件中的数据是这样的:0.0561830.0159060.0035130.0201470.0054310.0015090.02...
我想从一个文件中读取数据,并将数据保存起来,文件中的数据是这样的:
0.056183 0.015906 0.003513
0.020147 0.005431 0.001509
0.026044 0.001199 0.001091 (每行数据间是按TAB分隔)
我已经定义好了一个
class Point
{
double x;
double y;
double z;
};
再定义一个对象数组
Point point[100];
在应用程序中的相应程序段中写的程序如下:
void CTempView::OnDu()
{
CFileDialog fileDlg(TRUE);
fileDlg.m_ofn.lpstrTitle="我要打开对话框";
fileDlg.m_ofn.lpstrFilter="CJP Files (*.cjp)\0*.cjp\0 \
(*.txt)\0*.txt\0All Files(*.*)\0*.*\0\0";
if(IDOK==fileDlg.DoModal())
{
CFile file(fileDlg.GetFileName(),CFile::modeRead);
..........//后面的不知道怎么写了
}
请问后面怎么样写.才能在点OK按钮选取文件后,将文件前三行中每一行的第一个数放入point对象数组中的每个对象的x,第2个数放入y,第三个数放入z. 最好是用CFile的Read函数实现.请高手帮忙写下程序.
如果我想用FILE *fp=fopen(fileDlg.GetFileName(),"r");
for(int i=0;i<3;i++)
{if(feof(fp)) break;
fscanf(fp,"%lf\t%lf\t%lf",&point[i].x,&point[i].y,
&point[i].z);
}这段程序有什么问题 展开
0.056183 0.015906 0.003513
0.020147 0.005431 0.001509
0.026044 0.001199 0.001091 (每行数据间是按TAB分隔)
我已经定义好了一个
class Point
{
double x;
double y;
double z;
};
再定义一个对象数组
Point point[100];
在应用程序中的相应程序段中写的程序如下:
void CTempView::OnDu()
{
CFileDialog fileDlg(TRUE);
fileDlg.m_ofn.lpstrTitle="我要打开对话框";
fileDlg.m_ofn.lpstrFilter="CJP Files (*.cjp)\0*.cjp\0 \
(*.txt)\0*.txt\0All Files(*.*)\0*.*\0\0";
if(IDOK==fileDlg.DoModal())
{
CFile file(fileDlg.GetFileName(),CFile::modeRead);
..........//后面的不知道怎么写了
}
请问后面怎么样写.才能在点OK按钮选取文件后,将文件前三行中每一行的第一个数放入point对象数组中的每个对象的x,第2个数放入y,第三个数放入z. 最好是用CFile的Read函数实现.请高手帮忙写下程序.
如果我想用FILE *fp=fopen(fileDlg.GetFileName(),"r");
for(int i=0;i<3;i++)
{if(feof(fp)) break;
fscanf(fp,"%lf\t%lf\t%lf",&point[i].x,&point[i].y,
&point[i].z);
}这段程序有什么问题 展开
展开全部
我提供些参考意见:
1. 使用对象的序列化来存储对象,用反序列化来从文件中读取数据生成对象。很多关于VC++的书有这方面的介绍,MSDN上也有。而且你可以从网上搜搜。运气好的话,可以弄几个Sample看看
2. CFile类的Read函数要求读多少个字节。而且读取的是字符串。(你文件中存储的也是字符串,虽然你看它们像浮点数),所以你要知道你读一行要读多少个字节。然后对得到的一行用 Tab来进行分割,再将分割后的字符创转化成浮点数。
1. 使用对象的序列化来存储对象,用反序列化来从文件中读取数据生成对象。很多关于VC++的书有这方面的介绍,MSDN上也有。而且你可以从网上搜搜。运气好的话,可以弄几个Sample看看
2. CFile类的Read函数要求读多少个字节。而且读取的是字符串。(你文件中存储的也是字符串,虽然你看它们像浮点数),所以你要知道你读一行要读多少个字节。然后对得到的一行用 Tab来进行分割,再将分割后的字符创转化成浮点数。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
我用你的方法测试了,一点问题也没有:
//我想从一个文件中读取数据,并将数据保存起来,文件中的数据是这样的:
//0.056183 0.015906 0.003513
//0.020147 0.005431 0.001509
//0.026044 0.001199 0.001091 (每行数据间是按TAB分隔)
//我已经定义好了一个
#include <stdio.h>
class Point
{
public:
double x;
double y;
double z;
};
//再定义一个对象数组
Point point[100];
//在应用程序中的相应程序段中写的程序如下:
/*void CTempView::*/OnDu()
{
//CFileDialog fileDlg(TRUE);
//fileDlg.m_ofn.lpstrTitle="我要打开对话框";
//fileDlg.m_ofn.lpstrFilter="CJP Files (*.cjp)\0*.cjp\0 \
// (*.txt)\0*.txt\0All Files(*.*)\0*.*\0\0";
//if(IDOK==fileDlg.DoModal())
//{
// CFile file(fileDlg.GetFileName(),CFile::modeRead);
//// ..........//后面的不知道怎么写了
//}
//请问后面怎么样写.才能在点OK按钮选取文件后,将文件前三行中每一行的第一个数放入point对象数组中的每个对象的x,第2个数放入y,第三个数放入z. 最好是用CFile的Read函数实现.请高手帮忙写下程序.
// 问题补充:如果我想用
FILE *fp=fopen("test.txt","r");
for(int i=0;i<3;i++)
{
if(feof(fp))
break;
fscanf(fp,"%lf\t%lf\t%lf",&point[i].x,&point[i].y,&point[i].z);
}//这段程序有什么问题
}
void main()
{
OnDu();
for(int i=0;i<3;i++)
printf("%f,%f,%f\n",point[i].x,point[i].y,point[i].z);
}
能够输出正确结果
//我想从一个文件中读取数据,并将数据保存起来,文件中的数据是这样的:
//0.056183 0.015906 0.003513
//0.020147 0.005431 0.001509
//0.026044 0.001199 0.001091 (每行数据间是按TAB分隔)
//我已经定义好了一个
#include <stdio.h>
class Point
{
public:
double x;
double y;
double z;
};
//再定义一个对象数组
Point point[100];
//在应用程序中的相应程序段中写的程序如下:
/*void CTempView::*/OnDu()
{
//CFileDialog fileDlg(TRUE);
//fileDlg.m_ofn.lpstrTitle="我要打开对话框";
//fileDlg.m_ofn.lpstrFilter="CJP Files (*.cjp)\0*.cjp\0 \
// (*.txt)\0*.txt\0All Files(*.*)\0*.*\0\0";
//if(IDOK==fileDlg.DoModal())
//{
// CFile file(fileDlg.GetFileName(),CFile::modeRead);
//// ..........//后面的不知道怎么写了
//}
//请问后面怎么样写.才能在点OK按钮选取文件后,将文件前三行中每一行的第一个数放入point对象数组中的每个对象的x,第2个数放入y,第三个数放入z. 最好是用CFile的Read函数实现.请高手帮忙写下程序.
// 问题补充:如果我想用
FILE *fp=fopen("test.txt","r");
for(int i=0;i<3;i++)
{
if(feof(fp))
break;
fscanf(fp,"%lf\t%lf\t%lf",&point[i].x,&point[i].y,&point[i].z);
}//这段程序有什么问题
}
void main()
{
OnDu();
for(int i=0;i<3;i++)
printf("%f,%f,%f\n",point[i].x,point[i].y,point[i].z);
}
能够输出正确结果
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询