赛尔号吧 关注:483,305贴子:44,384,984
  • 8回复贴,共1
求助

【赛吧不聊赛】请各位大佬看看我这个代码有什么问题

只看楼主收藏回复

现在我有一个程序实验,要求打开TXT文件,读取一行定位点数据,判断是否为gpgga语句,如果是就解析出经纬度数据并打印在屏幕上,以下是我在网上找到的代码,编译没有问题,但运行后无结果,也就是没有从TXT文件中读取数据,请问这是为什么,还请大佬们解答?


IP属地:江西来自Android客户端1楼2023-10-25 16:15回复
    /* 功能 C++解析GPS数据并显示 时间 2016-04-22*/
    #include<fstream>
    #include<string>
    #include<iostream>
    #include<vector>
    #include<sstream>
    using namespace std;
    //数据类型转换模板函数
    template <class Type>
    Type stringToNum(const string str)
    {
    istringstream iss(str);
    Type num;
    iss >> num;
    return num;
    }
    int main()
    {
    ifstream file("实验一GNSS语句.TXT");
    string line;
    getline(file, line);
    //读取第一行 GGA格式 $GPGGA,025620.00,2602.33721,N,11911.49176,E,2,04,1.63,13.5,M,9.9,M,,0000*5D
    //GGA字段含义 语句ID,UTC时间,纬度,N/S,经度,E/W,GPS状态,卫星数量,精度因子,海拔 。。。
    vector<string> arr1; //定义一个字符串容器
    int position = 0;
    do
    {
    string tmp_s; position = line.find(","); //找到逗号的位置
    tmp_s = line.substr(0,position); //截取需要的字符串
    line.erase(0,position+1); //将已读取的数据删去
    arr1.push_back(tmp_s); //将字符串压入容器中
    }while(position != -1);
    position = 0;
    getline(file,line);
    //读取第二行 RMC格式 $GPRMC,025620.20,A,2602.33722,N,11911.49176,E,0.100,,281211,,,D*79
    //RMC字段含义 语句ID,UTC时间,GPS状态,纬度,N/S,经度,E/W,速度(节),,UTC日期,,,校验值
    vector<string> arr2;
    do
    {
    string tmp_s;
    position = line.find(",");
    tmp_s = line.substr(0,position);
    line.erase(0,position+1);
    arr2.push_back(tmp_s);
    }while(position != -1);
    file.close();
    //构造日期时间字符串 YYYY-MM-DD HH:MM:SS
    string datetime = "20"+arr2[9].substr(4,2)+"-"+arr2[9].substr(2,2)+"-"+arr2[9].substr(0,2)+" "+arr1[1].substr(0,2)+
    ":"+arr1[1].substr(2,2)+":"+arr1[1].substr(4,2);
    cout<<"UTC时间:"<<datetime<<endl;
    double d0 = stringToNum<double>(arr1[2]);
    cout<<"经度:";
    printf("%lf\n",d0/100);
    //此处不能使用cout,否则输出精度将受到影响
    double d1 = stringToNum<double>(arr1[4]);
    cout<<"纬度:";
    printf("%lf\n",d1/100);
    cout<<"海拔:"<<arr1[9]<<arr1[10]<<endl;
    return 0;
    }


    IP属地:江西2楼2023-10-25 16:17
    回复
      顶顶


      IP属地:江西来自Android客户端3楼2023-10-25 16:18
      回复
        很遗憾,您没有提供具体的代码示例。不过我可以给你一些通用的建议来帮助你找出问题所在:1. 确认文件路径是否正确:确保你的程序能够找到并打开TXT文件。如果文件不在程序的当前工作目录下,你需要指定完整的文件路径(例如:"C:/path/to/yourfile.txt")。请检查是否有权限访问该文件。2. 检查读取方式是否合适:根据你的需求,你可能需要逐行读取数据。你可以尝试使用循环语句和输入函数,比如`fgets()`在每次迭代中读取一行文本直到文件的末尾。此外还要保证你的数据格式是正确的。每个经纬度数据应该包含至少两个数字并且以“gpgga”开头。否则可能无法解析出经纬度的值。可以编写一个专门的解析函数或条件判断对每一行的内容进行处理,但不要忘记每处理完一次后要返回下一行继续执行操作。3. 查看错误信息:如果在运行过程中遇到任何错误或者异常情况,一定要仔细查看错误信息和日志输出以便于定位问题的根源。这通常会给出关于为什么程序未能成功运行的线索。如果你能将错误消息粘贴在这里,我将更容易地为你解决问题并提供解决方案。4. 在进行编程时要注意细节问题:如语法错误、括号不匹配等都可能导致程序不能正常运行。因此在进行编译的时候要多注意观察编译器给出的警告和提示以及可能出现的问题并及时修改过来。5. 使用调试工具: 如果以上方法仍然找不到问题, 可以考虑使用调试器(debugger)或者其他类似的开发环境下的调试功能来进行逐步的跟踪与排查.这样可以帮助你在关键步骤上了解变量的状态变化从而发现潜在的错误点并进行修复优化整个过程。这种方法虽然相对耗时会多些但对于复杂问题往往更为有效.甚至有可能最后解决了多年困扰自己的bug难题呢!希望这些一般性的建议能够帮助到你完成这项任务并且在面对其他挑战时不失方向感!!


        4楼2023-10-25 16:25
        回复
          chatgpt法debug呗。另外你好歹给个IDE截图呀,这看起来也太难受了


          IP属地:广东5楼2023-10-25 16:34
          回复


            IP属地:江西7楼2023-10-25 16:49
            收起回复
              设断点看变量内容,不会搞就打印出来


              IP属地:湖南来自Android客户端9楼2023-10-25 17:12
              回复