我用C++写了一个函数,目的是提取GPS的数据,把需要的数据存入结构体变量,GPS数据格式如下:
$GPGGA,102639.00,3906.89667,N,11720.83367,E,1,4,4.14,505.0,M,-2.3,M,,*7C
我的函数文件如下:
头文件(定义了我的函数结构体):
typedef struct
{
char time[20];
double Latitude_value;
char LatiNS[3];
double Longitude_value;
char LongiEW[3];
char GPSQuality[2];
int NumOfSat;
double AntennaHight;
double HorizontalDOP;
}GPS_INFO;
函数文件:
#include <iostream>
#include <string>
#include <stdio.h>
#include "testfile.h"
using namespace std;
int main()
{
GPS_INFO GPS;
char str[200]= "$GPGGA,102639.00,3906.89667,N,11720.83367,E,1,4,4.14,505.0,M,-2.3,M,,*7C";
sscanf(str,"$GPGGA, %[^,], %lf, %c, %lf,%c", GPS.time, &(GPS.Latitude_value), GPS.LatiNS,&(GPS.Longitude_value), GPS.LongiEW);
cout << GPS.time <<" "<< GPS.Latitude_value <<" "<< GPS.LatiNS << " " << GPS.Longitude_value << " "<< GPS.LongiEW << " "<< endl;
return 0;
}
结果显示如图:
我想问以下几个问题:
1. 为什么我在结构体里定义了坐标经度和纬度为Double类,但用SSCANF函数后,它的取值才到小数点后一位,正确应该是提取到小数点后五位才对?
2.应为无法用CHAR来提取方向,比如LatiNS,我不得不用字符串才能提取,这里面有什么问题?
3.为什么我的输出结果出现了一大串乱码?这是什么原因?如果用修改的源码附上,就很好了。
希望能和大家讨论以下!!谢谢
C++用SSCANF函数提取出现的问题
char s1[10],s2[10], s3[10];以逗号为分格符,要读一个字符串用:sscanf(str,"%[^','],%lf, %lf,%[^','],%lf,%[^','],%lf",s1,&x,&y,s2,&x2,s3,&y2);以逗号为分格符,跳过一个字符串用:sscanf(str,"%*[^','],%lf, %lf,%*[^','],%lf,%*[^','],%...
C++用SSCANF函数提取出现的问题
char s1[10],s2[10], s3[10];以逗号为分格符,要读一个字符串用:sscanf(str,"%[^','],%lf, %lf,%[^','],%lf,%[^','],%lf",s1,&x,&y,s2,&x2,s3,&y2);以逗号为分格符,跳过一个字符串用:sscanf(str,"%*[^','],%lf, %lf,%*[^','],%lf,%*[^','],%...
C++ sscanf 解析管道符分隔的字符串,遇到为空的后面就无法解析了。代码...
把匹配的格式改了一下,第五项解析空格 sscanf("02|04|5101|014| |20170205 104504|03|5101|034||20170205 104504", "%[^|]|%[^|]|%[^|]|%[^|]|%[ ]|%[^|]|%[^|]|%[^|]|%[^|]|%[^|]|%[^|]", szVehType, szLaneType, szNetId, szSta, szLane, szTime, ...
关于sscanf的问题
"%fl" 你写反了,是lf( long float)sscanf(...,"%lf\\t",d);可以读 具体你看下面的msdn吧 Read formatted data from a string. These functions are deprecated because more secure versions are available; see sscanf_s, _sscanf_s_l, swscanf_s, _swscanf_s_l.int sscanf(const char *...
c语言编程,关于sscanf通过中文逗号截取字符串的问题
37. sscanf(string, "%5s", buf1);38. printf("2.string=%s\\n", string);39. printf("2.buf1=%s\\n\\n", buf1);40. \/ 41. **执行结果:42. **2.buf1=12345 43. *\/ 44.45. \/*3.取到指定字符为止的字符串*\/ 46. string = "123\/456";47. ...
c++中sscanf函数与sprintf函数的用法
1、基本用法,取字符串 string source0 = "1234456"; char str[521]; sscanf(source0.c_str(),"%s",str); sscanf(source0.c_str(),"%4s",str);2、转换为整型数 string source0 = "123456"; int x; sscanf(source0.c_str(),"%d",&x); sscanf(source0.c...
用c++如何把下面字符串中的关键信息提取出来
namespace std;int main(void){ string str("#1 = AXIS2_PLACEMENT_3D ( 'NONE', #29, #44, #43 )"); int a[20]; char *p=(char *)str.c_str(); for(int n=0,j=0,i=0;p[i];i++) if(p[i]=='#'){ sscanf(p+i+1,"%d%n",a+j++,&n); ...
1、C\/C++如何实现在一个指定的文件中,提取指定的数字?如我在stdafx.h...
很 简单 先用 strstr 找到那行 然后 提取出来 用sscanf进行解析 后面的数字不知道的也可以提取出来 可以用 %d 代替 好吧 我也用 string 和 fstream类 还有 getline
c++用fread读取数据问题
可以建议这样:用fgets读取每一行的字符。然后用sscanf进行字符串解析,获取每行字符串的两个整数。假设FILE* fp=stdin;那么关键代码有:char buffer[88];for(int i=0;;++i) { if(fgets(buffer,88,fp)==NULL) \/\/读到文件末尾 break;sscanf(buffer,"%d %d",&a[i][0],&a[i][1]);} ...
C++,16进制转化问题,字符串转化成数字
char szValue[] = "01f0";int nValude = 0;sscanf(szValue,"%x",&nValude);printf("%d\\n",nValude);return 0;} 主要用到sscanf这个库函数:函数名: sscanf 功 能: 执行从字符串中的格式化输入 用 法: int sscanf(char *string, char *format[,argument,...]); ...