use*_*030 0 c++ arduino arduino-c++
我正在尝试使用sscanf()读取数字,但我无法使用double vars成功但可以读取int
双重的例子
//double var reading not working
const char KBuffer[80] = "0x3:2.1:2.1:2.1";
int rt;
double p,i,d;
int n = sscanf(KBuffer, "%x:%lf:%lf:%lf", &rt, &p, &i, &d);
Serial.println();
Serial.print("rt "); Serial.print(rt);
Serial.print(" P ");Serial.print(p);
Serial.print(" i ");Serial.print(i);
Serial.print(" d ");Serial.print(d);
Run Code Online (Sandbox Code Playgroud)
//输出rt 3 P 0.00 i ovf d 0.00
int的例子
// int reading working ok
const char KBuffer[80] = "0x3:2:2:2";
int rt;
int p,i,d;
int n = sscanf(KBuffer, "%x:%d:%d:%d", &rt, &p, &i, &d);
Serial.println();
Serial.print("rt "); Serial.print(rt);
Serial.print(" P ");Serial.print(p);
Serial.print(" i ");Serial.print(i);
Serial.print(" d ");Serial.print(d);
// output
rt 3 P 2 i 2 i 2
Run Code Online (Sandbox Code Playgroud)
所以任何想法在做什么错
当我在C ++在线编译器上运行时使用相同的代码,例如:https : //onlinegdb.com/ryS8zfE3r
得到正确的结果
即使第一个转换顺利进行,arduino scanf也不会读取浮点数,而printf也不会同时打印它们。scanf和printf系列功能默认情况下不支持浮点数。
第一个问题很容易解决:int n = sscanf(KBuffer, "0x%x:%d:%d:%d", &rt, &p, &i, &d);
第二个问题需要通过添加来更改编译器(或链接器)操作,-Wl,-u,vfscanf -lscanf_flt -lm
但是irt 会使图像大小增加约15kb。
hardware/tools/avr/doc/avr-libc/group__avr__stdio.html
在您的电路板库的安装目录中阅读更多内容
归档时间: |
|
查看次数: |
62 次 |
最近记录: |