Как преодолеть ошибку синтаксического анализа в функции SSCANF в Clanguage? - PullRequest
0 голосов
/ 10 февраля 2012

как разобрать пустую подстроку с помощью sscanf ....... если моя строка str [] = "первая, третья, последняя." я не могу прочитать третью и последнюю подстроку, если моя вторая подстрока равна нулю. Есть ли решение для преодоления этой ошибки ..... ?????

**Code:**


#include <math.h>
#include <stdio.h>
#include <stdlib.h>

char *tokenstring = "first,second,25.5,15";
int result, i;
double fp;
char o[10], f[10], s[10], t[10];

void main()
{
   result = sscanf(tokenstring,"%[^','],%[^','],%[^','],%s", o,t,s,f);`sscanf function`
   fp = atof(s);
   i   = atoi(f);
   printf("%s\n %lf\n %s\n %d\n", o,t,fp,i);
}
for this program if i execute my output is 

`output`
>first
>second
>25.5
>15

но если я попытаюсь удалить подстроку "second" в указателе строки токена ... и если я попытаюсь выполнить, то я получу вывод как:

char *tokenstring = "first,,25.5,15";

>first
>(blank)
>0.00
>0

как мне прочитать третью и четвертую подстроку в строке "tokenstring" ... любые предложения ?????????? .

1 Ответ

0 голосов
/ 10 февраля 2012

Разбор входных символов

char part[4][1000] = {0};
const char *input = "first,,25.5,15";
size_t k, n;

for (k = 0; k < 4; k++) {
    char *curr = part[k];
    while (*input && *input != ',') {
        *curr++ = *input++;
    }
    if (*input == ',') input++; else break;
}
/* (k+1) elements have been parsed */
for (n = 0; n < k + 1; n++) {
    printf("part %d (between square parenthesis): [%s]\n", (int)n, part[n]);
}
...