sscanf в C. Разделение неизвестного числа двойников в строке на массив - PullRequest
1 голос
/ 07 ноября 2010

У меня есть похожие вопросы, но ни один из них не помог мне с моей проблемой. Я получаю строку с неизвестным числом чисел с плавающей точкой, и мне нужно отдельно вырезать их в массив.

Что у меня есть:

   h=0;
   while(fstring[h]!='\n'){  //So first I count how many spaces there are in the string
            if(fstring[h]==' '){
                sc++;
            }
            h++;
    }
    vars=sc;
    for(h=0;h<vars;h++){
        sscanf(fstring,"%lf",&scanned);
        matrix[h]=scanned;
    }

Так почему же это не работает? Каждый раз выдает ошибку ..

Ответы [ 2 ]

3 голосов
/ 07 ноября 2010

Я настоятельно рекомендую использовать strtod вместо sscanf здесь.Примерно так должно работать:

char *ptr, *endptr = fstring;
int h = 0;
do {
    ptr = endptr;
    matrix[h++] = strtod(ptr, &endptr);
} while (endptr != ptr && isspace(*endptr) && *endptr != '\n');

Выделение памяти и восстановление из плохо сформированного ввода, оставленного в качестве упражнения.

0 голосов
/ 07 ноября 2010

Вместо этого вы можете сделать что-то вроде этого:

#include <stdio.h>

int main ()
{
    double fmatrix[100] = { 0 };
    double *matrix = fmatrix;
    double scanned;
    int bytesread;
    char string[100];
    char *fstring = string;
    int i;

    fgets ( string, 99, stdin );
    fstring = string;

    while ( sscanf ( fstring, "%lf%n", &scanned, &bytesread ) > 0 )
    {
        fstring += bytesread;
        *matrix++ = scanned;
    }

    matrix = fmatrix;

    for ( i = 0; i < 50; i++ )
    {
        printf ( "%lf\n", *matrix++ );
    }
}
...