arduino / arduino/ArduinoCore-API

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

Aperta
#60 2 commenti 0 reazioni 1 assegnatario Rivendicata da @cmaglie Vedi su GitHub
enhancement
Lingua principale
C++
Stelle
306
Fork
150
Metriche di merge delle PR
Nessuna PR unita negli ultimi 30g

Descrizione

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

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

Guida per i contributori

Nessuna guida per i contributori indicizzata per questo repository

Valutazione

Questa issue non è ancora stata valutata.

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.