Используйте fgets
, чтобы получить строку в предварительно выделенный буфер, затем strtoX
, чтобы извлечь число с плавающей запятой.(X
= f
для float
, X
= d
для double
, X
= ld
для long double
. Его подпись X_t strtoX(const char *nptr, char **endptr)
, где X_t
- этосоответствующий тип (float
, double
или long double
).
Пока не будет достигнут конец строки (**endptr = '\n'
), увеличивайте указатель строки (который установлен, чтобы указывать на предварительно выделенный буфер, и если он не увеличивается после strtoX
, то увеличивает его до тех пор, пока не будет. Используйте две переменные, например так:
char *lp = buf;
char *lp2 = buf;
do {
X_t x = strtoX(lp, &lp2);
if (lp == lp2 && *lp != '\n') {
++lp;
continue;
}
if (*lp2 == '\n')
goto read_line;
// do something with x
} while (1);
Мой код не велик, но он должен показать смысл.
Кроме того, strtoX
для X
= f
и X
= ld
не поддерживаются до C99 / POSIX 2011.