m0_69114617 2022-10-15 20:49 采纳率: 60%
浏览 23
已结题

MFC读取导航电文有问题

读取文件链接: https://pan.baidu.com/s/1q1y_4be_HiRdnoWsEdsXIA?pwd=0000 提取码: 0000

利用文件读取发现无法读取,不知道是不是e-1什么的没读取进去的原因
文件读取格式如图所示

img

#include <math.h>
#include<fstream>
using namespace std;
#define PI 3.1415926535897932384626433832795

xl dq[200];
CString openpath;
bool flag0;

struct xl //星历
{
    char gps[10];//存储PRN和历元
    int year;
    int month;
    int day;
    int hour;
    int minute;
    int second;
    double   ClkBias;//偏差
    double   ClkDrift;//漂移
    double   ClkDriftRate;//漂移速度
    double   IODE;
    double   Crs;
    double   DetlaN;
    double   M0;
    double   Cuc;
    double   e;
    double   Cus;
    double   SqrtA;
    double   TOE;
    double   Cic;
    double   Omega;
    double   Cis;
    double   i0;
    double   Crc;
    double   omega;
    double   OmegaDot;
    double   iDot;
    double   codesOnL2Channel;
    double   GPSWeek;
    double   L2PDataFlag;
    double   SVAccuracy;
    double   SVHealth;
    double   TGD;
    double   IODC;
    double   TransTimeOfMsg;
    double   Spare1;
    double   Spare2;
    double   Spare3; 
};

void C星历文件View::readfile()
{
        CString filter(_T("17n文件|*.17n||ALL FILES||*.*|"));
        CFileDialog dlg(true, NULL, NULL, NULL, filter, this);
        if (dlg.DoModal() != IDOK)
        {
            MessageBox(_T("文件未打开"), _T("警告!"), MB_ICONWARNING);
            flag0 = false;
            return;
        }
        else
        {
        openpath = dlg.GetPathName();
        MessageBox(_T("打开文件成功"), _T("提示!"), MB_ICONWARNING);
        flag0 = true;
        }
        
        int i, j;
        char line[60];
        char line2[300];
        ifstream fp(openpath);
        for (i = 0; i < 7; i++)
        {
            fp.getline(line, 60, '\n');
        }
        for (i = 0;; i++)
        {
            fp.getline(line2, 300, '\n');
            for (j = 0; j < 300; j++)
            {
                if (line2[j] == 'D')
                    line2[j] = 'e';
            }
            sscanf_s(line2, "%s %d %d %d %d %d %d %lf %lf %lf", dq[i].gps, _countof(dq[i].gps), &dq[i].year, &dq[i].month, &dq[i].day, &dq[i].hour, &dq[i].minute, &dq[i].second, &dq[i].ClkBias, &dq[i].ClkDrift, &dq[i].ClkDriftRate);//无法读取
            fp.getline(line2, 300, '\n');
            for (j = 0; j < 300; j++)
            {
                if (line2[j] == 'D')
                    line2[j] = 'e';
            }
            sscanf_s(line2, "%lf %lf %lf %lf", &dq[i].IODE, &dq[i].Crs, &dq[i].DetlaN, &dq[i].M0);//无法读取

        }
        
}
  • 写回答

2条回答 默认 最新

  • CSDN专家-link 2022-10-15 21:04
    关注

    你这个数据样本不太整齐啊。比如第一行前两个浮点数之间没有空格啊,这样%lf%lf输入时,第二个是不能正确读取的
    仔细数了数,你的浮点数都占19位,如果是正数,那么是18位加一个空格,但如果是负数,占满了19位,导致缺少空格
    既然确定长度固定,建议改为:
    sscanf_s(line2, "%s %d %d %d %d %d %d %19lf%19lf%19lf", dq[i].gps, _countof(dq[i].gps), &dq[i].year, &dq[i].month, &dq[i].day, &dq[i].hour, &dq[i].minute, &dq[i].second, &dq[i].ClkBias, &dq[i].ClkDrift, &dq[i].ClkDriftRate);//无法读取

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 10月24日
  • 已采纳回答 10月16日
  • 创建了问题 10月15日

悬赏问题

  • ¥15 随身WiFi网络灯亮但是没有网络,如何解决?
  • ¥15 gdf格式的脑电数据如何处理matlab
  • ¥20 重新写的代码替换了之后运行hbuliderx就这样了
  • ¥100 监控抖音用户作品更新可以微信公众号提醒
  • ¥15 UE5 如何可以不渲染HDRIBackdrop背景
  • ¥70 2048小游戏毕设项目
  • ¥20 mysql架构,按照姓名分表
  • ¥15 MATLAB实现区间[a,b]上的Gauss-Legendre积分
  • ¥15 delphi webbrowser组件网页下拉菜单自动选择问题
  • ¥15 linux驱动,linux应用,多线程