测测您是否细心,一段蒙了2个老板的代码^
测测你是否细心,一段蒙了2个老板的代码^_^
嗯,先别看回贴,你看得出bug在哪吗?呵呵,一个小小的bug导致我加班一晚上没找出来,
2个老板亲自找也没找着bug在哪哦^_^
------解决方案--------------------
这充分说明,
闭门造车是不好的,如果你的source open一些,bug很快就可以找到,设计也可以改进~
嗯,先别看回贴,你看得出bug在哪吗?呵呵,一个小小的bug导致我加班一晚上没找出来,
2个老板亲自找也没找着bug在哪哦^_^
- C/C++ code
#include <stdio.h> /* * 功能说明:解析NMEA语句中的GPGSA语句,提取第2,15,16,17个字段。 * 字段以','分开,并且字段有可能为空。 */ static char *gsa = "$GPGSA,A,3,19,28,14,18,27,22,31,39,,,,,1.7,1.0,1.3*34"; int main(int argc,char* argv[]) { int field = 0; int i; int loc; float pdop,hdop,vdop; for(i = 0; (gsa[i] != 0) && (gsa[i]!='*'); i++){/* '*' 或空格为结束符 */ if(gsa[i]==',') field++;/*当前字段*/ switch(field){ case 2: sscanf(gsa + i + 1, "%d", &loc);/*从','下一字符开始sscanf*/ break; case 15: sscanf(gsa + i + 1, "%f", &pdop); break; case 16: sscanf(gsa + i + 1, "%f", &hdop); break; case 17: sscanf(gsa + i + 1, "%f", &vdop); break; default: break; } } printf("loc = %d, pdop = %2.1f, hdop = %2.1f, vdop = %2.1f\n", loc, pdop, hdop, vdop); return 0; }
------解决方案--------------------
这充分说明,
闭门造车是不好的,如果你的source open一些,bug很快就可以找到,设计也可以改进~
- C/C++ code
#include <stdio.h> #include <string.h> /* * 功能说明:解析NMEA语句中的GPGSA语句,提取第2,15,16,17个字段。 * 字段以','分开,并且字段有可能为空。 */ static char *gsa = "$GPGSA,A,3,19,28,14,18,27,22,31,39,,,,,1.7,1.0,1.3*34"; int main(int argc,char* argv[]) { int field = 0; int i; int loc; float pdop,hdop,vdop; /******************** BETTER SOLUTION */ #define MAX_GSA 256 char *iter = gsa; for(iter = strchr(iter, ','); iter; iter = strchr(iter, ',')) { if (*iter) ++iter; ++field; if (field == 2) sscanf(iter, "%d", &loc); if (field == 15) sscanf(iter, "%f", &pdop); if (field == 16) sscanf(iter, "%f", &hdop); if (field == 17) sscanf(iter, "%f", &vdop); } printf("loc = %d, pdop = %2.1f, hdop = %2.1f, vdop = %2.1f\n", loc, pdop, hdop, vdop); /******************** BETTER SOLUTION */ for(i = 0; (gsa[i] != 0) && (gsa[i]!='*'); i++){/* '*' 或空格为结束符 */ if (gsa[i]==',') field++;/*当前字段*/ switch(field){ case 2: sscanf(gsa + i + 1, "%d", &loc);/*从','下一字符开始sscanf*/ break; case 15: printf(gsa + i + 1); /*这两句可以帮忙发现bug*/ printf("---field: %d\n", field); /*同一field不该多次出现*/ sscanf(gsa + i + 1, "%f", &pdop); while (gsa[i+1] && gsa[i+1] != ',') /*hack fix*/ ++i; break; case 16: printf(gsa + i + 1); printf("---field: %d\n", field); sscanf(gsa + i + 1, "%f", &hdop); while (gsa[i+1] && gsa[i+1] != ',') ++i; break; case 17: printf(gsa + i + 1); printf("---field: %d\n", field); sscanf(gsa + i + 1, "%f", &vdop); while (gsa[i+1] && gsa[i+1] != ',') ++i; break; default: break; } } printf("loc = %d, pdop = %2.1f, hdop = %2.1f, vdop = %2.1f\n", loc, pdop, hdop, vdop); return 0; }
------解决方案--------------------
不知道楼主有没用单步调试? 发现问题应该不难~~
当然,当局者迷,有时候就会这样,一个很小的问题,花了很久找出来,然后回头笑自己,:)