Pytanie w sprawie c, windows, scanf, visual-studio – Jaki typ skanuje sscanf Modifier% Fd?

1

Zetknąłem się z jakimś starszym kodem, który ma następujący typ linii:

sscanf (szBuff, "% Fd% Ff% Fd% Ff"

Czy ktoś widział modyfikator, taki jak Fd lub Ff? Jeśli tak, co to znaczy?

Nie mogę znaleźć żadnych informacji na ten temat. Kod kompiluje się i działa poprawnie.

Dlaczego wyciąłeś przykład w miejscu, gdzie robi się interesująco, tj. Inne argumenty sscanf i ich deklaracje? Jens
Jaki kompilator i / lub środowisko dev? Throwback1986

Twoja odpowiedź

3   odpowiedź
1

%F jest rozszerzeniem POSIX (i C99).

http://pubs.opengroup.org/onlinepubs/007904975/functions/scanf.html

„Specyfikacje konwersji A, E, F, G i X są również ważne i powinny być równoważne odpowiednio a, e, f, g i x”.

6

C mówi zafscanf Funkcje:

(C991, 7.19.6.2p14) Specyfikacje konwersji A, E, F, G i X są również ważne i zachowują się tak samo jak, odpowiednio, a, e, f, g i x.

Tak w%Fd, specyfikacja konwersji to%F co jest równoważne%f. Zauważ, żed nie jest częścią specyfikacji konwersji.

Na przykład (dlafprintf Funkcje%F jest również taki sam jak%f):

printf("%fd\n", 3.141592);

wydrukuje:

3.141592d

1. C89 / C90 nie rozpoznajeF specyfikator konwersji. Na przykład dlafscanf Odpowiedni akapit C90 w 7.9.6.2 mówi:Specyfikacje konwersji E, G i X są również ważne i zachowują się tak samo, jak odpowiednio e, g i x

Wygląda na to, że Jack używa niestandardowego systemu, gdzie „% Fs” rzeczywiście potrzebuje wskaźnika do znaku, aby go użyć, a „F” jest modyfikatorem. Jens
1

Jak zauważył ouah, są one takie same jak ich małe odpowiedniki. Dlaczego? Dla symetrii z specyfikatorami konwersji printf. Tutaj%x i%X zapisuj małe lub duże cyfry jakdeadbeef iDEADBEEF. Symetria pozwala na użycie tego samego ciągu formatu dla obu wejśćscanf i wyjście zprintf.

#define FMT "%F\n"

sscanf (str, FMT, &value);
printf (FMT, value);
Ok, obawiam się, że jest nieudokumentowany. Modyfikatory Visual Studio 10 scanf są wymienione tutaj:msdn.microsoft.com/en-us/library/xdb9w69d.aspx „F” nie pojawia się nigdzie. Jens
Oto jeden przykład przykładowego kodu: sscanf (szTemp, "% Ff% Ff% Ff% Ff% d% d% Fd% Fd% Ff% d% d% Fs% d", & sp_fpt0.x, & sp_fpt0.y, & sp_fpt1 .x, & sp_fpt1.y, i iMember1, i iMember2, & sp_iMember1End, & sp_iMember2End, & sp_fDist, & iSpliceMember, i iPlumbMember, sp_szOrigLabel, & sp_iPlumbIntLoc); Jack
Rozumiesz moją frustrację? Znak char [] nie jest zmiennoprzecinkowy, podobnie jak liczby całkowite poddane% Fd! Korzystam z Microsoft Visual Studio 10. Ten kod jest dostępny przez długi czas. Jack
Whoa! Nie, to nie jest poprawne. ZAchar[] jestnie a float. Wygląda na to, że twój system (Windows?) Nie używa semantyki POSIX dla% F i traktujeF jako modyfikator dla% s! Jaki jest twój sprzedawca systemu i dostawca kompilatora / biblioteki? Jens

Powiązane pytania