arduino / arduino/ArduinoCore-API

ANSI-C-like fprintf(), fscanf()

未关闭
#60 2 条评论 0 个 reaction 已指派 1 人 已被 @cmaglie 认领 在 GitHub 查看
enhancement
主要语言
C++
星标
306
派生
150
PR 合并指标
30 天内没有已合并 PR

描述

Urgently needed: ANSI-C-like `fprintf()`, `fscanf()`

Actually homebrewed `fprintf_` works fine (SD file checked on PC), just `fscanf_` muddles all up.

Up to now I've used a homebrewed function `fscanf_` but it doesn't work for floats in larger files (>400 elements), neither by 1.6.1 nor by 1.6.3 nor by 1.6.5.

These are the homebrewed functions:

Code:

```cpp
//*******************************************************************************_​**_********
int32_t fscanf_ ( File \* stream, const char fmtstr[], ... ) {
const int32_t MAXSTRSIZE = 1024;
char str[MAXSTRSIZE];
va_list args;
int32_t i=0, cnt=0;
int16_t chr;

va_start(args, fmtstr);

strcpy(str, "");
while ( (stream->available()) && (i < MAXSTRSIZE-1) ) {
chr = stream->read() ;
if (chr>=0 && chr!='\n') {
str[i]=(char)chr;
++i;
}
else break;
}

str[++i] = '\0';

cnt = vsscanf( str, fmtstr, args );
va_end(args);

return cnt;
}

//*******************************************************************************_​**_********

int32_t fprintf_ ( File \* stream, const char fmtstr[], ... ) {
char str[1024];
va_list args;
int32_t num;

va_start( args, fmtstr );
num = vsnprintf(str, sizeof(str), fmtstr, args);
stream->print(str);
va_end( args );

return num;
}

//*******************************************************************************_​**_********
```

贡献指南

这个仓库没有索引到贡献指南

评估

这个 Issue 还没有评估数据。

把新 issue 发到你的邮箱

精选适合新手参与的 GitHub issue 摘要。