题目:
下面是一个控制点文件的样本,第一行代表控制点数,后面每一行为一个控制点,其数据信息从左到右分别为ID(控制点编号),x,y,z坐标。要求编写一个函数读取控制点数据并按照x坐标从小到大排序,保存到一个文件中。
5
Wuhan 29.76 69.46 294.35
Beijing 65.84 50.83 275.34
Shanghai 59.36 26.68 286.82
Tianjing 37.37 49.21 300.50
Guangzhou 50.55 30.46 276.53
代码:
#include<iostream>
#include<stdio.h>
using namespace std;
struct GCP {
char ID[32];
double x;
double y;
double z;
};
bool Read(const char*strfile,GCP**pGCP,int *nGCP) {
FILE* fp = NULL;
fopen_s(&fp, strfile, "rt");
if (!fp) {
cout << "erorr"; return 0;
}
fscanf_s(fp, "%d", nGCP);
*pGCP = new GCP[*nGCP];
memset(*pGCP, 0, *nGCP * sizeof(GCP));
for (int i = 0; i < *nGCP; i++) {
/*if (fscanf_s(fp, "%s %lf %lf %lf", (*pGCP)[i].ID, 32, &(*pGCP)[i].x, &(*pGCP)[i].y, &(*pGCP)[i].z) != 4) {
delete[] * pGCP;
fclose(fp);
return false;
}*/fscanf_s(fp, "%s %lf %lf %lf", (*pGCP)[i].ID, 32, &(*pGCP)[i].x, &(*pGCP)[i].y, &(*pGCP)[i].z);
}
fclose(fp);
return true;
};
int main() {
int num = 0;
GCP* p = NULL;
FILE* fp1 = NULL;
fopen_s(&fp1, "D:\\test2.txt", "w");
if (Read("D:\\test1.txt", &p, &num)) {
for (int i = 0; i < num; i++) {
for (int j = 0; j < num - 1 - i; j++) {
if (p[j].x > p[j + 1].x) {
GCP t = p[j]; p[j] = p[j + 1]; p[j + 1] = t;
}
}
}
for (int i = 0; i < num; i++) {
fprintf(fp1,"%s %lf %lf %lf\n", p[i].ID,p[i].x, p[i].y, p[i].z);
}
}delete[]p;
fclose(fp1);
}
有没有人解释一下为什么要用GCP**pGCP,定义指向指针的指针?
还有其实用不用if(fscanf!=4)都无所谓对吗?
还有我发现delete不能在Read函数里,要在main函数里,不然就报错,为什么啊?