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

该博客介绍如何使用C++从磁盘中读取以逗号分隔的double类型数据点,并计算x、y坐标的最大值和最小值。通过示例代码展示文件操作过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

</pre><p><strong>磁盘里面存在以逗号分开的double类型的数据点(里面的点,每三个一组,分别是x,y,z坐标),现在需要从磁盘里面读出数据的个数,以及x和y坐标的最大值以及最小值</strong></p><p><img src="https://img-blog.youkuaiyun.com/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;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值