Skocz do zawartości
Bartcislaw

[ROZWIĄZANY]Sscanf nie pobiera albo pobiera błędnie

Rekomendowane odpowiedzi

Cześć, natknąłem się na problem ze sscanf'em. Pobrałem stringa przez pvary, a następnie wyświetliłem go na ekranie i wyszło coś takiego:

e2rccsi.png

Chcę teraz tylko i wyłącznie pobrać X, Y i Z czyli wartości float, więc robie tako:

sscanf(string2, "fff", trasy[playerid][rtPosX][0], trasy[playerid][rtPosX][1], trasy[playerid][rtPosX][2]);

I cały czas pokazuję mi jedną wartość, zwłaszcza że zmieniam jakby wiersze w dialoglist.

O co kaman?

Edytowane przez Frank

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Pokaż string2.

Ale na tyle co widzę, to mogę jedynie zasugerować spróbowanie tego:

sscanf(string2, "{dd}fff", trasy[playerid][rtPosX][0], trasy[playerid][rtPosX][1], trasy[playerid][rtPosX][2]);

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Nie działa, a co do striga2:

SetPVarString(playerid, "CP_STRING", inputtext); 
new string2[256]; GetPVarString(playerid, "CP_STRING", string2, sizeof(string2));

inputext - z dialogu

 

Edytowane przez Frank

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Chcesz rozdzielic to co jest w tym obrazku sscanfem z tego co zrozumialem hahahahaha XD ? 

Od razu Ci mowie wracaj do czytania ksiazek jak to ty napisales pewnemu uzytkownikowi ktory nie umial sobie poradzic z problemem.

Ale dobra. Po pierwsze zeby to rozdzielic tekst nusi byc zapisany w formie id,m,x,y,z.

Jak to zrobic? trzeba umiec sie poslugiwac sscanfem, najlepiej z poradnika y_lessa a nie z pseudo map(zgaduje po twoim kodzie ze tak sie nauczyles) 

a wiec dajmy na to ze string2 zwraca 5,2,6.8,9.3,5.2 

sscanf(string2, "p<,>dda<f>[3]", id, m, trasy[playerid][rtPosX]);

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach
5 godzin temu, Frank napisał:

Nie uczę się z mapek tylko z tego co znajduję na forum. Mogę prosić o link do tego poradnika? Swoją drogą skoro taki z Ciebie 'programista' to co pokazujesz na swoim przykładzie a nie na moim? :D

On ci tłumaczy na swoim po to żebyś tak zrobiłu siebie i się nauczył jak powinno o być zrobione...

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach
7 godzin temu, Frank napisał:

Nie uczę się z mapek tylko z tego co znajduję na forum. Mogę prosić o link do tego poradnika? Swoją drogą skoro taki z Ciebie 'programista' to co pokazujesz na swoim przykładzie a nie na moim? :D

 

Bo twój przykład jest niewykonalny. 

Jak chcesz rozdzielić ID: 9 M: 35 X: 165.591 ... itd  hę?

No powiedz, bo może ja czegoś nie wiem hahahaaha. 

Napisałem Ci powyżej jak musisz zapisywać liczby, to tyle :P

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Jedyny pomysł jaki przychodzi mi do głowy to funkcje strfind -> strmid, czyli wyszukujesz w danym ciągu znaków frazę ": " i następnie spację, następnie idzie w ruch funkcja strmid. Przykład

 

 



new string[64] = "ID: 21 M: 35 X: 165.591", copy_string[16], str_idx[2];

str_idx[0] = strfind(string, ": ", true, 0);

str_idx[1] = strfind(string, " ", true, str_idx[0]);

strmid(copy_string, string, str_idx[0], str_idx[1]);

 

Coś w tym stylu, jeśli ilość znaków nie będzie pasować, to musisz dodać albo odjąć 1 przy funkcji strfind.

Edytowane przez BaLL

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Zauważyłem tutaj trzy osoby które siedzą w temacie kilka lat i żadna z nich nie umie skorzystać z sscanfa tworząc banalną regułkę? w dodatku upieracie sie to nie mozliwe i kombinujecie jakimis strfind. :facepalm2:

 

	new buffer[64] = "ID: 5 M: 35 X: 1365.0 Y: 1354.4 Z: 25.45";
	new id, m, Float:XYZ[3];
	if (sscanf(buffer,"p< >'ID:'d'M:'d'X:'f'Y:'f'Z:'f",id, m, XYZ[0], XYZ[1], XYZ[2]))
		return printf("blad pobierania danych.");

	printf("id %d m %d\n\tX: %.2f\n\tY: %.2f\n\tZ: %.2f", id, m, XYZ[0], XYZ[1], XYZ[2]);

 

id 5 m 35
        X: 1365.00
        Y: 1354.40
        Z: 25.45

 

Edit: tutaj na pobieranie samego XYZ

 

	if (sscanf(buffer,"p< >'ID:'{d}'M:'{d}'X:'f'Y:'f'Z:'f", XYZ[0], XYZ[1], XYZ[2]))

 
Edytowane przez Beata_Szydlo_2015
dodanie pobierania samego XYZ

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach
Gość
Ten temat został zamknięty. Brak możliwości dodania odpowiedzi.

  • Przeglądający   0 użytkowników

    Brak zarejestrowanych użytkowników przeglądających tę stronę.

×