przykład użtcia funkcji vsscanf

0

Witam
Poszukuję jakiegoś przykładu użycia ww funkcji, konkretnie chodzi mi o odczytanie ciągu liczba znak liczba ... o nieznanej długości

0

Jest przy dokumentacji: http://www.cplusplus.com/reference/cstdio/vsscanf/
Jeżeli myślisz że to nadaje się na wczytanie szeregu liczb to się mylisz, format jest z góry ograniczony.

0

A masz może pomysł z czego można by było skorzystać?

0

nikt?

0

pętla + scanf/cin

0

eh tyle, że ja mam już gotowy c string - muszę najpierw coś z niego usunąć

0

No to korzystaj z serii: strtol, strtoul, strtod: http://www.cplusplus.com/reference/cstdlib/strtod/

2

Właściwie to możesz użyć vscanf. Odczytuj w pętli powtarzające się fragmenty (np. znak liczba) i użyj specyfikatora %n i przy każdej iteracji do początku stringa dodawaj offset, który ci się zapisze.

0
Zimny Krawiec napisał(a):

... i przy każdej iteracji do początku stringa dodawaj offset, który ci się zapisze.
Pięknie, tylko skąd ten offset wytrzasnąć?

1
_13th_Dragon napisał(a):

Pięknie, tylko skąd ten offset wytrzasnąć?

%n? Przecież napisałem

1

Musze przyznać że jakoś mnie ominęła ta właściwość scanf a parę razy by się przydała.
Na podstawie propozycji od @Zimny Krawiec: http://ideone.com/tsvqAG

#include <stdio.h>

int main()
  {
   const char msg[]="( 3,5) (300 ,500) (543, 657) (1,2) ( 7 , 9 )";
   const char *ptr;
   int y,x,ret,offset;
   for(ptr=msg;sscanf(ptr," ( %d , %d )%n",&y,&x,&offset)==2;ptr+=offset) printf("%d,%d\n",y,x);
   return 0;
  }
0

A tak btw: (za http://linux.die.net/man/3/scanf):

The C standard says: "Execution of a %n directive does not increment the assignment count returned at the completion of execution" but the Corrigendum seems to contradict this. Probably it is wise not to make any assumptions on the effect of %n conversions on the return value.

1 użytkowników online, w tym zalogowanych: 0, gości: 1