Pergunta sobre windows, scanf, c, visual-studio – De que tipo o modificador sscanf% Fd faz a varredura?

1

Eu me deparei com algum código legado que possui o seguinte tipo de linha:

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

Alguém viu um modificador como Fd ou Ff? Se sim, o que isso significa?

Eu não consigo encontrar nenhuma informação sobre isso. O código compila e executa bem.

Que compilador e / ou ambiente de desenvolvimento? Throwback1986
Por que você cortou o exemplo no lugar onde fica interessante, ou seja, os outros argumentos sscanf e suas declarações? Jens

Sua resposta

3   a resposta
6

fscanf funções:

(C991, 7.19.6.2p14) Os especificadores de conversão A, E, F, G e X também são válidos e se comportam da mesma forma que, respectivamente, a, e, f, g e x.

Então, em%Fd, a especificação de conversão é%F que é equivalente a%f. Note que od não faz parte da especificação de conversão.

Por exemplo (parafprintf funções%F também é o mesmo que%f):

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

vai imprimir:

3.141592d

1. C89 / C90 não reconhece oF especificador de conversão. Por exemplo, parafscanf o parágrafo C90 correspondente em 7.9.6.2 diz:Os especificadores de conversão E, G e X também são válidos e se comportam da mesma forma que, respectivamente, e, g e x

Parece que Jack está usando um sistema não-padrão, no qual "% Fs" precisa de um ponteiro para um caractere, e "F" é um modificador. Jens
1

%F é uma extensão POSIX (e C99).

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

"Os especificadores de conversão A, E, F, G e X também são válidos e devem ser equivalentes a a, e, f, g e x, respectivamente."

1

estes são os mesmos que os seus equivalentes em minúsculas. Por que é que? Para simetria com os especificadores de conversão printf. Aqui%x e%X escreva números minúsculos ou maiúsculos comodeadbeef eDEADBEEF. A simetria permite usar a mesma string de formato para ambas as entradasscanf e saída comprintf.

#define FMT "%F\n"

sscanf (str, FMT, &value);
printf (FMT, value);
Uau! Não, isso não está correto então. UMAchar[] énão a float. Parece que o seu sistema (Windows?) Não está usando a semântica POSIX para% F e trata oF como um modificador para% s! Qual é o seu fornecedor de sistemas e fornecedor de compiladores / bibliotecas? Jens
Ok, então eu tenho medo que seja indocumentado. Os modificadores scanf do Visual Studio 10 estão listados aqui:msdn.microsoft.com/pt-br/library/xdb9w69d.aspx "F" não aparece em nenhum lugar. Jens
Está correto. O% Fs é para uma string char (char sp_szOrigLabel [20]) Jack
Estes são todos indicadores parafloat (para% F ...) eint (por% d), certo? Jens

Perguntas relacionadas