arduino / arduino/ArduinoCore-API

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

Offen
#60 2 Kommentare 0 Reaktionen 1 zugewiesene Person Beansprucht von @cmaglie Auf GitHub ansehen
enhancement
Vorherrschende Sprache
C++
Sterne
306
Forks
150
PR-Merge-Kennzahlen
Keine gemergten PRs in 30 T.

Beschreibung

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;
}

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

Beitragsleitfaden

Für dieses Repository ist kein Beitragsleitfaden indexiert

Bewertung

Dieses Issue wurde noch nicht bewertet.

Neue Issues direkt in Ihr Postfach

Eine kurze Übersicht über anfängerfreundliche GitHub-Issues.