Pregunta sobre windows, scanf, c, visual-studio – ¿Qué tipo de sscanf Modifier% Fd escanea?

1

Me he encontrado con un código heredado que tiene el siguiente tipo de línea:

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

¿Alguien ha visto un modificador como Fd o Ff? Si es así, ¿qué significa?

Parece que no puedo encontrar ninguna información sobre él. El código compila y funciona bien.

¿Qué compilador y / o entorno de desarrollo? Throwback1986
¿Por qué cortó el ejemplo en el lugar donde se pone interesante, es decir, los otros argumentos de sscanf y sus declaraciones? Jens

Tu respuesta

3   la respuesta
6

fscanf funciones:

(C991, 7.19.6.2p14) Los especificadores de conversión A, E, F, G y X también son válidos y se comportan de la misma manera que, respectivamente, a, e, f, g y x.

Así que en%Fd, la especificación de conversión es%F que es equivalente a%f. Tenga en cuenta que eld no es parte de la especificación de conversión.

Por ejemplo (parafprintf funciones%F también es lo mismo que%f):

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

imprimirá:

3.141592d

1. C89 / C90 no reconoce laF especificador de conversión. Por ejemplo, parafscanf El párrafo C90 correspondiente en 7.9.6.2 dice:Los especificadores de conversión E, G y X también son válidos y se comportan de la misma manera que, respectivamente, e, g y x

Parece que Jack está usando un sistema no estándar, donde "% Fs" en realidad necesita un puntero a personaje para ir con él, y "F" es un modificador. Jens
1

estos son los mismos que sus equivalentes en minúsculas. ¿Porqué es eso? Para simetría con los especificadores de conversión de printf. aquí%x y%X escribe números en minúsculas o mayúsculas comodeadbeef yDEADBEEF. La simetría permite usar la misma cadena de formato para ambas entradas conscanf y salida conprintf.

#define FMT "%F\n"

sscanf (str, FMT, &value);
printf (FMT, value);
Está bien, entonces me temo que es indocumentada. Los modificadores de scanf de Visual Studio 10 se enumeran aquí:msdn.microsoft.com/en-us/library/xdb9w69d.aspx "F" no aparece en ninguna parte. Jens
Y estos son todos los punteros afloat (para% F ...) yint (para% d), ¿verdad? Jens
Aquí hay una línea de código de ejemplo: sscanf (szTemp, "% Ff% Ff% Ff% Ff% d% d% Fd% Fd% Ff% d% Fs% d", & sp_fpt0.x, & sp_fpt0.y, & sp_fpt1 .x, & sp_fpt1.y, & iMember1, & iMember2, & sp_iMember1End, & sp_iMember2End, & sp_fDist, & iSpliceMember, & iPlumbMember, sp_szOrigLabel, & sp_iPlumbIntLoc); Jack
Eso es correcto. El% Fs es para una cadena de caracteres (char sp_szOrigLabel [20]) Jack
1

%F Es una extensión POSIX (y C99).

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

"Los especificadores de conversión A, E, F, G y X también son válidos y serán equivalentes a a, e, f, g y x, respectivamente".

Preguntas relacionadas