您的位置:首页 > 编程语言 > C语言/C++

C++关于磁盘的数据的操作

2015-07-05 11:01 656 查看
</pre><p><strong>磁盘里面存在以逗号分开的double类型的数据点(里面的点,每三个一组,分别是x,y,z坐标),现在需要从磁盘里面读出数据的个数,以及x和y坐标的最大值以及最小值</strong></p><p><img src="https://img-blog.csdn.net/20150705110512929?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" /></p><pre name="code" class="html">#include<iostream>
#include<stdio.h>
#include<malloc.h>
#include <stdlib.h>
#include <string>
#include <string.h>
#include<fstream>
#define  INF 1000000000
using namespace std;
int main()
{
double xMin,xMax,yMin,yMax;
yMin=INF;
yMax=-INF;
xMin=INF;
xMax=-INF;
string filename;
//="E:\FourTree\sdkd\ceshi.txt";
char str[50];
memset(str,0,sizeof(str));
//double ad[100]={0};
double ad[10]={0};
int index=0,j=0,i=0;
char ch;
ifstream infile;
cout<<"请输入要读入的文件的名字(以回结束【绝对路径有效】):"<<endl;
getline(cin,filename,'\n');
infile.open(filename);
if(!infile){
cerr<<"打开文件失败!。。"<<endl;
return 1;
}
do{
infile.read(&ch,1);
double d=0.0;
str[j++]=ch;
if(ch==','||ch=='\n'||infile.eof()){
str[j-1]='\0';
d=atof(str);//将字符串转换成double类型的数字
if(i<3){
ad[i]=d;//数据点坐标缓存器
if(i==0){
if(xMin>ad[0]){
xMin=ad[0];
}
if (xMax<ad[0])
{
xMax=ad[0];
}
}
if(i==1){
if(yMin>ad[1]){
yMin=ad[1];
}
if (yMax<ad[1])
{
yMax=ad[1];
}
}
i++;
}else{
index++;//如果数据点坐标缓存器的坐标数目大于3.则点数加一
i=0;//
memset(ad,0,sizeof(ad));
ad[i]=d;//数据点坐标缓存器
if(i==0){
if(xMin>ad[0]){
xMin=ad[0];
}
else if (xMax<ad[0])
{
xMax=ad[0];
}
}
if(i==1){
if(yMin>ad[1]){
yMin=ad[1];
}
else if (yMax<ad[1])
{
yMax=ad[1];
}
}
i++;

}
memset(str,0,sizeof(str));
j=0;
continue;
}
}while(!infile.eof());
cout<<"所有数据点的数目为:"<<index+1<<endl;
cout<<"这些点的最小的x坐标是: "<<endl;
printf("%lf\n",xMin);
cout<<"最大的x坐标是: "<<endl;
printf("%lf\n",xMax);
cout<<"这些点的最小的y坐标是: "<<endl;
printf("%lf\n",yMin);
cout<<"最大的y坐标是: "<<endl;
printf("%lf\n",yMax);
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息