C++中使用结构体读取文件
文本格式:B= 73.965 L= -29.457
2010 1 4 0: 4:42.000
Altitude, unit: m; Geopotential height, unit: gpm; Refractivity, unit: N
NO Alt GeopH Refrac
1 127.7539 128.0322 3.001763e+002
2 257.6292 258.1852 2.954945e+002
3 386.8093 387.6362 2.909217e+002
4 515.3259 516.4172 2.864528e+002
5 643.2098 644.5590 2.820830e+002
6 770.4980 772.0988 2.778066e+002
7 897.2189 899.0650 2.736190e+002
8 1023.3960 1025.4815 2.695166e+002
9 1149.0560 1151.3749 2.654953e+002
10 1274.2202 1276.7666 2.615516e+002
11 1398.9054 1401.6735 2.576829e+002
12 1523.1306 1526.1148 2.538864e+002
13 1646.9144 1650.1091 2.501589e+002
需要读取B,L,以及以下的每行数据,求大神们指教!小弟实在不知到错在那里
程序代码:#include "stdafx.h"
#include "TEST_READ.h"
#include "function.h"
const int MAXNU = 2048;
struct GNSSData
{
double Latitude_B;
double Latitude_L;
char GNSS_TIME[256];
char GNSS_UNIT[256];
char GNSS_NU[256];
struct data{
double NO;
double Alt;
double GeopH;
double Refrac;
}data[MAXNU];
}gnssdata;
int main()
{CString file = _T("C:\\Users\\Administrator\\Desktop\\hj.txt");
const char* test = CStringToCharArray(file);
FILE* pfile = NULL;
if (fopen_s(&pfile, test, "r"))
{
fprintf_s(stdout, "This file is not opened!\n");
return 1;
}
char LineofStr[256];
memset(LineofStr, 0x00, sizeof(LineofStr));
//fgets(LineofStr, sizeof(LineofStr), pfile);
int st=0,n=0;
while(4)
{
if(fgets(LineofStr, sizeof(LineofStr), pfile)==NULL)
break;
if(st==0)
{
if(sscanf_s(LineofStr,"B= %f",&gnssdata.Latitude_B," L= &f",&gnssdata.Latitude_L)==2)
st=1;
else if(st==1)
if(sscanf_s(LineofStr, gnssdata.GNSS_TIME)==1)
st=2;
else if(st==2)
if(sscanf_s(LineofStr,"Altitude, unit: m; Geopotential height, unit: gpm; Refractivity, unit: N \n",gnssdata.GNSS_UNIT )==0)
st=3;
else if(st==3)
if(sscanf_s(LineofStr," NO Alt GeopH Refrac \n ",gnssdata.GNSS_NU)==0)
st=4;
else if(st==4)
if(sscanf_s(LineofStr,"%d%4.0f%4.0f%4.0f",&gnssdata.data[n].NO,&gnssdata.data[n].Alt ,&gnssdata.data[n].GeopH,&gnssdata.data[n].Refrac)==4)
{
n++;
if(n>MAXNU||n>sizeof(LineofStr))
break;
}
}
}
fclose(pfile);
printf_s("gnssdata.data[3].NO= %f",gnssdata.data[n].NO);
}function.h
程序代码:#ifndef CStringToCChar_H_H_H_H_H_ #define CStringToCChar_H_H_H_H_H_ char* CStringToCharArray(CString cStr); #endif
程序代码:
#include "stdafx.h"
#include "function.h"
char* CStringToCharArray(CString cStr)
{
char *ptr;
#ifdef _UNICODE
LONG len;
len = WideCharToMultiByte(CP_ACP, 0, cStr, -1, NULL, 0, NULL, NULL);
ptr = new char[len + 1];
memset(ptr, 0, len + 1);
WideCharToMultiByte(CP_ACP, 0, cStr, -1, ptr, len + 1, NULL, NULL);
#else
ptr = new char[cStr.GetAllocLength() + 1];
sprintf(ptr, _T("%s"), cStr);
#endif
return ptr;
}


